/*
* ====================================================================
* Copyright (c) 2004-2012 TMate Software Ltd. All rights reserved.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
* are also available at http://svnkit.com/license.html
* If newer versions of this license are posted there, you may use a
* newer version instead, at your option.
* ====================================================================
*/
package org.tmatesoft.svn.core.internal.wc;
import java.io.OutputStream;
import org.tmatesoft.svn.core.ISVNCanceller;
import org.tmatesoft.svn.core.SVNCommitInfo;
import org.tmatesoft.svn.core.SVNException;
import org.tmatesoft.svn.core.SVNPropertyValue;
import org.tmatesoft.svn.core.internal.wc17.SVNWCContext;
import org.tmatesoft.svn.core.io.ISVNEditor;
import org.tmatesoft.svn.core.io.diff.SVNDiffWindow;
import org.tmatesoft.svn.util.ISVNDebugLog;
import org.tmatesoft.svn.util.SVNDebugLog;
import org.tmatesoft.svn.util.SVNLogType;
/**
* @version 1.3
* @author TMate Software Ltd.
*/
public class SVNCancellableEditor implements ISVNUpdateEditor {
private ISVNEditor myDelegate;
private ISVNCanceller myCancel;
private ISVNDebugLog myLog;
public static ISVNEditor newInstance(ISVNEditor editor, ISVNCanceller cancel, ISVNDebugLog log) {
if (cancel != null) {
return new SVNCancellableEditor(editor, cancel, log);
}
return editor;
}
private SVNCancellableEditor(ISVNEditor delegate, ISVNCanceller cancel, ISVNDebugLog log) {
myDelegate = delegate;
myCancel = cancel;
myLog = log == null ? SVNDebugLog.getDefaultLog() : log;
}
public void targetRevision(long revision) throws SVNException {
myCancel.checkCancelled();
myDelegate.targetRevision(revision);
}
public void openRoot(long revision) throws SVNException {
myCancel.checkCancelled();
myLog.logFine(SVNLogType.WC, "root");
myDelegate.openRoot(revision);
}
public void deleteEntry(String path, long revision) throws SVNException {
myCancel.checkCancelled();
myLog.logFine(SVNLogType.WC, "del " + path);
myDelegate.deleteEntry(path, revision);
}
public void absentDir(String path) throws SVNException {
myCancel.checkCancelled();
myLog.logFine(SVNLogType.WC, "absent dir " + path);
myDelegate.absentDir(path);
}
public void absentFile(String path) throws SVNException {
myCancel.checkCancelled();
myLog.logFine(SVNLogType.WC, "absent file " + path);
myDelegate.absentFile(path);
}
public void addDir(String path, String copyFromPath, long copyFromRevision) throws SVNException {
myCancel.checkCancelled();
myLog.logFine(SVNLogType.WC, "add dir " + path);
myDelegate.addDir(path, copyFromPath, copyFromRevision);
}
public void openDir(String path, long revision) throws SVNException {
myCancel.checkCancelled();
myLog.logFine(SVNLogType.WC, "open dir " + path);
myDelegate.openDir(path, revision);
}
public void changeDirProperty(String name, SVNPropertyValue value) throws SVNException {
myCancel.checkCancelled();
myLog.logFine(SVNLogType.WC, "change dir prop " + name + " = " + SVNPropertyValue.getPropertyAsString(value));
myDelegate.changeDirProperty(name, value);
}
public void closeDir() throws SVNException {
myCancel.checkCancelled();
myLog.logFine(SVNLogType.WC, "close dir");
myDelegate.closeDir();
}
public void addFile(String path, String copyFromPath, long copyFromRevision) throws SVNException {
myCancel.checkCancelled();
myLog.logFine(SVNLogType.WC, "add file " + path);
myDelegate.addFile(path, copyFromPath, copyFromRevision);
}
public void openFile(String path, long revision) throws SVNException {
myCancel.checkCancelled();
myLog.logFine(SVNLogType.WC, "open file " + path);
myDelegate.openFile(path, revision);
}
public void applyTextDelta(String path, String baseChecksum) throws SVNException {
myCancel.checkCancelled();
myLog.logFine(SVNLogType.WC, "apply delta " + path);
myDelegate.applyTextDelta(path, baseChecksum);
}
public OutputStream textDeltaChunk(String path, SVNDiffWindow diffWindow) throws SVNException {
myLog.logFine(SVNLogType.WC, "delta chunk " + path);
return myDelegate.textDeltaChunk(path, diffWindow);
}
public void textDeltaEnd(String path) throws SVNException {
myLog.logFine(SVNLogType.WC, "delta end " + path);
myDelegate.textDeltaEnd(path);
}
public void changeFileProperty(String path, String name, SVNPropertyValue value) throws SVNException {
myCancel.checkCancelled();
myLog.logFine(SVNLogType.WC, "change file prop " + name + " = " + SVNPropertyValue.getPropertyAsString(value));
myDelegate.changeFileProperty(path, name, value);
}
public void closeFile(String path, String textChecksum) throws SVNException {
myCancel.checkCancelled();
myLog.logFine(SVNLogType.WC, "close file " + path);
myDelegate.closeFile(path, textChecksum);
}
public SVNCommitInfo closeEdit() throws SVNException {
myCancel.checkCancelled();
myLog.logFine(SVNLogType.WC, "close edit");
return myDelegate.closeEdit();
}
public void abortEdit() throws SVNException {
myLog.logFine(SVNLogType.WC, "abort edit");
myDelegate.abortEdit();
}
public long getTargetRevision() {
if (myDelegate instanceof ISVNUpdateEditor) {
return ((ISVNUpdateEditor) myDelegate).getTargetRevision();
}
return SVNWCContext.INVALID_REVNUM;
}
}