/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package br.uff.ic.gems.peixeespadacliente.strategy; import br.uff.ic.gems.peixeespadacliente.exception.RefactoringException; import br.uff.ic.gems.peixeespadacliente.model.agent.LocalManagerAgent; import br.uff.ic.gems.peixeespadacliente.resolution.Resolution; import br.uff.ic.gems.peixeespadacliente.symptom.Symptom; import br.uff.ic.gems.peixeespadacliente.tool.PullUpMethods; import br.uff.ic.gems.peixeespadacliente.tool.RefactoringTool; import br.uff.ic.gems.peixeespadacliente.tool.applier.RefactoringApplier; import br.uff.ic.gems.peixeespadacliente.tool.factory.FactoryRefactoringTool; import br.uff.ic.oceano.core.exception.ServiceException; import java.util.ArrayList; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; import translation.Translate; /** * * @author GEMS */ public class CurrentStrategy implements Strategy { @Override public void performRefactoring(LocalManagerAgent agentPeixeEspada) throws ServiceException { Translate translate = Translate.getTranslate(); try { for (String strRefactoring : agentPeixeEspada.getSequenceRefactorings()) { if (!agentPeixeEspada.isRunning()) { return; } agentPeixeEspada.createNewMetricsRelatory(strRefactoring); agentPeixeEspada.appendMessage(translate.applying(strRefactoring)); RefactoringTool refactoringTool = (RefactoringTool) FactoryRefactoringTool.getRefactoringTool(RefactoringTool.classMap.get(strRefactoring), agentPeixeEspada.getProjectVCS()); applyRefactoring(agentPeixeEspada, refactoringTool); timeExhaustedMessage(agentPeixeEspada, strRefactoring); } } catch (Throwable throwable) { throw new ServiceException(throwable); } } private void timeExhaustedMessage(LocalManagerAgent agentPeixeEspada, String refactoring) { Translate translate = Translate.getTranslate(); if (agentPeixeEspada.isRunning()) { agentPeixeEspada.appendMessage(translate.refactoringCompleted(refactoring)); } else { agentPeixeEspada.appendMessage(translate.refactoringNotCompleted(refactoring)); } } private void applyRefactoring(LocalManagerAgent agentPeixeEspada, RefactoringTool refactoringTool) throws RefactoringException, ServiceException { Translate translate = Translate.getTranslate(); int count = 1; try { long tempo = System.currentTimeMillis(); List<Symptom> symptoms = refactoringTool.findAllSymptoms(); if ((symptoms != null) && (!symptoms.isEmpty())) { agentPeixeEspada.appendMessage(translate.foundSymptoms(symptoms.size())); agentPeixeEspada.appendMessage(translate.milliseconds(System.currentTimeMillis() - tempo)); } for (int i = 0; i < symptoms.size() && agentPeixeEspada.isRunning(); i++) { Symptom symptom = symptoms.get(i); agentPeixeEspada.appendMessage(translate.symptom(count++)); try { List<? extends Resolution> lista = symptom.generateResolutions(agentPeixeEspada, false); List<Resolution> workingResolutions = new ArrayList<Resolution>(); for (Resolution resolution : lista) { refactoringTool.revertMoDifications(); if (resolution.applyCalculateQA(agentPeixeEspada, null)) { workingResolutions.add(resolution); } else { agentPeixeEspada.testMessage(1, translate.removed(resolution.toString())); } } refactoringTool.revertMoDifications(); RefactoringApplier.applyBestCalculatedResolution(agentPeixeEspada, workingResolutions); } catch (Throwable refactoringException) { agentPeixeEspada.printTestError(0, refactoringException); refactoringException.printStackTrace(); } refactoringTool.revertMoDifications(); System.gc(); } } catch (Exception ex) { throw new RefactoringException(ex); } System.gc(); } }