package br.uff.ic.gems.peixeespadacliente.symptom; import br.uff.ic.gems.peixeespadacliente.exception.RefactoringException; import java.util.List; import br.uff.ic.gems.peixeespadacliente.model.agent.LocalManagerAgent; import br.uff.ic.gems.peixeespadacliente.resolution.CreateFactoryMethodResolution; import br.uff.ic.gems.peixeespadacliente.tool.CreateFactoryMethods; import br.uff.ic.gems.peixeespadacliente.tool.RefactoringTool; import java.util.ArrayList; import java.util.Arrays; import net.sf.refactorit.classmodel.BinConstructor; import net.sf.refactorit.classmodel.BinParameter; import net.sf.refactorit.classmodel.BinTypeRef; /** * * @author João Felipe */ public class CreateFactoryMethodSymptom extends Symptom { private String constructorQualifiedName; private String parentQualifiedName; private BinParameter[] binParameters; private String className; public CreateFactoryMethodSymptom(BinConstructor constructor, CreateFactoryMethods refactoringTool) { super(refactoringTool); constructorQualifiedName = constructor.getQualifiedName(); if (refactoringTool.getProject().getTypeRefForSourceName(constructorQualifiedName) == null) { constructorQualifiedName = constructor.getParentType().getQualifiedName() + "." + constructor.getName(); } binParameters = constructor.getParameters(); parentQualifiedName = constructor.getParentType().getQualifiedName(); if (refactoringTool.getProject().getTypeRefForSourceName(parentQualifiedName) == null) { parentQualifiedName = constructor.getParentType().getParentType().getQualifiedName() + "." + constructor.getParentType().getName(); } className = constructor.getParentType().getName(); } @Override public RefactoringTool getRefactoringTool() { return this.refactoringTool; } public CreateFactoryMethods getCreateFactoryMethodsRefactoringTool() { return (CreateFactoryMethods) this.refactoringTool; } @Override public List<CreateFactoryMethodResolution> generateResolutions(LocalManagerAgent agentPeixeEspada, boolean verify) throws RefactoringException { List<CreateFactoryMethodResolution> result = new ArrayList(Arrays.asList(new CreateFactoryMethodResolution(this, className))); if (verify && !result.get(0).applyWorking(null)){ return new ArrayList<CreateFactoryMethodResolution>(); } return result; } @Override public String toString() { String result = "Create Factory Method for " + parentQualifiedName + "("; for (BinParameter binParameter : binParameters) { result += binParameter.getText()+","; } if (binParameters.length == 0) { result += "."; //será apagado com o substring; } return result.substring(0, result.length()-1) + ")"; } public String getConstructorQualifiedName() { return constructorQualifiedName; } public String getParentQualifiedName() { return parentQualifiedName; } public BinParameter[] getBinParameters() { return binParameters; } public BinTypeRef[] getParametersTypes() { BinTypeRef[] result = new BinTypeRef[binParameters.length]; for (int i = 0; i < binParameters.length; i++) { BinParameter binParameter = binParameters[i]; result[i] = binParameter.getTypeRef(); } return result; } @Override public String getDescription() { return " " + this.toString(); } }