package plugins.developingAlgorithm; import java.io.File; import java.io.FileOutputStream; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Locale; import java.util.Map; import java.util.TreeMap; import org.molgenis.MolgenisOptions; import org.molgenis.Version; import org.molgenis.generators.GeneratorHelper; import org.molgenis.model.MolgenisModel; import org.molgenis.model.elements.Entity; import org.semanticweb.owlapi.model.OWLOntologyCreationException; import freemarker.cache.ClassTemplateLoader; import freemarker.cache.MultiTemplateLoader; import freemarker.cache.TemplateLoader; import freemarker.template.Template; public class RScriptGenerator { private testModel model = new testModel(); public static void main(String args[]) throws Exception { RScriptGenerator test = new RScriptGenerator(); test.start(); } public testModel getModel() { return model; } public void setModel(testModel model) { this.model = model; } public void start() throws Exception { Template template = createTemplate("/" + this.getClass().getSimpleName() + ".R.ftl"); Map<String, Object> templateArgs = createTemplateArguments(); File target = new File("apps/catalogue/plugins/Rscript/generated.R"); target.getParentFile().mkdirs(); templateArgs.put("model", model); OutputStream targetOut = new FileOutputStream(target); template.process(templateArgs, new OutputStreamWriter(targetOut)); targetOut.close(); } public Template createTemplate(String path) throws Exception { freemarker.template.Configuration cfg = new freemarker.template.Configuration(); cfg.setObjectWrapper(new freemarker.template.DefaultObjectWrapper()); ClassTemplateLoader loader1 = new ClassTemplateLoader(getClass(), ""); ClassTemplateLoader loader2 = new ClassTemplateLoader(GeneratorHelper.class, ""); TemplateLoader[] loaders = new TemplateLoader[] { loader1, loader2 }; MultiTemplateLoader mLoader = new MultiTemplateLoader(loaders); // cfg.setClassForTemplateLoading( this.getClass(), "" ); // NOTE: // without cfg.setTemplateLoader(mLoader); // the '/' on // either end return cfg.getTemplate(path); } public Map<String, Object> createTemplateArguments() { Map<String, Object> args = new TreeMap<String, Object>(); // args.put("stringtools", new StringTools()); Calendar calendar = Calendar.getInstance(); args.put("year", calendar.get(Calendar.YEAR)); DateFormat formatter = new SimpleDateFormat("MMMM d, yyyy, HH:mm:ss", Locale.US); args.put("datetime", formatter.format(new Date())); formatter = new SimpleDateFormat("MMMM d, yyyy", Locale.US); args.put("date", formatter.format(new Date())); // args.put( "date", calendar.get( Calendar.YEAR ) + "/" + // (calendar.get( Calendar.MONTH ) + 1) + "/" + calendar.get( // Calendar.DAY_OF_MONTH ) ); args.put("generator", this.getClass().getName()); args.put("version", Version.convertToString()); return args; } }