/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package br.uff.ic.dyevc.application.branchhistory.metric;
import br.uff.ic.dyevc.application.branchhistory.model.ProjectRevisions;
import br.uff.ic.dyevc.application.branchhistory.model.Revision;
import br.uff.ic.dyevc.application.branchhistory.model.VersionedItem;
import br.uff.ic.dyevc.application.branchhistory.model.VersionedProject;
import br.uff.ic.dyevc.exception.VCSException;
import br.uff.ic.dyevc.tools.vcs.git.GitConnector;
import java.io.File;
import java.io.IOException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.commons.io.FileUtils;
import org.eclipse.jgit.api.Git;
import org.eclipse.jgit.api.ResetCommand;
import org.eclipse.jgit.api.errors.CheckoutConflictException;
import org.eclipse.jgit.api.errors.GitAPIException;
/**
*
* @author wallace
*/
public abstract class Metric {
String TEMP_BRANCHES_HISTORY_PATH = System.getProperty("user.home") + "/.dyevc/TEMP_BRANCHES_HISTORY/";
abstract int getNumberOfRevisions();
public String getValue(Revision revision, VersionedItem versionedItem){
String auxiliarPaths[] = createDirs(versionedItem);
return calculate(revision, versionedItem, auxiliarPaths);
}
public abstract String getName();
abstract String calculate(Revision revision, VersionedItem versionedItem, String auxiliarPaths[]);
private String[] createDirs(VersionedItem versionedItem){
int numberOfRevisions = getNumberOfRevisions();
String[] auxiliarPaths = new String[numberOfRevisions];
for(int i = 0; i < numberOfRevisions; i++){
File file = new File(TEMP_BRANCHES_HISTORY_PATH + versionedItem.getVersionedProject().getName() + "_" + (i+1));
auxiliarPaths[i] = TEMP_BRANCHES_HISTORY_PATH + versionedItem.getVersionedProject().getName()+ "_" + (i+1)+"/";
if(!file.exists())
{
createDirectory(TEMP_BRANCHES_HISTORY_PATH + versionedItem.getVersionedProject().getName()+ "_" + (i+1)+"/"+versionedItem.getVersionedProject().getName());
try {
FileUtils.copyDirectory(new File(versionedItem.getVersionedProject().getAbsolutePath()), new File(TEMP_BRANCHES_HISTORY_PATH + versionedItem.getVersionedProject().getName()+ "_" + (i+1)+"/"+versionedItem.getVersionedProject().getName()));
} catch (IOException ex) {
System.out.println("Erro de cópia Metric.createDirs: "+ex.getMessage());
//Logger.getLogger(Metric.class.getName()).log(Level.SEVERE, null, ex);
}
}
try{
GitConnector gitConnector = new GitConnector(TEMP_BRANCHES_HISTORY_PATH + versionedItem.getVersionedProject().getName()+ "_" + (i+1)+"/"+versionedItem.getVersionedProject().getName(), versionedItem.getVersionedProject().getName());
Git git = new Git(gitConnector.getRepository());
ResetCommand resetCommand = git.reset();
resetCommand.setMode(ResetCommand.ResetType.HARD);
resetCommand.call();
} catch (VCSException ex) {
System.out.println("Erro de reset de git (VCSException) Metric.createDirs: "+ex.getMessage());
} catch (GitAPIException ex) {
System.out.println("Erro de reset de git (GitAPIException) Metric.createDirs: "+ex.getMessage());
}
}
return auxiliarPaths;
}
private void createDirectory(String name) {
File file = new File(name);
if (!file.exists()) {
file.mkdirs();
}
}
public String getSignature(){
return this.getClass().getCanonicalName();
}
}