package br.ic.uff.gems.oceano.ourico.experimento.engine; import br.ic.uff.gems.oceano.ourico.experimento.VCS.Subversion; import br.ic.uff.gems.oceano.ourico.experimento.VCS.type.VCS; import br.uff.ic.oceano.core.factory.ObjectFactory; import br.uff.ic.oceano.ourico.service.CheckOutService; import java.io.File; import java.io.IOException; import sandbox.experimento.utils.FileUtils; /** * Executes the study * * @author murta, heliomar */ public class StudyRunner { CheckOutService checkOutService = ObjectFactory.getObjectWithDataBaseDependencies(CheckOutService.class); private String subversionRepository; private int initialConfiguration; private int finalConfiguration; public StudyRunner(String subversionRepository, int initialConfiguration, int finalConfiguration) { this.subversionRepository = subversionRepository; this.initialConfiguration = initialConfiguration; this.finalConfiguration = finalConfiguration; } public void run(VCS vcs, String studyRepository, String studyRepositoryURL, String studyWorkSpace, String exportedWorkSpacePath, String fontPath) { try { // FileUtils.recursiveDelete(new File(studyRepository)); // Create the study repository // vcs.create(studyRepository); // Work with the remaining configurations File exportedWorkspace = null; // Prepare the study to initial confituratin exportedWorkspace = prepareWorkSpaceTempMensuringTime(initialConfiguration, exportedWorkSpacePath, fontPath); vcs.insert(exportedWorkspace.getPath(), studyRepositoryURL); for (int i = initialConfiguration + 1; i <= finalConfiguration; i++) { // Export configuration from subversion exportedWorkspace = prepareWorkSpaceTempMensuringTime(i, exportedWorkSpacePath, fontPath); // execute the plan vcs.plan(studyRepositoryURL, exportedWorkspace, finalConfiguration - i, studyWorkSpace); System.out.println("Versão "+i+" sucesso."); } } catch (Exception e) { e.printStackTrace(); } } /** * Free memory for the next iteration. * While GC can free memory, keep freeing it. */ private void freeMemory() { long memoryBeforeGC; long memoryAfterGC = Runtime.getRuntime().totalMemory(); do { memoryBeforeGC = memoryAfterGC; Runtime.getRuntime().gc(); memoryAfterGC = Runtime.getRuntime().totalMemory(); } while (memoryBeforeGC > memoryAfterGC); } private File prepareWorkSpaceTempMensuringTime(int i, String workspaceDir, String fontPath) throws IOException { freeMemory(); // Create workspace File workspace = new File(workspaceDir); FileUtils.recursiveDelete(workspace); // Export configuration from subversion Subversion.getInstanceToFont(fontPath).export(String.valueOf(i), subversionRepository, workspace.getPath()); return workspace; } // private File prepareWorkSpaceTempMensuringTime(int i, String workspaceDir, String fontPath) throws IOException { // freeMemory(); // // Create workspace // // if(!workspaceDir.endsWith("/")) // workspaceDir += "/"; // // String workspaceDirCO = workspaceDir + "co"; // String workspaceDirEX = workspaceDir + "ex"; // // File workspaceCO = new File(workspaceDirCO); // FileUtils.recursiveDelete(workspaceCO); // File workspaceEX = new File(workspaceDirEX); // FileUtils.recursiveDelete(workspaceEX); // // Export configuration from subversion //// Subversion.getInstanceToFont(fontPath).export(String.valueOf(i), subversionRepository, workspace.getPath()); // Subversion.getInstanceToFont(fontPath).export(String.valueOf(i), subversionRepository, "trunk", workspaceDir+"co", workspaceDir+"ex"); // return workspaceEX; // } private void savingStatistics(String studyRepositoryDir) throws IOException { } }