package org.tmatesoft.svn.core.internal.wc2.ng;
import org.tmatesoft.svn.core.SVNException;
import org.tmatesoft.svn.core.SVNProperties;
import org.tmatesoft.svn.core.internal.util.SVNPathUtil;
import org.tmatesoft.svn.core.wc.DefaultSVNDiffGenerator;
import org.tmatesoft.svn.core.wc.ISVNDiffGenerator;
import org.tmatesoft.svn.core.wc2.SvnTarget;
import java.io.File;
import java.io.OutputStream;
public class SvnOldDiffGenerator implements ISvnDiffGenerator {
private final ISVNDiffGenerator generator;
private SvnTarget repositoryRoot;
public SvnOldDiffGenerator(ISVNDiffGenerator generator) {
this.generator = generator;
}
public ISVNDiffGenerator getDelegate() {
return generator;
}
public void setOriginalTargets(SvnTarget originalTarget1, SvnTarget originalTarget2) {
}
public void setAnchors(SvnTarget originalTarget1, SvnTarget originalTarget2) {
generator.init(getDisplayPath(originalTarget2), getDisplayPath(originalTarget2));
}
public void setBaseTarget(SvnTarget baseTarget) {
if (baseTarget.isFile()) {
generator.setBasePath(baseTarget.getFile());
}
}
public void setRepositoryRoot(SvnTarget repositoryRoot) {
this.repositoryRoot = repositoryRoot;
}
public void setEncoding(String encoding) {
generator.setEncoding(encoding);
}
public String getEncoding() {
return generator.getEncoding();
}
public String getGlobalEncoding() {
if (generator instanceof DefaultSVNDiffGenerator) {
return ((DefaultSVNDiffGenerator) generator).getGlobalEncoding();
}
return null;
}
public void setEOL(byte[] eol) {
generator.setEOL(eol);
}
public byte[] getEOL() {
return generator.getEOL();
}
public void setForceEmpty(boolean forceEmpty) {
}
public void setForcedBinaryDiff(boolean forced) {
generator.setForcedBinaryDiff(forced);
}
public void setUseGitFormat(boolean useGitFormat) {
if (generator instanceof SvnNewDiffGenerator) {
((SvnNewDiffGenerator) generator).getDelegate().setUseGitFormat(useGitFormat);
}
}
public void displayDeletedDirectory(SvnTarget displayPath, String revision1, String revision2, OutputStream outputStream) throws SVNException {
generator.displayDeletedDirectory(getDisplayPath(displayPath), revision1, revision2);
}
public void displayAddedDirectory(SvnTarget displayPath, String revision1, String revision2, OutputStream outputStream) throws SVNException {
generator.displayAddedDirectory(getDisplayPath(displayPath), revision1, revision2);
}
public void displayPropsChanged(SvnTarget displayPath, String revision1, String revision2, boolean dirWasAdded, SVNProperties originalProps, SVNProperties propChanges, OutputStream outputStream) throws SVNException {
generator.displayPropDiff(getDisplayPath(displayPath), originalProps, propChanges, outputStream);
}
public void displayContentChanged(SvnTarget displayPath, File leftFile, File rightFile, String revision1, String revision2, String mimeType1, String mimeType2, SvnDiffCallback.OperationKind operation, File copyFromPath, SVNProperties originalProperties, SVNProperties propChanges, OutputStream outputStream) throws SVNException {
if (operation == SvnDiffCallback.OperationKind.Deleted && !generator.isDiffDeleted()
|| operation == SvnDiffCallback.OperationKind.Added && !generator.isDiffAdded()
|| operation == SvnDiffCallback.OperationKind.Copied && !generator.isDiffCopied()) {
return;
}
if (generator instanceof ISvnPropertiesDiffHandler) {
((ISvnPropertiesDiffHandler) generator).handlePropertiesDiff(originalProperties, propChanges);
}
generator.displayFileDiff(getDisplayPath(displayPath), leftFile, rightFile, revision1, revision2, mimeType1, mimeType2, outputStream);
}
private String getDisplayPath(SvnTarget path) {
if (path.isFile()) {
final String absolutePath = path.getFile().getAbsolutePath().replace(File.separatorChar, '/');
final String currentPath = new File("").getAbsolutePath().replace(File.separatorChar, '/');
String relativePath = getRelativePath(absolutePath, currentPath);
if (relativePath != null) {
return relativePath;
} else {
return absolutePath;
}
}
return path.getPathOrUrlString();
}
private String getRelativePath(String targetString, String baseTargetString) {
final String pathAsChild = SVNPathUtil.getPathAsChild(baseTargetString, targetString);
if (pathAsChild != null) {
return pathAsChild;
}
if (targetString.equals(baseTargetString)) {
return "";
}
return null;
}
public boolean isForcedBinaryDiff() {
return generator.isForcedBinaryDiff();
}
}