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.AddDelegateMethodResolution;
import br.uff.ic.gems.peixeespadacliente.tool.AddDelegateMethods;
import br.uff.ic.gems.peixeespadacliente.tool.RefactoringTool;
import java.util.ArrayList;
import java.util.Arrays;
import net.sf.refactorit.classmodel.BinField;
import net.sf.refactorit.classmodel.BinMethod;
import net.sf.refactorit.classmodel.BinParameter;
/**
*
* @author João Felipe
*/
public class AddDelegateMethodSymptom extends Symptom {
private String methodQualifiedName;
private String parentQualifiedName;
private String methodName;
private String fieldName;
private BinParameter[] binParameters;
public AddDelegateMethodSymptom(BinField field, BinMethod method, AddDelegateMethods refactoringTool) {
super(refactoringTool);
methodQualifiedName = method.getQualifiedName();
if (refactoringTool.getProject().getTypeRefForSourceName(methodQualifiedName) == null) {
methodQualifiedName = method.getParentType().getQualifiedName() + "." + method.getName();
}
binParameters = method.getParameters();
parentQualifiedName = field.getParentType().getQualifiedName();
if (refactoringTool.getProject().getTypeRefForSourceName(parentQualifiedName) == null) {
parentQualifiedName = field.getParentType().getParentType().getQualifiedName() + "." + field.getParentType().getName();
}
methodName = method.getName();
fieldName = field.getName();
}
@Override
public RefactoringTool getRefactoringTool() {
return this.refactoringTool;
}
public AddDelegateMethods getAddDelegateMethodsRefactoringTool() {
return (AddDelegateMethods) this.refactoringTool;
}
@Override
public List<AddDelegateMethodResolution> generateResolutions(LocalManagerAgent agentPeixeEspada, boolean verify) throws RefactoringException {
List<AddDelegateMethodResolution> result = new ArrayList(Arrays.asList(new AddDelegateMethodResolution(this)));
if (verify && !result.get(0).applyWorking(null)){
return new ArrayList<AddDelegateMethodResolution>();
}
return result;
}
@Override
public String toString() {
return "Delegate Method: " + getFieldQualifiedName() + "." + methodName;
}
public String getMethodQualifiedName() {
return methodQualifiedName;
}
public String getFieldQualifiedName() {
return parentQualifiedName + "." + fieldName;
}
public String getParentQualifiedName() {
return parentQualifiedName;
}
public String getMethodName() {
return methodName;
}
public String getFieldName() {
return fieldName;
}
public BinParameter[] getBinParameters() {
return binParameters;
}
@Override
public String getDescription() {
return " " + this.toString();
}
}