package org.molgenis.compute.test;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import org.apache.velocity.util.StringUtils;
import org.molgenis.compute.commandline.WorksheetHelper;
import org.molgenis.compute.commandline.options.Options;
import org.molgenis.compute.design.ComputeParameter;
import org.molgenis.compute.design.Workflow;
import org.molgenis.compute.test.generator.ComputeGenerator;
import org.molgenis.compute.test.generator.ComputeGeneratorDBWorksheet;
import org.molgenis.compute.test.reader.WorkflowReader;
import org.molgenis.compute.test.reader.WorkflowReaderDBJPA;
import org.molgenis.util.Tuple;
public class GenerateDemoTasks
{
public static void main(String[] args) throws IOException
{
System.out.println(">> Start generate demo LL GWAS tasks ..");
// Loading workflow with JPA
WorkflowReader reader = new WorkflowReaderDBJPA();
// read a workflow
Workflow workflow = reader.getWorkflow("lspilot1_workflow_grid.csv");
List<ComputeParameter> parameters = reader.getParameters();
// Get command line parameters and add them to workflow
addCommandLineParameters(args, parameters);
// get worksheet from commmand line parameters
String worksheetFile = null;
// TODO HERE
for (ComputeParameter cp : parameters)
{
if (cp.getName().equalsIgnoreCase("McWorksheet")) worksheetFile = cp.getDefaultValue();
}
// load targets from a worksheet
List<Tuple> worksheet = null;
try
{
worksheet = (new WorksheetHelper()).readTuplesFromFile(new File(worksheetFile));
}
catch (Exception e1)
{
e1.printStackTrace();
}
// generate ComputeTasks
ComputeGenerator generator = new ComputeGeneratorDBWorksheet();
// generator.generateWithTuple(workflow, worksheet, null);
generator.generateTasks(workflow, parameters, worksheet, "");
System.out.println("... generated");
}
private static void addCommandLineParameters(String[] args, List<ComputeParameter> parameters)
{
Options opt = new Options(args, Options.Prefix.DASH, Options.Multiplicity.ONCE, 0);
List<String> params = new ArrayList<String>(Arrays.asList("parameters", "workflow", "worksheet", "protocols",
"templates", "scripts", "id", "dir", "backend"));
Iterator<String> it = params.iterator();
while (it.hasNext())
{
opt.getSet().addOption(it.next(), false, Options.Separator.EQUALS);
}
boolean isCorrect = opt.check(opt.getSet().getSetName(), false, false);
if (!isCorrect)
{
System.out.println(opt.getCheckErrors());
System.out.println("command line format:\n" + "-worksheet=<InputWorksheet.csv>\n"
+ "-parameters=<InputParameters.csv>\n" + "-workflow=<InputWorkflow.csv>\n"
+ "-protocols=<InputProtocolsDir>\n" + "-templates=<InputTemplatesDir>\n"
+ "-scripts=<OutputScriptsDir>\n" + "-id=<ScriptGenerationID>\n" + "-dir=<McDir>\n"
+ "-backend=<cluster|grid>");
System.exit(1);
}
// now add each command line parameter as ComputeParameter to workflow
it = params.iterator();
while (it.hasNext())
{
String name = it.next();
parameters.add(createComputeParameter("Mc" + StringUtils.firstLetterCaps(name), opt.getSet()
.getOption(name).getResultValue(0)));
}
}
private static ComputeParameter createComputeParameter(String name, String value)
{
ComputeParameter cp = new ComputeParameter();
cp.setName(name);
cp.setDefaultValue(value);
return cp;
}
}