package org.kevoree.library.reasoner.ecj.dpa;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.kevoree.ComponentType;
import org.kevoree.ContainerNode;
import org.kevoree.ContainerRoot;
import org.kevoree.NamedElement;
import org.kevoree.TypeDefinition;
import org.kevoree.library.tools.dpa.DPA;
import org.kevoree.tools.marShell.parser.ParserUtil;
public class AddComponentDPA implements DPA {
public final static String componentName = "component";
public final static String typeDefinition = "type";
public final static String nodeName = "node";
public final static String scriptPath = "addComponent.kevs";
private static int increment = 0;
public List<Map<String, NamedElement>> applyPointcut(ContainerRoot myModel) {
List<Map<String, NamedElement>> results = new ArrayList();
for (ContainerNode containerNode : myModel.getNodes()) {
for (TypeDefinition typeDef : myModel.getTypeDefinitions()) {
if (typeDef instanceof ComponentType) {
Map<String, NamedElement> myMap = new HashMap<String, NamedElement>();
myMap.put(this.typeDefinition, (NamedElement) typeDef);
myMap.put(this.nodeName, (NamedElement) containerNode);
results.add(myMap);
}
}
}
return results;
}
public String getScript(Map<String, NamedElement> myMap) {
String script = ParserUtil.loadFile(this.getClass().getClassLoader().getResource(scriptPath).getFile());
for (String name : myMap.keySet()) {
String replacedString = "${" + name + "}";
script = script.replace(replacedString, myMap.get(name).getName());
}
// the next line should be removed if we enable script without specifying componentName
script = script.replace("${" + this.componentName + "}", myMap.get(this.typeDefinition).getName()+increment++ );
return script;
}
}