package org.molgenis.compute.test.generator; import app.DatabaseFactory; import org.molgenis.compute.design.ComputeParameter; import org.molgenis.compute.design.Workflow; import org.molgenis.compute.design.WorkflowElement; import org.molgenis.compute.runtime.ComputeTask; import org.molgenis.compute.test.temp.Target; import org.molgenis.compute.test.util.TemplateWeaver; import org.molgenis.framework.db.Database; import org.molgenis.framework.db.DatabaseException; import org.molgenis.util.Tuple; import java.util.ArrayList; import java.util.Collection; import java.util.Hashtable; import java.util.List; /** * Created with IntelliJ IDEA. User: georgebyelas Date: 22/08/2012 Time: 12:05 * To change this template use File | Settings | File Templates. */ public class ComputeGeneratorDB implements ComputeGenerator { public static final String RUN_ID = "run_id"; public static final String BACKEND = "backend"; public static final String BACKEND_GRID = "grid"; public static final String BACKEND_PBS = "pbs"; // supplementary Hashtable<WorkflowElement, ComputeTask> workflowElementComputeTaskHashtable = new Hashtable<WorkflowElement, ComputeTask>(); private TemplateWeaver weaver = new TemplateWeaver(); private FoldingMaster foldingMaster = new FakeFoldingMaster(); private Hashtable<String, String> userValues = null; private String backend = "grid"; Database db = null; public void generate(Workflow workflow, List<ComputeParameter> parameters, List<Target> targets, Hashtable<String, String> config) { this.userValues = config; Collection<ComputeParameter> listParameters = parameters; Collection<WorkflowElement> listWorkflowElements = workflow.getWorkflowWorkflowElementCollection(); try { db = DatabaseFactory.create(); db.beginTx(); } catch (DatabaseException e) { e.printStackTrace(); } List<ComputeTask> tasks = new ArrayList<ComputeTask>(); for (WorkflowElement workflowElement : listWorkflowElements) { // most probably values generation Hashtable<String, String> values = foldingMaster.createValues(listParameters, targets, userValues); String template = workflowElement.getProtocol().getScriptTemplate(); String result = weaver.weaveFreemarker(template, values); ComputeTask task = new ComputeTask(); String taskName = workflowElement.getName() + "_" + userValues.get(RUN_ID); task.setName(taskName); task.setComputeScript(result); task.setInterpreter(workflowElement.getProtocol().getScriptInterpreter()); task.setRequirements(workflowElement.getProtocol().getRequirements()); task.setWorkflowElement(workflowElement); List<WorkflowElement> prev = workflowElement.getPreviousSteps(); List<ComputeTask> prevTasks = new ArrayList<ComputeTask>(); for (WorkflowElement w : prev) { ComputeTask prevTask = workflowElementComputeTaskHashtable.get(w); prevTasks.add(prevTask); } task.setPrevSteps(prevTasks); tasks.add(task); workflowElementComputeTaskHashtable.put(workflowElement, task); } try { db.add(tasks); db.commitTx(); } catch (DatabaseException e) { e.printStackTrace(); } } public void generateWithTuple(Workflow workflow, List<Tuple> targets, Hashtable<String, String> config) { } public void generateTasks(Workflow workflow, List<ComputeParameter> parameters, List<Tuple> targets, String backend_name) { // TODO Auto-generated method stub } }