package org.trianacode.convert;
import org.shiwa.fgi.iwir.IWIR;
import org.trianacode.TrianaInstance;
import org.trianacode.shiwaall.iwir.importer.utils.ExportIwir;
import org.trianacode.shiwaall.iwir.importer.utils.ImportIwir;
import org.trianacode.taskgraph.TaskGraph;
import org.trianacode.taskgraph.TaskGraphException;
import org.trianacode.taskgraph.proxy.ProxyInstantiationException;
import org.trianacode.taskgraph.ser.XMLReader;
import org.trianacode.taskgraph.ser.XMLWriter;
import org.trianacode.taskgraph.tool.Tool;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import javax.xml.bind.JAXBException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import java.io.*;
/**
* Created with IntelliJ IDEA.
* User: ian
* Date: 25/05/2012
* Time: 03:17
* To change this template use File | Settings | File Templates.
*/
public class ConvertLanguage {
public static final String TASKGRAPH_FORMAT = "taskgraph";
public static final String IWIR_FORMAT = "iwir";
public static void main(String[] args) {
ConvertLanguage convertLanguage = new ConvertLanguage();
File outputFile;
File inputFile;
if (args.length == 2) {
inputFile = new File(args[0]);
outputFile = new File(args[1]);
// } else {
// inputFile = new File("/Users/ian/tempStuff/image-new.iwir");
// outputFile = new File("/Users/ian/tempStuff/outputFile.xml");
try {
convertLanguage.doConvert(inputFile, outputFile);
} catch (Exception e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
System.exit(1);
}
System.exit(0);
} else {
System.out.println("Usage : inputfile outputfile");
}
}
public ConvertLanguage(){}
public void doConvert(File inputFile, File outputFile) throws IOException, TaskGraphException, ProxyInstantiationException, JAXBException {
if(inputFile.exists()){
String type = getWorkflowType(inputFile);
if(type.equals(IWIR_FORMAT)){
System.out.println("Found IWIR, converting to TaskGraph");
TrianaInstance instance = new TrianaInstance();
try { Thread.sleep(2000); } catch (InterruptedException ignored) {}
instance.init();
System.out.println("Bootstrapping Triana");
try { Thread.sleep(2000); } catch (InterruptedException ignored) {}
ImportIwir iwirImport = new ImportIwir();
TaskGraph tool = iwirImport.taskFromIwir(new IWIR(inputFile), null);
XMLWriter outWriter = new XMLWriter(new PrintWriter(System.out));
outWriter.writeComponent(tool);
XMLWriter fileWriter = new XMLWriter(new PrintWriter(outputFile));
fileWriter.writeComponent(tool);
System.out.println("File created : " + outputFile.getAbsolutePath());
}
else if(type.equals(TASKGRAPH_FORMAT)){
System.out.println("Found TaskGraph, converting to IWIR");
XMLReader reader = new XMLReader(new FileReader(inputFile));
TrianaInstance instance = new TrianaInstance();
try { Thread.sleep(2000); } catch (InterruptedException ignored) {}
instance.init();
System.out.println("Bootstrapping Triana");
try { Thread.sleep(2000); } catch (InterruptedException ignored) {}
Tool tool = reader.readComponent(instance.getProperties());
ExportIwir exportIwir = new ExportIwir();
exportIwir.taskGraphToIWIRFile((TaskGraph) tool, outputFile);
} else {
System.out.println("Type not recognised " + type);
}
} else {
System.out.println("Input file " + inputFile.getAbsolutePath() + " not found.");
throw new FileNotFoundException();
}
}
public static String getWorkflowType(File file) {
String workflowType = null;
if (file != null && file.exists()) {
try {
System.out.println(file.getAbsolutePath());
DocumentBuilderFactory dbfac = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = dbfac.newDocumentBuilder();
Document doc = docBuilder.parse(file);
Element i = doc.getDocumentElement();
NamedNodeMap l = i.getAttributes();
for (int m = 0; m < l.getLength(); m++) {
org.w3c.dom.Node o = l.item(m);
System.out.println(o.toString());
}
String rootName = i.getNodeName();
System.out.println("XML root is : " + rootName);
if (rootName.toLowerCase().equals(IWIR_FORMAT)) {
return IWIR_FORMAT;
} else if (rootName.toLowerCase().equals("tool")) {
return TASKGRAPH_FORMAT;
}
} catch (Exception e) {
return null;
}
}
return workflowType;
}
}