View Javadoc

1   package net.sf.tomp.xtcl.command;
2   
3   import net.sf.tomp.xtcl.Context;
4   
5   import javax.xml.transform.Result;
6   import javax.xml.transform.Source;
7   import javax.xml.transform.Templates;
8   import javax.xml.transform.Transformer;
9   import javax.xml.transform.TransformerException;
10  import javax.xml.transform.TransformerFactory;
11  import javax.xml.transform.stream.StreamResult;
12  import javax.xml.transform.stream.StreamSource;
13  
14  import java.io.PrintStream;
15  
16  import java.util.HashMap;
17  import java.util.Iterator;
18  import java.util.Map;
19  
20  /***
21   * DOCUMENT ME!
22   * 
23   * @author tomp
24   */
25  public class Transform extends AbstractCommand {
26      /*** DOCUMENT ME! */
27      protected String sourceRef;
28  
29      /*** DOCUMENT ME! */
30      protected String styleRef;
31  
32      /*** DOCUMENT ME! */
33      protected String resultRef;
34  
35      /*** DOCUMENT ME! */
36      protected Map params = new HashMap();
37  
38      /*** DOCUMENT ME! */
39      protected Map realParams = new HashMap();
40  
41      /*** DOCUMENT ME! */
42      protected Source source;
43  
44      /*** DOCUMENT ME! */
45      protected Templates templates;
46  
47      /*** DOCUMENT ME! */
48      protected Result result;
49  
50      /***
51       * DOCUMENT ME!
52       * 
53       * @param s DOCUMENT ME!
54       */
55      public void setSourceRef(String s) {
56          sourceRef = s;
57      }
58  
59      /***
60       * DOCUMENT ME!
61       * 
62       * @param s DOCUMENT ME!
63       */
64      public void setStyleRef(String s) {
65          styleRef = s;
66      }
67  
68      /***
69       * DOCUMENT ME!
70       * 
71       * @param s DOCUMENT ME!
72       */
73      public void setResultRef(String s) {
74          //System.err.println("*** Transform setting resultref="+s);
75          resultRef = s;
76      }
77  
78      /***
79       * DOCUMENT ME!
80       * 
81       * @param context DOCUMENT ME!
82       * @return DOCUMENT ME!
83       * @throws Exception DOCUMENT ME!
84       */
85      public int execute(Context context) throws Exception {
86          PrintStream out = context.getOut();
87          TransformerFactory tf = context.getTransformerFactory();
88  
89          try {
90              source = sourceRef.startsWith("$") ? context.refToSource(sourceRef)
91                      : new StreamSource(context.getFile(sourceRef));
92  
93              templates = styleRef.startsWith("$") ? context.refToStyle(styleRef)
94                      : null;
95  
96              result = resultRef.startsWith("$") ? context.refToResult(resultRef)
97                      : new StreamResult(context.getFile(resultRef));
98  
99              Transformer t = (templates == null) ? tf
100                     .newTransformer(new StreamSource(context.getFile(styleRef)))
101                     : templates.newTransformer();
102 
103             initTransformer(t, context);
104 
105             //out.print("EXECUTING TRANSF "+this);
106             //String sid = source.getSystemId();
107             //System.out.println("TRANSF: srcsysid="+sid);
108             //result.setSystemId(sid);
109             t.transform(source, result);
110 
111             if (out != null) {
112                 out.print("OK " + this);
113             }
114 
115             return 0;
116         } catch (TransformerException te) {
117             if (out != null) {
118                 out.print("ERR " + this + ": " + te);
119             }
120 
121             return 1;
122         }
123     }
124 
125     /***
126      * DOCUMENT ME!
127      * 
128      * @return DOCUMENT ME!
129      */
130     public String toString() {
131         return "TRANSFORM " + sourceRef + " STYLE " + styleRef + " -> "
132                 + resultRef + " (" + listMap(realParams) + ")";
133     }
134 
135     /***
136      * DOCUMENT ME!
137      * 
138      * @param k DOCUMENT ME!
139      * @param v DOCUMENT ME!
140      */
141     public void setParameter(String k, Object v) {
142         params.put(k, v);
143 
144         //System.out.println("Setting param "+k+"="+v);
145     }
146 
147     /***
148      * DOCUMENT ME!
149      * 
150      * @param t DOCUMENT ME!
151      * @param context DOCUMENT ME!
152      */
153     protected void initTransformer(Transformer t, Context context) {
154         for (Iterator i = params.keySet().iterator(); i.hasNext();) {
155             String k = (String) i.next();
156             Object v = params.get(k);
157 
158             if (v instanceof String && ((String) v).startsWith("$")) {
159                 //v = refToSource(v, context);
160                 v = context.get(v);
161             }
162 
163             t.setParameter(k, v);
164             realParams.put(k, v);
165         }
166     }
167 }
168 
169 /*
170  * The contents of this file are subject to the Mozilla Public License Version
171  * 1.1 (the "License"); you may not use this file except in compliance with the
172  * License. You may obtain a copy of the License at http://www.mozilla.org/MPL/
173  * Software distributed under the License is distributed on an "AS IS" basis,
174  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
175  * the specific language governing rights and limitations under the License. The
176  * Original Code is: all this file. The Initial Developer of the Original Code
177  * is: Tomas Pitner, Masaryk University in Brno, Czech Republic. Contributor(s):
178  */