package org.trianacode.enactment;
import org.trianacode.TrianaInstance;
import org.trianacode.config.Locations;
import org.trianacode.config.cl.ArgumentParsingException;
import org.trianacode.config.cl.OptionValues;
import org.trianacode.config.cl.OptionsHandler;
import org.trianacode.config.cl.TrianaOptions;
import org.trianacode.enactment.addon.CLIaddon;
import org.trianacode.enactment.addon.ConversionAddon;
import org.trianacode.enactment.addon.ExecutionAddon;
import org.trianacode.taskgraph.ser.XMLReader;
import org.trianacode.taskgraph.ser.XMLWriter;
import org.trianacode.taskgraph.tool.Tool;
import java.io.File;
import java.io.FileReader;
import java.io.PrintWriter;
import java.util.List;
/**
* Created by IntelliJ IDEA.
* User: Ian Harvey
* Date: 03/11/2011
* Time: 12:15
* To change this template use File | Settings | File Templates.
*/
public class Convert {
private Tool tool;
private File configFile;
private String bundleInputPath;
public Convert(String[] args, OptionValues vals) throws Exception {
TrianaInstance engine = new TrianaInstance(args);
engine.addExtensionClass(CLIaddon.class);
engine.init();
initTool(engine, vals);
if (tool == null) {
System.out.println("No Tool found or created.");
System.exit(1);
} else {
List<String> conversion = vals.getOptionValues("c");
File outputConvertedFile = null;
if (conversion != null) {
String conversionString = conversion.get(0).toLowerCase();
if (conversionString.equals(AddonUtils.IWIR_FORMAT)) {
ConversionAddon conversionAddon = (ConversionAddon) AddonUtils.getService(
engine, "iwir-converter", ConversionAddon.class
);
if (conversionAddon != null) {
File iwirFile = conversionAddon.toolToWorkflowFile(tool, configFile, "tempFile.xml");
System.out.println("Created iwir file : " + iwirFile.getAbsolutePath());
}
} else if (conversionString.equals(AddonUtils.DAX_FORMAT)) {
System.out.println("Will create dax file");
ConversionAddon daxifyAddon = (ConversionAddon) AddonUtils.getService(engine, "taskgraph-to-daxJobs", ConversionAddon.class);
ConversionAddon daxAddon = (ConversionAddon) AddonUtils.getService(engine, "convert-dax", ConversionAddon.class);
if (daxifyAddon != null && daxAddon != null) {
Tool daxifiedTaskgraph = (Tool) daxifyAddon.processWorkflow(tool);
System.out.println("Daxified taskgraph");
outputConvertedFile = daxAddon.toolToWorkflowFile(daxifiedTaskgraph, configFile, "exampleDax.dax");
System.out.println("Created dax file " + outputConvertedFile.getAbsolutePath());
} else {
System.out.println("Couldn't find required addons to create dax");
}
} else {
conversionString = AddonUtils.TASKGRAPH_FORMAT;
outputConvertedFile = File.createTempFile("publishedTaskgraphTemp", ".xml");
XMLWriter outWriter = new XMLWriter(new PrintWriter(System.out));
outWriter.writeComponent(tool);
XMLWriter fileWriter = new XMLWriter(new PrintWriter(outputConvertedFile));
fileWriter.writeComponent(tool);
System.out.println("File created : " + outputConvertedFile.getAbsolutePath());
}
if (conversion.size() > 1) {
if (conversion.get(1).toLowerCase().equals("bundle")) {
// bundleOutputs(engine, outputConvertedFile);
}
}
engine.shutdown(0);
}
}
}
// private void bundleOutputs(TrianaInstance engine, File outputConvertedFile) throws IOException {
// System.out.println("Will bundle outputs");
//
// if (bundleInputPath == null) {
// System.out.println("No input bundle recorded.");
//
// } else {
// System.out.println("Producing bundle output");
// BundleAddon bundleAddon = (BundleAddon) AddonUtils.getService(engine, "unbundle", BundleAddon.class);
// bundleAddon.setWorkflowFile(bundleInputPath, outputConvertedFile);
// bundleAddon.saveBundle("BundleOutput.zip");
// System.out.println("Bundled");
// }
// }
private void initTool(TrianaInstance engine, OptionValues vals) throws Exception {
List<String> bundleInputs = vals.getOptionValues(TrianaOptions.EXECUTE_BUNDLE.getShortOpt());
if (bundleInputs != null) {
ExecutionAddon executionAddon = (ExecutionAddon) AddonUtils.getService(engine, "unbundle", ExecutionAddon.class);
System.out.println("Unbundling with " + executionAddon.getServiceName());
bundleInputPath = bundleInputs.get(0);
tool = executionAddon.getTool(engine, bundleInputPath);
configFile = executionAddon.getConfigFile();
} else {
List<String> workflowInput = vals.getOptionValues(TrianaOptions.WORKFLOW_OPTION.getShortOpt());
String type = null;
if (workflowInput != null) {
type = AddonUtils.getWorkflowType(new File(workflowInput.get(0)));
}
if (type == null) {
System.out.println("Workflow type not recognised");
return;
} else if (type.equals(AddonUtils.TASKGRAPH_FORMAT)) {
XMLReader reader = new XMLReader(new FileReader(workflowInput.get(0)));
tool = reader.readComponent(engine.getProperties());
} else if (type.equals(AddonUtils.IWIR_FORMAT)) {
ConversionAddon conversionAddon = (ConversionAddon) AddonUtils.getService(engine, "iwir-converter", ConversionAddon.class);
if (conversionAddon != null) {
tool = conversionAddon.workflowToTool(workflowInput.get(0));
}
}
}
}
public static void convert(String[] args) throws Exception {
String os = Locations.os();
String usage = "./triana.sh";
if (os.equals("windows")) {
usage = "triana.bat";
}
OptionsHandler parser = new OptionsHandler(usage, TrianaOptions.TRIANA_OPTIONS);
OptionValues vals = null;
try {
vals = parser.parse(args);
} catch (ArgumentParsingException e) {
System.out.println(e.getMessage());
System.out.println(parser.usage());
System.exit(0);
}
new Convert(args, vals);
}
}