/*
* Copyright (C) 2006, 2007 Dennis Hunziker, Ueli Kistler
* Copyright (C) 2007 Reto Schuettel, Robin Stocker
*
* IFS Institute for Software, HSR Rapperswil, Switzerland
*
*/
package org.python.pydev.refactoring.codegenerator.generateproperties;
import java.util.ArrayList;
import java.util.List;
import org.python.pydev.parser.jython.ast.factory.AdapterPrefs;
import org.python.pydev.parser.jython.ast.factory.NodeHelper;
import org.python.pydev.refactoring.ast.adapters.INodeAdapter;
import org.python.pydev.refactoring.ast.adapters.PropertyTextAdapter;
import org.python.pydev.refactoring.ast.adapters.offsetstrategy.IOffsetStrategy;
import org.python.pydev.refactoring.codegenerator.generateproperties.request.GeneratePropertiesRequest;
import org.python.pydev.refactoring.core.model.generateproperties.TreeAttributeNode;
import org.python.pydev.refactoring.core.model.generateproperties.TreeClassNode;
import org.python.pydev.refactoring.core.model.tree.TreeNodeSimple;
import org.python.pydev.refactoring.core.request.IRequestProcessor;
public class GeneratePropertiesRequestProcessor implements IRequestProcessor<GeneratePropertiesRequest> {
private Object[] checked;
private int offsetMethodStrategy;
private int offsetPropertyStrategy;
private int accessModifier;
private AdapterPrefs adapterPrefs;
public GeneratePropertiesRequestProcessor(AdapterPrefs adapterPrefs) {
this.adapterPrefs = adapterPrefs;
checked = new Object[0];
offsetMethodStrategy = IOffsetStrategy.AFTERINIT;
offsetPropertyStrategy = IOffsetStrategy.END;
accessModifier = NodeHelper.ACCESS_PUBLIC;
}
public void setCheckedElements(Object[] checked) {
this.checked = checked;
}
private List<TreeAttributeNode> getAttributes() {
List<TreeAttributeNode> attrs = new ArrayList<TreeAttributeNode>();
for (Object elem : checked) {
if (elem instanceof TreeAttributeNode) {
attrs.add((TreeAttributeNode) elem);
}
}
return attrs;
}
private List<PropertyTextAdapter> getProperties(TreeAttributeNode attr) {
List<PropertyTextAdapter> props = new ArrayList<PropertyTextAdapter>();
for (Object elem : checked) {
if (elem instanceof TreeNodeSimple) {
TreeNodeSimple<? extends INodeAdapter> propertyNode = (TreeNodeSimple<?>) elem;
if (propertyNode.getParent() == attr) {
props.add((PropertyTextAdapter) propertyNode.getAdapter());
}
}
}
return props;
}
public List<GeneratePropertiesRequest> getRefactoringRequests() {
List<GeneratePropertiesRequest> requests = generateRequests();
return requests;
}
private List<GeneratePropertiesRequest> generateRequests() {
List<GeneratePropertiesRequest> requests = new ArrayList<GeneratePropertiesRequest>();
for (TreeAttributeNode elem : getAttributes()) {
GeneratePropertiesRequest request = extractRequest(elem);
if (request != null) {
requests.add(request);
}
}
return requests;
}
private GeneratePropertiesRequest extractRequest(TreeAttributeNode attr) {
if (attr.getParent() != null && attr.getParent() instanceof TreeClassNode) {
TreeClassNode classNode = (TreeClassNode) attr.getParent();
return new GeneratePropertiesRequest(classNode.getAdapter(), attr.getAdapter(), getProperties(attr),
offsetMethodStrategy, offsetPropertyStrategy, accessModifier, adapterPrefs);
}
return null;
}
public void setMethodDestination(int strat) {
this.offsetMethodStrategy = strat;
}
public void setPropertyDestination(int strat) {
this.offsetPropertyStrategy = strat;
}
public void setAccessModifier(int accessModifier) {
this.accessModifier = accessModifier;
}
}