package org.codefaces.core.svn.internal.operations;
import java.net.URI;
import java.net.URISyntaxException;
import org.codefaces.core.connectors.SCMConnector;
import org.codefaces.core.connectors.SCMURLException;
import org.codefaces.core.models.Repo;
import org.codefaces.core.models.RepoCredential;
import org.codefaces.core.operations.SCMOperationHandler;
import org.codefaces.core.operations.SCMOperationParameter;
import org.codefaces.core.operations.SCMOperationParameters;
import org.codefaces.core.svn.internal.clientadaptor.SVNRepoInfo;
import org.codefaces.core.svn.internal.connectors.SVNConnector;
import org.eclipse.core.runtime.Assert;
public class SVNConnectionOperationHandler implements SCMOperationHandler {
@Override
public Repo execute(SCMConnector connector, SCMOperationParameters parameter) {
Object urlPara = parameter.getParameter(SCMOperationParameter.URL);
Assert.isTrue(urlPara instanceof String);
Object usernamePara = parameter.getParameter(SCMOperationParameter.USER);
Assert.isTrue(usernamePara == null || usernamePara instanceof String);
Object passwordPara = parameter.getParameter(SCMOperationParameter.PASSWORD);
Assert.isTrue(passwordPara == null || passwordPara instanceof String);
String url = (String) urlPara;
try {
URI uri = new URI(url);
String username = null;
// if username in url, assign it first
if (uri.getUserInfo() != null) {
username = uri.getUserInfo();
}
// now override it if it is passed by parameter
if (usernamePara != null) {
username = (String) usernamePara;
}
String password = (passwordPara != null) ? (String) passwordPara
: null;
SVNConnector svnConnector = (SVNConnector) connector;
SVNRepoInfo repoInfo = svnConnector.getSvnClient().getRepoInfo(url,
username, password);
RepoCredential credential = new RepoCredential(username, password);
return new Repo(connector.getKind(), repoInfo.getUrl(),
repoInfo.getUuid(), credential);
} catch (URISyntaxException e) {
throw new SCMURLException("Invalid Subversion repository url: " + url);
}
}
}