package org.eclipse.gmf.tests.samples;
import org.eclipse.gmf.codegen.gmfgen.GMFGenFactory;
import org.eclipse.gmf.codegen.gmfgen.GenCustomGeneratorExtension;
import org.eclipse.gmf.codegen.gmfgen.GenEditorGenerator;
import org.eclipse.gmf.codegen.gmfgen.GenTemplateInvocation;
import org.eclipse.gmf.tests.setup.RuntimeBasedGeneratorConfiguration;
public class LinksSampleTest extends LinksSampleTestBase {
public static final String GIT_GMFGEN_PATH = "platform:/plugin/org.eclipse.gmf.tooling.examples.links/model/links.gmfgen";
public LinksSampleTest(String name) {
super(name, new RuntimeBasedGeneratorConfiguration());
}
@Override
protected String getRelativeGMFGENPath() {
return GIT_GMFGEN_PATH;
}
public void testAspects() throws Exception {
GenEditorGenerator editorGen = prepareCustomEditorGen("aspects", true);
doTestAspects(editorGen);
}
public void failTestCustomExtension() throws Exception {
GenEditorGenerator editorGen = prepareCustomEditorGen("custom", false);
editorGen.getExtensions().add(createCustomExtension(editorGen));
doTestCustomExtension(editorGen, "src/custom/CustomClass.java");
}
protected GenEditorGenerator prepareCustomEditorGen(String suffix, boolean useDynamicTemplates) throws Exception {
GenEditorGenerator editorGen = loadGMFGENModel(getRelativeGMFGENPath());
editorGen.setPackageNamePrefix(createPackageNamePrefix(editorGen, suffix));
editorGen.setPluginDirectory(createPluginDirectory(editorGen, suffix));
editorGen.getPlugin().setID(editorGen.getPlugin().getID() + "." + suffix);
editorGen.setTemplateDirectory("platform:/plugin/org.eclipse.gmf.tooling.examples.links/xtend/");
editorGen.setDynamicTemplates(useDynamicTemplates);
return editorGen;
}
protected GenCustomGeneratorExtension createCustomExtension(GenEditorGenerator self) {
GenCustomGeneratorExtension result = GMFGenFactory.eINSTANCE.createGenCustomGeneratorExtension();
result.setRootInput(self);
GenTemplateInvocation t = GMFGenFactory.eINSTANCE.createGenTemplateInvocation();
t.setOclExpression("self");
t.setTemplateFqn("custom::CustomTemplate::CustomTemplate");
result.getInvocations().add(t);
return result;
}
private String createPackageNamePrefix(GenEditorGenerator editorGen, String suffix) {
return editorGen.getPackageNamePrefix() + "." + suffix;
}
private String createPluginDirectory(GenEditorGenerator editorGen, String suffix) {
String pluginDirectory = editorGen.getPluginDirectory();
if (pluginDirectory.startsWith("/")) {
pluginDirectory = pluginDirectory.substring(1);
}
String[] pluginDirectoryParts = pluginDirectory.split("/");
StringBuilder result = new StringBuilder("/").append(pluginDirectoryParts[0]);
result.append(".").append(suffix).append("/");
for (int i = 1; i < pluginDirectoryParts.length; i++) {
result.append(pluginDirectoryParts[i]).append("/");
}
return result.toString();
}
}