1
2
3
4
5
6
7
8 package net.kwfgrid.gworkflowdl.conversion;
9
10 import org.jdom.Document;
11 import org.jdom.JDOMException;
12 import org.jdom.transform.XSLTransformer;
13 import org.jdom.transform.XSLTransformException;
14
15 import java.io.*;
16 import java.util.regex.Pattern;
17
18 import net.kwfgrid.gworkflowdl.structure.JdomString;
19
20 /***
21 * @author Andreas Hoheisel
22 * (<a href="http://www.andreas-hoheisel.de">www.andreas-hoheisel.de</a>)
23 * @version $Id: GWorkflowDLConverter.java 1355 2010-03-05 10:17:01Z andreas.hoheisel@first.fraunhofer.de $
24 */
25 public class GWorkflowDLConverter {
26
27 private XSLTransformer transformer;
28
29 public GWorkflowDLConverter(String xsltName) throws XSLTransformException {
30
31 System.setProperty( "javax.xml.transform.TransformerFactory", "org.apache.xalan.processor.TransformerFactoryImpl");
32
33
34 InputStream xslt = getClass().getResourceAsStream("/"+xsltName);
35 if (xslt == null) throw new XSLTransformException("Stylesheet \""+xsltName+"\" not found in classpath!");
36 transformer = new XSLTransformer(xslt);
37 }
38
39 /***
40 * Transforms GWorkflowDL 1.1 document to version 2.0
41 * @param old The GWorkflowDL 1.1 document
42 * @return The GWorkflowDL 2.0 document
43 * @throws XSLTransformException
44 */
45 public Document convert(Document old) throws XSLTransformException {
46 return transformer.transform(old);
47 }
48
49 public String convert(String xml) throws IOException, JDOMException {
50 Document gwdl = convert(JdomString.string2workflowDocument(xml,true,false));
51 return JdomString.document2string(gwdl);
52 }
53
54
55 /***
56 * Read a file and put the contents to a string
57 *
58 * @param fileName File name of the file to read
59 * @return String with the contents of the file
60 */
61 public static String readFile(String fileName) throws IOException {
62 StringBuffer buffer = new StringBuffer();
63 BufferedReader fileReader;
64 fileReader = new BufferedReader(new FileReader(fileName));
65
66 String line;
67 line = fileReader.readLine();
68 while (line != null) {
69 buffer.append(line);
70 buffer.append('\n');
71 line = fileReader.readLine();
72 }
73 return buffer.toString();
74 }
75
76 public static void writeFile(String fileName, String contents) throws IOException {
77 FileWriter fstream = new FileWriter(fileName);
78 BufferedWriter out = new BufferedWriter(fstream);
79 out.write(contents);
80 out.close();
81 }
82
83 public static void main(String[] args) {
84 if (args.length < 2) {
85 System.out.println("Transforms GWorkflowDL from old versions to version 2.1");
86 System.out.println("Usage: java net.kwfgrid.gworkflowdl.conversion.GWorkflowDLConverter <filename_gwdl_old> <filename_gwdl_2.1>");
87 System.exit(1);
88 }
89
90 try {
91 Pattern GWorkflowDL_1_0 = Pattern.compile("(?s).*<workflow.+gworkflowdl_1_0//.xsd.+", Pattern.DOTALL);
92 Pattern GWorkflowDL_1_1 = Pattern.compile("(?s).*<workflow.+gworkflowdl_1_1//.xsd.+", Pattern.DOTALL);
93 Pattern GWorkflowDL_2_0 = Pattern.compile("(?s).*<workflow.+gworkflowdl_2_0//.xsd.+", Pattern.DOTALL);
94 Pattern GWorkflowDL_2_1 = Pattern.compile("(?s).*<workflow.+gworkflowdl_2_1//.xsd.+", Pattern.DOTALL);
95
96 String input = readFile(args[0]);
97
98 GWorkflowDLConverter converter = null;
99
100 if (GWorkflowDL_2_1.matcher(input).matches()) {
101 System.err.println("WARNING: Nothing to do: Workflow has format GWorkflowDL 2.1.");
102 System.exit(252);
103 }
104
105 else if (GWorkflowDL_2_0.matcher(input).matches()) {
106 converter = new GWorkflowDLConverter("gworkflowdl_2_0-to-2_1.xsl");
107 }
108
109 else if (GWorkflowDL_1_1.matcher(input).matches()) {
110 converter = new GWorkflowDLConverter("gworkflowdl_1_1-to-2_1.xsl");
111 }
112
113 else if (GWorkflowDL_1_0.matcher(input).matches()) {
114 converter = new GWorkflowDLConverter("gworkflowdl_1_0-to-2_1.xsl");
115 }
116 if (converter==null) {
117 System.err.println("ERROR: GWorkflowDL format of file "+args[0]+" is not supported!");
118 System.exit(251);
119 }
120
121 writeFile(args[1],converter.convert(input));
122 } catch (XSLTransformException e) {
123 System.err.println("exception:\n" + e);
124 System.exit(255);
125 } catch (IOException e) {
126 System.err.println("exception:\n" + e);
127 System.exit(254);
128 } catch (JDOMException e) {
129 System.err.println("exception:\n" + e);
130 System.exit(253);
131 }
132 }
133
134 }