/*
* ====================================================================
* 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.File;
import java.util.Iterator;
import java.util.Set;
import org.tmatesoft.svn.core.SVNException;
import org.tmatesoft.svn.core.SVNProperties;
import org.tmatesoft.svn.core.SVNProperty;
import org.tmatesoft.svn.core.internal.util.SVNHashSet;
import org.tmatesoft.svn.core.internal.wc.admin.SVNAdminArea;
import org.tmatesoft.svn.core.internal.wc.admin.SVNWCAccess;
import org.tmatesoft.svn.core.wc.SVNStatusType;
/**
* @version 1.3
* @author TMate Software Ltd.
*/
public abstract class AbstractDiffCallback {
private SVNAdminArea myAdminArea;
private File myBasePath;
private Set myDeletedPaths;
protected AbstractDiffCallback(SVNAdminArea adminArea) {
myAdminArea = adminArea;
}
public void setBasePath(File path) {
myBasePath = path;
}
public abstract boolean isDiffUnversioned();
public abstract boolean isDiffCopiedAsAdded();
public abstract File createTempDirectory() throws SVNException;
public abstract SVNStatusType propertiesChanged(String path, SVNProperties originalProperties, SVNProperties diff,
boolean[] isTreeConflicted) throws SVNException;
public abstract SVNStatusType[] fileChanged(String path, File file1, File file2, long revision1, long revision2, String mimeType1,
String mimeType2, SVNProperties originalProperties, SVNProperties diff, boolean[] isTreeConflicted) throws SVNException;
public abstract SVNStatusType[] fileAdded(String path, File file1, File file2, long revision1, long revision2, String mimeType1,
String mimeType2, SVNProperties originalProperties, SVNProperties diff, boolean[] isTreeConflicted) throws SVNException;
public abstract SVNStatusType fileDeleted(String path, File file1, File file2, String mimeType1, String mimeType2,
SVNProperties originalProperties, boolean[] isTreeConflicted) throws SVNException;
public abstract SVNStatusType directoryAdded(String path, long revision, boolean[] isTreeConflicted) throws SVNException;
public abstract SVNStatusType directoryDeleted(String path, boolean[] isTreeConflicted) throws SVNException;
public abstract void directoryOpened(String path, long revision, boolean[] isTreeConflicted) throws SVNException;
public abstract SVNStatusType[] directoryClosed(String path, boolean[] isTreeConflicted) throws SVNException;
protected String getDisplayPath(String path) {
if (myAdminArea == null) {
if (myBasePath != null) {
return new File(myBasePath, path).getAbsolutePath().replace(File.separatorChar, '/');
}
return path.replace(File.separatorChar, '/');
}
return myAdminArea.getFile(path).getAbsolutePath().replace(File.separatorChar, '/');
}
protected void categorizeProperties(SVNProperties original, SVNProperties regular, SVNProperties entry, SVNProperties wc) {
if (original == null) {
return;
}
for(Iterator propNames = original.nameSet().iterator(); propNames.hasNext();) {
String name = (String) propNames.next();
if (regular != null && SVNProperty.isRegularProperty(name)) {
regular.put(name, original.getSVNPropertyValue(name));
} else if (entry != null && SVNProperty.isEntryProperty(name)) {
entry.put(name, original.getSVNPropertyValue(name));
} else if (wc != null && SVNProperty.isWorkingCopyProperty(name)) {
wc.put(name, original.getSVNPropertyValue(name));
}
}
}
protected SVNAdminArea getAdminArea() {
return myAdminArea;
}
protected SVNWCAccess getWCAccess() {
return getAdminArea().getWCAccess();
}
protected void addDeletedPath(String path) {
if (myDeletedPaths == null) {
myDeletedPaths = new SVNHashSet();
}
myDeletedPaths.add(path);
}
protected boolean isPathDeleted(String path) {
return myDeletedPaths != null && myDeletedPaths.contains(path);
}
protected void clearDeletedPaths() {
myDeletedPaths = null;
}
protected void setIsConflicted(boolean[] isConflictedResult, boolean isConflicted) {
if (isConflictedResult != null && isConflictedResult.length > 0) {
isConflictedResult[0] = isConflicted;
}
}
}