package org.tmatesoft.svn.core.internal.wc2.ng; import java.io.File; import java.io.OutputStream; import org.tmatesoft.svn.core.SVNException; import org.tmatesoft.svn.core.SVNProperties; import org.tmatesoft.svn.core.SVNURL; import org.tmatesoft.svn.core.internal.util.SVNPathUtil; import org.tmatesoft.svn.core.internal.wc.SVNFileUtil; import org.tmatesoft.svn.core.wc.DefaultSVNDiffGenerator; import org.tmatesoft.svn.core.wc.ISVNDiffGenerator; import org.tmatesoft.svn.core.wc2.SvnTarget; public class SvnNewDiffGenerator implements ISVNDiffGenerator, ISvnPropertiesDiffHandler { private final ISvnDiffGenerator generator; private boolean diffDeleted; private boolean diffAdded; private boolean diffCopied; private boolean diffUnversioned; private SVNProperties lastOriginalProperties; private SVNProperties lastPropChanges; public SvnNewDiffGenerator(ISvnDiffGenerator generator) { this.generator = generator; if (generator instanceof DefaultSVNDiffGenerator) { DefaultSVNDiffGenerator defaultGenerator = (DefaultSVNDiffGenerator) generator; this.diffAdded = defaultGenerator.isDiffAdded(); this.diffDeleted = defaultGenerator.isDiffDeleted(); this.diffCopied = defaultGenerator.isDiffCopied(); this.diffUnversioned = defaultGenerator.isDiffUnversioned(); } else { this.diffAdded = true; this.diffDeleted = true; this.diffCopied = false; this.diffUnversioned = false; } } public ISvnDiffGenerator getDelegate() { return generator; } public void init(String anchorPath1, String anchorPath2) { generator.setOriginalTargets(getAbsoluteTarget(anchorPath1), getAbsoluteTarget(anchorPath2)); generator.setAnchors(getAbsoluteTarget(anchorPath1), getAbsoluteTarget(anchorPath2)); } public void setBasePath(File basePath) { generator.setBaseTarget(SvnTarget.fromFile(basePath)); } public void setForcedBinaryDiff(boolean forced) { generator.setForcedBinaryDiff(forced); } public void setEncoding(String encoding) { generator.setEncoding(encoding); } public String getEncoding() { return generator.getEncoding(); } public void setEOL(byte[] eol) { generator.setEOL(eol); } public byte[] getEOL() { return generator.getEOL(); } public void setDiffDeleted(boolean isDiffDeleted) { if (generator instanceof SvnDiffGenerator) { ((SvnDiffGenerator) generator).setDiffDeleted(isDiffDeleted); } else if (generator instanceof SvnOldDiffGenerator) { ((SvnOldDiffGenerator) generator).getDelegate().setDiffDeleted(isDiffDeleted); } diffDeleted = isDiffDeleted; } public boolean isDiffDeleted() { return diffDeleted; } public void setDiffAdded(boolean isDiffAdded) { diffAdded = isDiffAdded; } public boolean isDiffAdded() { return diffAdded; } public void setDiffCopied(boolean isDiffCopied) { diffCopied = isDiffCopied; } public boolean isDiffCopied() { return diffCopied; } public void setDiffUnversioned(boolean diffUnversioned) { this.diffUnversioned = diffUnversioned; } public boolean isDiffUnversioned() { return diffUnversioned; } public File createTempDirectory() throws SVNException { return SVNFileUtil.createTempDirectory("diff"); } public void displayPropDiff(String path, SVNProperties baseProps, SVNProperties diff, OutputStream result) throws SVNException { generator.displayPropsChanged(getTarget(path), "", "", false, baseProps, diff, result); } public void handlePropertiesDiff(SVNProperties originalProperties, SVNProperties propChanges) { lastOriginalProperties = originalProperties; lastPropChanges = originalProperties; } public void displayFileDiff(String path, File file1, File file2, String rev1, String rev2, String mimeType1, String mimeType2, OutputStream result) throws SVNException { generator.displayContentChanged(getTarget(path), file1, file2, rev1, rev2, mimeType1, mimeType2, SvnDiffCallback.OperationKind.Modified, null, lastOriginalProperties, lastPropChanges, result); } public void displayDeletedDirectory(String path, String rev1, String rev2) throws SVNException { generator.displayDeletedDirectory(getTarget(path), rev1, rev2, null); } public void displayAddedDirectory(String path, String rev1, String rev2) throws SVNException { generator.displayAddedDirectory(getTarget(path), rev1, rev2, null); } public boolean isForcedBinaryDiff() { return generator.isForcedBinaryDiff(); } private SvnTarget getTarget(String path) { //TODO: return SvnTarget.fromFile(SVNFileUtil.createFilePath(path)); } private SvnTarget getAbsoluteTarget(String path) { if (SVNPathUtil.isURL(path)) { try { return SvnTarget.fromURL(SVNURL.parseURIEncoded(path)); } catch (SVNException e) { return SvnTarget.fromFile(SVNFileUtil.createFilePath(path)); } } else { return SvnTarget.fromFile(SVNFileUtil.createFilePath(path)); } } }