/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package br.uff.ic.oceano.core.service.vcs;
import br.uff.ic.oceano.core.exception.VCSException;
import br.uff.ic.oceano.core.factory.ObjectFactory;
import br.uff.ic.oceano.core.model.ProjectUser;
import br.uff.ic.oceano.core.model.Revision;
import br.uff.ic.oceano.core.model.SoftwareProject;
import br.uff.ic.oceano.core.tools.vcs.SVN_By_CommandLineInterface;
import br.uff.ic.oceano.core.tools.vcs.VCS;
import br.uff.ic.oceano.core.tools.vcs.VCSUtil;
import java.io.File;
import java.util.Calendar;
import java.util.Set;
/**
*
* @author Dancastellani
* este service não é um PersistenceService pois nao depende do BD
*/
public class VCSService {
private VCS svn = ObjectFactory.getObjectWithDataBaseDependencies(SVN_By_CommandLineInterface.class);
public Revision doCheckout(Revision revision, ProjectUser projectUser, boolean createDirectory) throws VCSException {
final VCS propperVersionControlSystem = getVCSForProject(revision.getProject());
return propperVersionControlSystem.doCheckout(revision, projectUser, createDirectory);
}
public Long doCheckout(File createdFileToworkspace, ProjectUser projectUser) throws VCSException {
final VCS propperVersionControlSystem = getVCSForProject(projectUser.getProject());
return propperVersionControlSystem.doCheckout(createdFileToworkspace, projectUser);
}
public Long doCommit(String pathWorkspace, ProjectUser projectUserChanged, String commitMessage) throws VCSException {
final VCS propperVersionControlSystem = getVCSForProject(projectUserChanged.getProject());
return propperVersionControlSystem.doCommit(pathWorkspace, projectUserChanged, commitMessage);
}
public Long doSwitchTo(String pathWorkspace, ProjectUser projectUserChanged, String commitMessage) throws VCSException {
final VCS propperVersionControlSystem = getVCSForProject(projectUserChanged.getProject());
return propperVersionControlSystem.doSwitchTo(pathWorkspace, projectUserChanged, commitMessage);
}
public void doCopyTo(String pathWorkspace, ProjectUser projectUserChanged, String urlDestine) throws VCSException {
final VCS propperVersionControlSystem = getVCSForProject(projectUserChanged.getProject());
propperVersionControlSystem.doCopyTo(pathWorkspace, projectUserChanged, urlDestine);
}
public Long getNumberOfHEADRevision(ProjectUser projectUser) throws VCSException {
final VCS propperVersionControlSystem = getVCSForProject(projectUser.getProject());
return propperVersionControlSystem.getNumberOfHEADRevision(projectUser);
}
public Set<Revision> getRevisions(SoftwareProject project, ProjectUser projectUser) throws VCSException {
final VCS propperVersionControlSystem = getVCSForProject(project);
return propperVersionControlSystem.getRevisions(project, projectUser);
}
public Revision getRevision(SoftwareProject project, ProjectUser projectUser, Calendar calendar) throws VCSException {
final VCS propperVersionControlSystem = getVCSForProject(project);
return propperVersionControlSystem.getRevision(project, projectUser, calendar);
}
public Revision getRevision(SoftwareProject project, ProjectUser projectUser, Long revisionNumber) throws VCSException {
final VCS propperVersionControlSystem = getVCSForProject(project);
return propperVersionControlSystem.getRevision(project, projectUser, revisionNumber);
}
public Revision doUpdate(Revision revision, ProjectUser projectUser, boolean updatePathName) throws VCSException {
final VCS propperVersionControlSystem = getVCSForProject(revision.getProject());
return propperVersionControlSystem.doUpdate(revision, projectUser, updatePathName);
}
private VCS getVCSForProject(SoftwareProject project) throws VCSException {
if(project == null){
throw new VCSException("Software project is null");
}
if(project.getConfigurationItem() == null){
throw new VCSException("Software project configuration item not set in :"+ project);
}
if(project.getConfigurationItem().getRepository() == null){
throw new VCSException("Software project configuration item repository not set in :"+ project);
}
String repositoryName = project.getConfigurationItem().getRepository().getName();
if (repositoryName.equalsIgnoreCase(svn.getName())) {
return svn;
}
throw new VCSException("The repository " + repositoryName + " is not supported yet.\n Please contact Oceano support for more details.");
}
public String getMD5(Revision revision) throws VCSException{
return VCSUtil.getMD5(revision);
}
}