/**
* This file is licensed under the University of Illinois/NCSA Open Source License. See LICENSE.TXT for details.
*/
package edu.illinois.codingspectator.monitor.core.submission;
import java.io.File;
import org.tmatesoft.svn.core.SVNDepth;
import org.tmatesoft.svn.core.SVNException;
import org.tmatesoft.svn.core.SVNURL;
import org.tmatesoft.svn.core.internal.io.dav.DAVRepositoryFactory;
import org.tmatesoft.svn.core.internal.io.fs.FSRepositoryFactory;
import org.tmatesoft.svn.core.internal.io.svn.SVNRepositoryFactoryImpl;
import org.tmatesoft.svn.core.wc.SVNClientManager;
import org.tmatesoft.svn.core.wc.SVNInfo;
import org.tmatesoft.svn.core.wc.SVNRevision;
import edu.illinois.codingspectator.monitor.core.Activator;
/**
* Implements remote Subversion operations.
*
* @author Mohsen Vakilian
* @author nchen
*
*/
public class RemoteSVNManager extends AbstractSVNManager {
protected static final String COMMIT_MESSAGE= Activator.PLUGIN_ID;
protected final SVNClientManager cm;
protected final URLManager urlManager;
protected RemoteSVNManager(URLManager urlManager, String svnWorkingCopyDirectory, String username, String password) {
super(svnWorkingCopyDirectory);
this.urlManager= urlManager;
setupLibrary();
cm= SVNClientManager.newInstance(null, username, password);
}
private static void setupLibrary() {
//For using over http:// and https://
DAVRepositoryFactory.setup();
//For using over svn:// and svn+xxx://
SVNRepositoryFactoryImpl.setup();
//For using over file:///
FSRepositoryFactory.setup();
}
public void doImport() throws SVNException {
cm.getCommitClient().doImport(svnWorkingCopyDirectory, urlManager.getPersonalWorkspaceSVNURL(), "Initial import", null, false, true, SVNDepth.INFINITY);
}
public void doCheckout() throws SVNException {
cm.getUpdateClient().doCheckout(urlManager.getPersonalWorkspaceSVNURL(), svnWorkingCopyDirectory, SVNRevision.HEAD, SVNRevision.HEAD, SVNDepth.INFINITY,
true);
}
public void doUpdate() throws SVNException {
cm.getUpdateClient().doUpdate(svnWorkingCopyDirectory, SVNRevision.HEAD, SVNDepth.INFINITY, true, true);
}
public void doCommit() throws SVNException {
File[] pathToCommitFiles= new File[] { svnWorkingCopyDirectory };
cm.getCommitClient().doCommit(pathToCommitFiles, false, COMMIT_MESSAGE, null, null, false, true, SVNDepth.INFINITY);
}
public long getCommittedRevisionNumber() throws SVNException {
return doInfo(urlManager.getPersonalWorkspaceSVNURL()).getCommittedRevision().getNumber();
}
private long getRevisionNumber() throws SVNException {
return doInfo(urlManager.getPersonalWorkspaceSVNURL()).getRevision().getNumber();
}
private SVNInfo doInfo(SVNURL svnURL) throws SVNException {
return cm.getWCClient().doInfo(svnURL, SVNRevision.HEAD, SVNRevision.HEAD);
}
public void doDelete(String commitMessage) throws SVNException {
cm.getCommitClient().doDelete(new SVNURL[] { urlManager.getPersonalWorkspaceSVNURL() }, commitMessage);
}
public boolean isWatchedFolderInRepository() {
try {
getRevisionNumber();
} catch (SVNException e) {
return false;
}
return true;
}
public boolean isAuthenticationInformationValid() {
try {
doInfo(urlManager.getPersonalSVNURL());
} catch (SVNException e) {
return false;
}
return true;
}
}