View Javadoc

1   /*
2    * $Id: GWorkflowDLConverter.java 1355 2010-03-05 10:17:01Z andreas.hoheisel@first.fraunhofer.de $
3    *
4    * Copyright (c) 2008, Fraunhofer FIRST
5    * Fraunhofer Institute for Computer Architecture and Software Technology
6    * See http://www.first.fraunhofer.de and http://www.gridworkflow.org/gwes for more details.
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          // xalan 2.7.1
31          System.setProperty( "javax.xml.transform.TransformerFactory", "org.apache.xalan.processor.TransformerFactoryImpl");
32          // Java 1.5
33  //        System.setProperty( "javax.xml.transform.TransformerFactory", "com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl");
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              // GWorkflowDL 2.1
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             // GWorkflowDL 2.0
105             else if (GWorkflowDL_2_0.matcher(input).matches()) {
106                 converter = new GWorkflowDLConverter("gworkflowdl_2_0-to-2_1.xsl");
107             }
108             // GWorkflowDL 1.1
109             else if (GWorkflowDL_1_1.matcher(input).matches()) {
110                 converter = new GWorkflowDLConverter("gworkflowdl_1_1-to-2_1.xsl");
111             }
112             // GWorkflowDL 1.0
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 }