/*
 * Copyright 2019 java-diff-utils.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.github.difflib.unifieddiff;

import com.github.difflib.patch.Patch;

/**
 * Data structure for one patched file from a unified diff file. 
 * 
 * @author Tobias Warneke (t.warneke@gmx.net)
 */
public final class UnifiedDiffFile {

    private String diffCommand;
    private String fromFile;
    private String fromTimestamp;
    private String toFile;
    private String renameFrom;
    private String renameTo;
    private String copyFrom;
    private String copyTo;
    private String toTimestamp;
    private String index;
    private String newFileMode;
    private String oldMode;
    private String newMode;
    private String deletedFileMode;
    private String binaryAdded;
    private String binaryDeleted;
    private String binaryEdited;
    private Patch<String> patch = new Patch<>();
    private boolean noNewLineAtTheEndOfTheFile = false;
    private Integer similarityIndex;

    public String getDiffCommand() {
        return diffCommand;
    }

    public void setDiffCommand(String diffCommand) {
        this.diffCommand = diffCommand;
    }

    public String getFromFile() {
        return fromFile;
    }

    public void setFromFile(String fromFile) {
        this.fromFile = fromFile;
    }

    public String getToFile() {
        return toFile;
    }

    public void setToFile(String toFile) {
        this.toFile = toFile;
    }

    public void setIndex(String index) {
        this.index = index;
    }

    public String getIndex() {
        return index;
    }

    public Patch<String> getPatch() {
        return patch;
    }

    public String getFromTimestamp() {
        return fromTimestamp;
    }

    public void setFromTimestamp(String fromTimestamp) {
        this.fromTimestamp = fromTimestamp;
    }

    public String getToTimestamp() {
        return toTimestamp;
    }

    public void setToTimestamp(String toTimestamp) {
        this.toTimestamp = toTimestamp;
    }

    public Integer getSimilarityIndex() {
        return similarityIndex;
    }

    public void setSimilarityIndex(Integer similarityIndex) {
        this.similarityIndex = similarityIndex;
    }

    public String getRenameFrom() {
        return renameFrom;
    }

    public void setRenameFrom(String renameFrom) {
        this.renameFrom = renameFrom;
    }

    public String getRenameTo() {
        return renameTo;
    }

    public void setRenameTo(String renameTo) {
        this.renameTo = renameTo;
    }

    public String getCopyFrom() {
        return copyFrom;
    }

    public void setCopyFrom(String copyFrom) {
        this.copyFrom = copyFrom;
    }

    public String getCopyTo() {
        return copyTo;
    }

    public void setCopyTo(String copyTo) {
        this.copyTo = copyTo;
    }

    public static UnifiedDiffFile from(String fromFile, String toFile, Patch<String> patch) {
        UnifiedDiffFile file = new UnifiedDiffFile();
        file.setFromFile(fromFile);
        file.setToFile(toFile);
        file.patch = patch;
        return file;
    }

    public void setNewFileMode(String newFileMode) {
        this.newFileMode = newFileMode;
    }
    
    public String getNewFileMode() {
        return newFileMode;
    }

    public String getDeletedFileMode() {
        return deletedFileMode;
    }

    public void setDeletedFileMode(String deletedFileMode) {
        this.deletedFileMode = deletedFileMode;
    }

    public String getOldMode() {
        return oldMode;
    }

    public void setOldMode(String oldMode) {
        this.oldMode = oldMode;
    }

    public String getNewMode() {
        return newMode;
    }

    public void setNewMode(String newMode) {
        this.newMode = newMode;
    }

    public String getBinaryAdded() {
        return binaryAdded;
    }

    public void setBinaryAdded(String binaryAdded) {
        this.binaryAdded = binaryAdded;
    }

    public String getBinaryDeleted() {
        return binaryDeleted;
    }

    public void setBinaryDeleted(String binaryDeleted) {
        this.binaryDeleted = binaryDeleted;
    }

    public String getBinaryEdited() {
        return binaryEdited;
    }

    public void setBinaryEdited(String binaryEdited) {
        this.binaryEdited = binaryEdited;
    }

    public boolean isNoNewLineAtTheEndOfTheFile() {
        return noNewLineAtTheEndOfTheFile;
    }

    public void setNoNewLineAtTheEndOfTheFile(boolean noNewLineAtTheEndOfTheFile) {
        this.noNewLineAtTheEndOfTheFile = noNewLineAtTheEndOfTheFile;
    }
}
