Skip to main content

Notice: this Wiki will be going read only early in 2024 and edits will no longer be possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.

Jump to: navigation, search

Difference between revisions of "JET FAQ How do I run an individual JET template and get a string back?"

m
m (Refined some small typos in the example.)
 
(3 intermediate revisions by 2 users not shown)
Line 6: Line 6:
  
 
== Answer ==
 
== Answer ==
 +
 +
Note: a more detailed FAQ has been added here [[M2T-JET-FAQ/How do I run a JET template from Java?]]
 +
 
JET 0.8.0 has a class org.eclipse.jet.JET2TemplateManager. You use it something  
 
JET 0.8.0 has a class org.eclipse.jet.JET2TemplateManager. You use it something  
 
like this...
 
like this...
Line 15: Line 18:
 
run.jet ...";
 
run.jet ...";
 
final JET2Context context = new JET2Context( ... source model or null ...);
 
final JET2Context context = new JET2Context( ... source model or null ...);
 +
//Set up a context extender... ???
 +
//TransformContextExtender.getInstance(context);
 
// optionally set any context variables via
 
// optionally set any context variables via
 
context.setVariable("name", ... value ...);
 
context.setVariable("name", ... value ...);
 
final BufferedJET2Writer out = new BodyContentWriter();
 
final BufferedJET2Writer out = new BodyContentWriter();
JET2TemplateManager.run( jetTransformsToSeach, new JET2TemplateManager.ITemplateOperation() {
+
JET2TemplateManager.run( jetTransformsToSearch, new JET2TemplateManager.ITemplateOperation() {
     public run(JET2TemplateManager.ITemplateRunner templateRunner) {
+
     public void run(JET2TemplateManager.ITemplateRunner templateRunner) {
         String result = templateRunner.generate( templatePath, context, out );
+
         templateRunner.generate( templatePath, context, out );
 
     }
 
     }
 
});
 
});

Latest revision as of 13:07, 5 June 2010

Question

I've looked at the runTransformOnX() methods (x=Object,String, ...) in org.eclipse.jet.JET2Platform. Is there a JET2 class that does something like org.eclipse.emf.codegen.jet.JETEmitter in EMF: take a list of arguments, execute a template against them, and return a string?

Answer

Note: a more detailed FAQ has been added here M2T-JET-FAQ/How do I run a JET template from Java?

JET 0.8.0 has a class org.eclipse.jet.JET2TemplateManager. You use it something like this...

String[] jetTransformsToSearch = { "a.b.c", ... };

final String templatePath = "... project relative path of the template to 
run.jet ...";
final JET2Context context = new JET2Context( ... source model or null ...);
//Set up a context extender... ???
//TransformContextExtender.getInstance(context);
// optionally set any context variables via
context.setVariable("name", ... value ...);
final BufferedJET2Writer out = new BodyContentWriter();
JET2TemplateManager.run( jetTransformsToSearch, new JET2TemplateManager.ITemplateOperation() {
    public void run(JET2TemplateManager.ITemplateRunner templateRunner) {
        templateRunner.generate( templatePath, context, out );
     }
});
// do something with the result
String output = out.getContent();

The reason for passing the runnable-like class is that the manager may have to dynamically load JET projects from the workspace. JET is very careful to make sure such things get unloaded again - using the ITemplateOperation helps identify that boundary. In real life, you would probably execute multiple templates in a single ITemplateOperation.

Lastly, I noticed the Javadoc for ITemplateRunner.generate() says it throughs IllegalAccessException. It does not. It throughs IllegalArgumentException of templatePath does not map to a know template. I have submitted bug 195523.


Back to the M2T-JET-FAQ

Copyright © Eclipse Foundation, Inc. All Rights Reserved.