package org.tmatesoft.svn.core.internal.wc2;
import org.tmatesoft.svn.core.SVNException;
import org.tmatesoft.svn.core.internal.wc2.ng.SvnNgRepositoryAccess;
import org.tmatesoft.svn.core.internal.wc2.old.SvnOldRepositoryAccess;
import org.tmatesoft.svn.core.wc.SVNRevision;
import org.tmatesoft.svn.core.wc2.SvnOperation;
public abstract class SvnRemoteOperationRunner<V, T extends SvnOperation<V>> extends SvnOperationRunner<V, T> {
private SvnRepositoryAccess repositoryAccess;
private SvnWcGeneration detectedWcGeneration;
public void reset(SvnWcGeneration wcGeneration) {
super.reset(wcGeneration);
repositoryAccess = null;
detectedWcGeneration = wcGeneration;
}
public boolean isApplicable(T operation, SvnWcGeneration wcGeneration) throws SVNException {
return operation.hasRemoteTargets() || !isRevisionLocalToWc(operation.getRevision());
}
protected SvnRepositoryAccess getRepositoryAccess() throws SVNException {
if (repositoryAccess == null) {
if (getDetectedWcGeneration() == SvnWcGeneration.V16) {
repositoryAccess = new SvnOldRepositoryAccess(getOperation());
} else {
repositoryAccess = new SvnNgRepositoryAccess(getOperation(), getWcContext());
}
}
return repositoryAccess;
}
private SvnWcGeneration getDetectedWcGeneration() {
return detectedWcGeneration;
}
protected boolean isRevisionLocalToWc(SVNRevision revision) {
return revision == SVNRevision.BASE || revision == SVNRevision.WORKING || revision == SVNRevision.COMMITTED;
}
public SvnWcGeneration getWcGeneration() {
return SvnWcGeneration.NOT_DETECTED;
}
}