package damp.ekeko.snippets.gui; import java.util.Map; import org.eclipse.jdt.core.dom.ASTNode; import damp.ekeko.snippets.data.TemplateGroup; public class TemplateCodeGenerator extends TemplatePrettyPrinter { private Map<Object, Object> varsToValues; public TemplateCodeGenerator(TemplateGroup group, Map<Object, Object> varsToValues) { super(group); this.varsToValues = varsToValues; } @Override public void printOpeningNode(Object node) { } @Override public void printClosingNode(Object node) { } public Object getVariableBinding(Object var) { return varsToValues.get(var); } public Object getUnwrappedValue(Object templateElement) { //TODO: value can also stem form LHS template! if(isNodeValueInTemplate(snippet, templateElement)) return templateElement; if(isListValueInTemplate(snippet, templateElement)) return getActualListValueInTemplate(snippet, templateElement); if(isPrimitiveValueInTemplate(snippet, templateElement)) return getActualPrimitiveValueInTemplate(snippet, templateElement); if(isNullValueInTemplate(snippet, templateElement)) return null; //throw new RuntimeException("Unexpected template value to be unwrapped: " + templateElement.toString());] return null; } public String getStringForTemplateElement(Object templateElement) { Object unwrappedValue = getUnwrappedValue(templateElement); if(unwrappedValue == null) return "" + templateElement; return unwrappedValue.toString(); } @Override protected void printVariableReplacement(Object replacementVar) { Object variableBinding = getVariableBinding("" + replacementVar); String variableBindingString = getStringForTemplateElement(variableBinding); this.buffer.append(variableBindingString); } @Override public String prettyPrintSnippet(Object snippet) { setSnippet(snippet); ASTNode root = TemplateGroup.getRootOfSnippet(snippet); root.accept(this); System.out.println(getResult()); return getResult(); } }