KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > openbravo > xmlEngine > XmlEngine


1 /*
2  ************************************************************************************
3  * Copyright (C) 2001-2006 Openbravo S.L.
4  * Licensed under the Apache Software License version 2.0
5  * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
6  * Unless required by applicable law or agreed to in writing, software distributed
7  * under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
8  * CONDITIONS OF ANY KIND, either express or implied. See the License for the
9  * specific language governing permissions and limitations under the License.
10  ************************************************************************************
11 */

12 package org.openbravo.xmlEngine;
13
14 import java.util.Vector JavaDoc;
15 import java.util.Enumeration JavaDoc;
16 import java.util.Stack JavaDoc;
17 import java.util.Hashtable JavaDoc;
18 import java.io.IOException JavaDoc;
19 import java.io.File JavaDoc;
20 import java.io.FileInputStream JavaDoc;
21 import java.io.InputStreamReader JavaDoc;
22 import java.io.FileNotFoundException JavaDoc;
23 import java.io.PrintWriter JavaDoc;
24 import javax.servlet.*;
25 import javax.servlet.http.*;
26
27 import org.apache.xerces.parsers.*;
28 import org.xml.sax.InputSource JavaDoc;
29 import org.xml.sax.XMLReader JavaDoc;
30 import org.apache.log4j.Logger;
31 import org.apache.log4j.PropertyConfigurator;
32
33 public class XmlEngine extends HttpServlet {
34   XMLReader JavaDoc xmlParser;
35   XMLReader JavaDoc htmlParser;
36   Hashtable JavaDoc<String JavaDoc, XmlTemplate> hasXmlTemplate;
37   Stack JavaDoc<XmlTemplate> stcRead;
38   Hashtable JavaDoc<String JavaDoc, FormatCouple> formatHashtable;
39   Hashtable JavaDoc<String JavaDoc, Vector JavaDoc<ReplaceElement>> replaceHashtable;
40   String JavaDoc strDriverDefault;
41   String JavaDoc strUrlDefault;
42   public String JavaDoc strBaseLocation;
43   String JavaDoc strFormatFile;
44   public File JavaDoc fileXmlEngineFormat;
45   public File JavaDoc fileBaseLocation;
46   public String JavaDoc strReplaceWhat;
47   public String JavaDoc strReplaceWith;
48   public boolean isResource = false;
49
50   static public String JavaDoc strTextDividedByZero;
51
52   static Logger log4jXmlEngine = Logger.getLogger(XmlEngine.class);
53   static Logger log4jReloadXml = Logger.getLogger("reloadXml");
54
55   public XmlEngine() {
56     // init();
57
}
58
59   public void init(ServletConfig config)
60     throws ServletException
61   {
62     log4jXmlEngine.info("XmlEngine v0.846-2");
63     super.init(config);
64     configureLog4j(getInitParameter("fileConfigurationLog4j"));
65     strBaseLocation = getInitParameter("BaseLocation");
66     strDriverDefault = getInitParameter("driver");
67     strUrlDefault = getInitParameter("URL");
68     log4jXmlEngine.info("driver: " + strDriverDefault + " URL: " + strUrlDefault);
69     strFormatFile = getInitParameter("FormatFile");
70     fileBaseLocation = new File JavaDoc(strBaseLocation);
71     fileXmlEngineFormat = new File JavaDoc (fileBaseLocation, strFormatFile);
72     log4jXmlEngine.info("BaseLocation: " + strBaseLocation);
73     strReplaceWhat = getInitParameter("ReplaceWhat");
74     strReplaceWith = getInitParameter("ReplaceWith");
75     log4jXmlEngine.info("Replace attribute value: \"" + strReplaceWhat + "\" with: \"" + strReplaceWith + "\".");
76     strTextDividedByZero = getInitParameter("TextDividedByZero");
77     log4jXmlEngine.info("TextDividedByZero: " + strTextDividedByZero);
78     try {
79       log4jXmlEngine.info("fileBaseLocation: " + fileBaseLocation.getCanonicalPath());
80     }
81     catch (IOException JavaDoc e) {
82       log4jXmlEngine.error("Error in BaseLocation: " + strBaseLocation);
83     }
84     initialize();
85   }
86
87   public void loadParams() {
88     /*
89     // decimal separator:. thousands separator: ,
90     DecimalFormatSymbols dfs = new DecimalFormatSymbols();
91     log4jXmlEngine.info("InternationalCurrencySymbol: " + dfs.getInternationalCurrencySymbol());
92     log4jXmlEngine.info("CurrencySymbol: " + dfs.getCurrencySymbol());
93     dfs.setDecimalSeparator('.');
94     dfs.setGroupingSeparator(',');
95     DecimalFormatSymbols dfsSpanish = new DecimalFormatSymbols();
96     dfsSpanish.setDecimalSeparator(',');
97     dfsSpanish.setGroupingSeparator('.');
98     // various formats, pending of create a configuration file
99     FormatCouple fc;
100     fc= new FormatCouple(new DecimalFormat("#,##0.00",dfs), new DecimalFormat("#0.00",dfs));
101     formatHashtable.put("euroInform", fc);
102     fc = new FormatCouple(new DecimalFormat("#0.00",dfs), new DecimalFormat("#0.00",dfs));
103     formatHashtable.put("euroEdition", fc);
104     fc = new FormatCouple(new DecimalFormat("#,##0",dfs), new DecimalFormat("#0",dfs));
105     formatHashtable.put("integerInform", fc);
106     fc = new FormatCouple(new DecimalFormat("#0",dfs), new DecimalFormat("#0",dfs));
107     formatHashtable.put("integerEdition", fc);
108     fc = new FormatCouple(new DecimalFormat("#,##0.##",dfs),new DecimalFormat("#0.00",dfs));
109     formatHashtable.put("existenciasInforme", fc);
110     */

111     replaceHashtable = new Hashtable JavaDoc<String JavaDoc, Vector JavaDoc<ReplaceElement>>();
112     Vector JavaDoc<ReplaceElement> htmlReplaceVector = new Vector JavaDoc<ReplaceElement>();
113     htmlReplaceVector.addElement(new ReplaceElement("&","&amp;")); // this must be the first for not replace the next &
114
htmlReplaceVector.addElement(new ReplaceElement("\"","&quot;"));
115     //htmlReplaceVector.addElement(new ReplaceElement("'","\\'"));
116
htmlReplaceVector.addElement(new ReplaceElement("\n"," "));
117     htmlReplaceVector.addElement(new ReplaceElement("\r"," "));
118     htmlReplaceVector.addElement(new ReplaceElement("<","&lt;"));
119     htmlReplaceVector.addElement(new ReplaceElement(">","&gt;"));
120     htmlReplaceVector.addElement(new ReplaceElement("®","&reg;"));
121     htmlReplaceVector.addElement(new ReplaceElement("€","&euro;"));
122     htmlReplaceVector.addElement(new ReplaceElement("ñ","&ntilde;"));
123     htmlReplaceVector.addElement(new ReplaceElement("Ñ","&Ntilde;"));
124     replaceHashtable.put("html", htmlReplaceVector);
125     Vector JavaDoc<ReplaceElement> foReplaceVector = new Vector JavaDoc<ReplaceElement>();
126     foReplaceVector.addElement(new ReplaceElement("&","&#38;"));
127     foReplaceVector.addElement(new ReplaceElement("<","&#60;"));
128     foReplaceVector.addElement(new ReplaceElement(">","&#62;"));
129     foReplaceVector.addElement(new ReplaceElement("\\","&#92;"));
130     foReplaceVector.addElement(new ReplaceElement("º","&#186;"));
131     foReplaceVector.addElement(new ReplaceElement("ª","&#170;"));
132     foReplaceVector.addElement(new ReplaceElement("®","&#174;"));
133     foReplaceVector.addElement(new ReplaceElement("€","&#8364;"));
134     foReplaceVector.addElement(new ReplaceElement("\n","&#10;"));
135     replaceHashtable.put("fo", foReplaceVector);
136     Vector JavaDoc<ReplaceElement> htmlPreformatedReplaceVector = new Vector JavaDoc<ReplaceElement>();
137     htmlPreformatedReplaceVector.addElement(new ReplaceElement("&","&amp;"));
138     htmlPreformatedReplaceVector.addElement(new ReplaceElement("\"","&quot;"));
139     //htmlPreformatedReplaceVector.addElement(new ReplaceElement("'","\\'"));
140
htmlPreformatedReplaceVector.addElement(new ReplaceElement("<","&lt;"));
141     htmlPreformatedReplaceVector.addElement(new ReplaceElement(">","&gt;"));
142     htmlPreformatedReplaceVector.addElement(new ReplaceElement("\n","<BR>"));
143     htmlPreformatedReplaceVector.addElement(new ReplaceElement("\r"," "));
144     htmlPreformatedReplaceVector.addElement(new ReplaceElement("®","&reg;"));
145     replaceHashtable.put("htmlPreformated", htmlPreformatedReplaceVector);
146     Vector JavaDoc<ReplaceElement> htmlHelpReplaceVector = new Vector JavaDoc<ReplaceElement>();
147     htmlHelpReplaceVector.addElement(new ReplaceElement("\n","<BR>"));
148     htmlHelpReplaceVector.addElement(new ReplaceElement("\r",""));
149     replaceHashtable.put("htmlHelp", htmlHelpReplaceVector);
150     Vector JavaDoc<ReplaceElement> htmlPreformatedTextareaReplaceVector = new Vector JavaDoc<ReplaceElement>();
151     htmlPreformatedTextareaReplaceVector.addElement(new ReplaceElement("&","&amp;"));
152     htmlPreformatedTextareaReplaceVector.addElement(new ReplaceElement("\"","&quot;"));
153     //htmlPreformatedTextareaReplaceVector.addElement(new ReplaceElement("'","\\'"));
154
htmlPreformatedTextareaReplaceVector.addElement(new ReplaceElement("<","&lt;"));
155     htmlPreformatedTextareaReplaceVector.addElement(new ReplaceElement(">","&gt;"));
156     //htmlPreformatedTextareaReplaceVector.addElement(new ReplaceElement("\n","<BR>"));
157
//htmlPreformatedTextareaReplaceVector.addElement(new ReplaceElement("\r","<BR>"));
158
htmlPreformatedTextareaReplaceVector.addElement(new ReplaceElement("®","&reg;"));
159     replaceHashtable.put("htmlPreformatedTextarea", htmlPreformatedTextareaReplaceVector);
160     Vector JavaDoc<ReplaceElement> htmlJavaScriptReplaceVector = new Vector JavaDoc<ReplaceElement>();
161     htmlJavaScriptReplaceVector.addElement(new ReplaceElement("'","\\'"));
162     htmlJavaScriptReplaceVector.addElement(new ReplaceElement("\"","&quot;"));
163     htmlJavaScriptReplaceVector.addElement(new ReplaceElement("\n","\\n"));
164     replaceHashtable.put("htmlJavaScript", htmlJavaScriptReplaceVector);
165   }
166
167   public void initialize() {
168     hasXmlTemplate = new Hashtable JavaDoc<String JavaDoc, XmlTemplate>(); // vector of XmlTemplates
169
stcRead = new Stack JavaDoc<XmlTemplate>(); // stack of XmlTemplates not readed
170
formatHashtable = new Hashtable JavaDoc<String JavaDoc, FormatCouple>();
171     XMLReader JavaDoc xmlParserFormat = new SAXParser();
172     xmlParserFormat.setContentHandler(new FormatRead(formatHashtable));
173     log4jXmlEngine.info("XmlEngine file formats: " + strFormatFile);
174     // File fileXmlEngineFormat = new File (fileBaseLocation, strFormatFile);
175
// String strFormatFile = "c:\\Apps\\src\\org\\openbravo\\data\\examples\\FormatExample1.xml";
176
// File fileXmlEngineFormat = new File (strFormatFile);
177
log4jXmlEngine.info("fileXmlEngineFormat: " + fileXmlEngineFormat.toString());
178     try {
179       //xmlParserFormat.parse(new InputSource(new FileReader(fileXmlEngineFormat)));
180
xmlParserFormat.parse(new InputSource JavaDoc(new InputStreamReader JavaDoc(new FileInputStream JavaDoc(fileXmlEngineFormat), "UTF-8")));
181     } catch (FileNotFoundException JavaDoc e) {
182       log4jXmlEngine.error("not found fileXmlEngineFormat: " + fileXmlEngineFormat + "\n" +
183           e.getMessage());
184       return;
185     } catch (IOException JavaDoc e) {
186       log4jXmlEngine.error("IOException in fileXmlEngineFormat: " + fileXmlEngineFormat);
187       e.printStackTrace();
188       return;
189     } catch (Exception JavaDoc e) {
190       log4jXmlEngine.error("Exception in fileXmlEngineFormat: " + fileXmlEngineFormat);
191       e.printStackTrace();
192       return;
193     }
194     loadParams();
195   }
196
197   /**
198     this function reads a file that defines a XmlTemplate without any discard
199     @param strXmlTemplateFile A configuration file of the XmlTemplate in XML format
200     */

201   public XmlTemplate readXmlTemplate(String JavaDoc strXmlTemplateFile) {
202     return readXmlTemplate(strXmlTemplateFile, new String JavaDoc[0]);
203   }
204
205   /**
206     this function reads a file that defines a XmlTemplate with a vector of discard
207     @param strXmlTemplateFile A configuration file of the XmlTemplate in XML format
208     @param discard A vector of Strings with the names of the discards in the template
209     file. The elements with a id equal to a discard are not readed
210     */

211   public synchronized XmlTemplate readXmlTemplate(String JavaDoc strXmlTemplateFile, String JavaDoc[] discard) {
212     String JavaDoc xmlTemplateName = strXmlTemplateFile;
213     xmlTemplateName = fileBaseLocation.getName() + xmlTemplateName;
214     for (int i=0; i<discard.length; i++ ) {
215       xmlTemplateName = xmlTemplateName + "?" + discard[i];
216     }
217     if (log4jReloadXml.isDebugEnabled()) {
218       initialize();
219       log4jReloadXml.debug("XmlEngine 29-11-2001 Initialized");
220     }
221     return readAllXmlTemplates(xmlTemplateName, strXmlTemplateFile, discard);
222   }
223
224   /**
225     this function add the XmlTemplate to the list of XmlTemplates and read all the XmlTemplates
226     that there are in the Stack. The XmlTemplates are added to the Stack in the addXmlTemplate function
227     or in the readFile function
228     @param strXmlTemplateName The name that identifie the XmlTemplate
229     @param strXmlTemplateFile The configuration file of the XmlTemplate
230     @param discard A vector of Strings with the names of the discards in the template
231     */

232   public XmlTemplate readAllXmlTemplates(String JavaDoc strXmlTemplateName, String JavaDoc strXmlTemplateFile, String JavaDoc[] discard) {
233     XmlTemplate xmlTemplate = addXmlTemplate(strXmlTemplateName, strXmlTemplateFile, discard);
234     while (!stcRead.empty()) {
235       XmlTemplate xmlTemplateRead = stcRead.pop();
236       readFile(xmlTemplateRead);
237     }
238     return xmlTemplate;
239   }
240
241   /**
242     this function add the XmlTemplate to the list of XmlTemplates or return an
243     existing XmlTemplate if it was found in the list
244     @param strXmlTemplateName The name that identifie the XmlTemplate
245     @param strXmlTemplateFile The configuration file of the XmlTemplate
246     @param discard A vector of Strings with the names of the discards in the template
247     */

248   private XmlTemplate addXmlTemplate(String JavaDoc strXmlTemplateName, String JavaDoc strXmlTemplateFile, String JavaDoc[] discard) {
249     log4jXmlEngine.info("Adding: " + strXmlTemplateName);
250     for (Enumeration JavaDoc<XmlTemplate> e = hasXmlTemplate.elements() ; e.hasMoreElements() ;) {
251       XmlTemplate xmlTemplate = e.nextElement();
252       log4jXmlEngine.debug("Comparing: xmlTemplate.name():" + xmlTemplate.name() +
253           "and strXmlTemplateName:" + strXmlTemplateName);
254       if (xmlTemplate.name().equals(strXmlTemplateName)) {
255         return xmlTemplate;
256       }
257     }
258     log4jXmlEngine.debug("Before the new XmlTemplate");
259     XmlTemplate xmlTemplate = new XmlTemplate(strXmlTemplateName, strXmlTemplateFile, discard, this);
260     xmlTemplate.configuration.strDriverDefault = strDriverDefault;
261     xmlTemplate.configuration.strUrlDefault = strUrlDefault;
262     hasXmlTemplate.put(strXmlTemplateName, xmlTemplate);
263     log4jXmlEngine.debug("created de new XmlTemplate");
264     stcRead.push(xmlTemplate);
265     log4jXmlEngine.debug("push xmlTemplate");
266     return xmlTemplate;
267   }
268
269
270   /**
271     this function read the XmlTemplate
272     @param xmlTemplate The XmlTemplate object
273     */

274   public void readFile(XmlTemplate xmlTemplate) {
275     xmlParser = new SAXParser();
276     htmlParser = new org.cyberneko.html.parsers.SAXParser();
277
278     // parser of the configuration file
279
xmlParser.setContentHandler(xmlTemplate.configuration);
280     String JavaDoc strFile = xmlTemplate.fileConfiguration() + ".xml";
281     log4jXmlEngine.info("XmlEngine name: " + strFile);
282     File JavaDoc fileXmlEngineConfiguration = null;
283     if (!isResource) {
284       fileXmlEngineConfiguration = new File JavaDoc (fileBaseLocation, strFile);
285       log4jXmlEngine.info("fileXmlEngineConfiguration: " + fileXmlEngineConfiguration.toString());
286       log4jXmlEngine.info("Parent fileXmlEngineConfiguration: " + fileXmlEngineConfiguration.getParent());
287     }
288     xmlTemplate.clear();
289     try {
290       //if (!isResource) xmlParser.parse(new InputSource(new FileReader(fileXmlEngineConfiguration)));
291
if (!isResource) xmlParser.parse(new InputSource JavaDoc(new InputStreamReader JavaDoc(new FileInputStream JavaDoc(fileXmlEngineConfiguration), "UTF-8")));
292       else xmlParser.parse(new InputSource JavaDoc(ClassLoader.getSystemResourceAsStream(strFile)));
293     } catch (FileNotFoundException JavaDoc e) {
294       if (!isResource) log4jXmlEngine.error("not found fileXmlEngineConfiguration: " + fileXmlEngineConfiguration + "\n" +
295           e.getMessage());
296       else log4jXmlEngine.error("not found fileXmlEngineConfiguration: " + strFile + "\n" +
297           e.getMessage());
298       return;
299     } catch (IOException JavaDoc e) {
300       if (!isResource) log4jXmlEngine.error("IOException in fileXmlEngineConfiguration: " + fileXmlEngineConfiguration);
301       else log4jXmlEngine.error("IOException in fileXmlEngineConfiguration: " + strFile);
302       e.printStackTrace();
303       return;
304     } catch (Exception JavaDoc e) {
305       if (!isResource) log4jXmlEngine.error("Exception in fileXmlEngineConfiguration: " + fileXmlEngineConfiguration);
306       else log4jXmlEngine.error("Exception in fileXmlEngineConfiguration: " + strFile);
307       e.printStackTrace();
308       return;
309     }
310
311     // parser of the template file
312
int posExtension = xmlTemplate.configuration.strTemplate.lastIndexOf(".");
313     XMLReader JavaDoc templateParser;
314     if (xmlTemplate.configuration.strTemplate.substring(posExtension).equals(".html")) {
315       log4jXmlEngine.info("Fichero html: -" + xmlTemplate.configuration.strTemplate.substring(posExtension) + "-");
316       templateParser = htmlParser;
317     } else {
318       log4jXmlEngine.info("Fichero xml: -" + xmlTemplate.configuration.strTemplate.substring(posExtension) + "-");
319       templateParser = xmlParser;
320     }
321     templateParser.setContentHandler(xmlTemplate);
322     log4jXmlEngine.info("XmlEngine file template: " + xmlTemplate.configuration.strTemplate);
323     File JavaDoc fileXmlEngineTemplate = null;
324     String JavaDoc strPath = "";
325     if (!isResource) {
326       fileXmlEngineTemplate = new File JavaDoc (fileXmlEngineConfiguration.getParent(),
327           xmlTemplate.configuration.strTemplate);
328       log4jXmlEngine.info("fileXmlEngineTemplate: " + fileXmlEngineTemplate.toString());
329     } else {
330       int finPath = -1;
331       if ((finPath=strFile.lastIndexOf("/"))!=-1) {
332         strPath = strFile.substring(0, finPath);
333         if (!strPath.endsWith("/")) strPath += "/";
334       }
335     }
336     try {
337       //if (!isResource) templateParser.parse(new InputSource(new FileReader(fileXmlEngineTemplate)));
338
if (!isResource) templateParser.parse(new InputSource JavaDoc(new InputStreamReader JavaDoc(new FileInputStream JavaDoc(fileXmlEngineTemplate), "UTF-8")));
339       else templateParser.parse(new InputSource JavaDoc(ClassLoader.getSystemResourceAsStream(strPath + xmlTemplate.configuration.strTemplate)));
340     } catch (FileNotFoundException JavaDoc e) {
341       if (!isResource) log4jXmlEngine.error("not found fileXmlEngineTemplate: " + fileXmlEngineTemplate + "\n" +
342           e.getMessage());
343       else log4jXmlEngine.error("not found fileXmlEngineTemplate: " + strPath + xmlTemplate.configuration.strTemplate + "\n" +
344           e.getMessage());
345       return;
346     } catch (IOException JavaDoc e) {
347       if (!isResource) log4jXmlEngine.error("IOException in fileXmlEngineTemplate: " + fileXmlEngineTemplate);
348       else log4jXmlEngine.error("IOException in fileXmlEngineTemplate: " + strPath + xmlTemplate.configuration.strTemplate);
349       e.printStackTrace();
350       return;
351     } catch (Exception JavaDoc e) {
352       if (!isResource) log4jXmlEngine.error("Exception in fileXmlEngineTemplate: " + fileXmlEngineTemplate);
353       else log4jXmlEngine.error("Exception in fileXmlEngineTemplate: " + strPath + xmlTemplate.configuration.strTemplate);
354       e.printStackTrace();
355       return;
356     }
357   }
358
359   public void doPost ( HttpServletRequest request,
360       HttpServletResponse response)
361     throws ServletException, IOException JavaDoc {
362     doGet(request, response);
363   }
364
365   public void doGet ( HttpServletRequest request,
366       HttpServletResponse response)
367     throws ServletException, IOException JavaDoc
368   {
369     String JavaDoc strReportName = request.getParameter("report");
370     String JavaDoc strReload = request.getParameter("reload");
371     if (strReload != null) {
372       initialize();
373     }
374     Report report = readReportConfiguration(strReportName);
375     //SQL connect();
376
for (Enumeration JavaDoc<DataValue> e1 = report.xmlDocument.hasDataValue.elements() ; e1.hasMoreElements();) {
377       DataValue elementDataValue = e1.nextElement();
378       elementDataValue.connect(); //SQL
379
for (Enumeration JavaDoc e2 = elementDataValue.vecParameterValue.elements() ; e2.hasMoreElements();) {
380         ParameterValue parameter = (ParameterValue)e2.nextElement();
381         parameter.strValue = request.getParameter(parameter.parameterTemplate.strName);
382         if (parameter.strValue == null) {
383           log4jXmlEngine.info("getParameter: default assigned");
384           parameter.strValue = parameter.parameterTemplate.strDefault;
385         }
386         log4jXmlEngine.debug("getParameter: " + parameter.parameterTemplate.strName + " valor: " + parameter.strValue );
387       }
388     }
389
390     // Connection of the subreports
391
for (Enumeration JavaDoc<XmlDocument> e1 = report.xmlDocument.hasSubXmlDocuments.elements() ; e1.hasMoreElements();) {
392       XmlDocument subXmlDocument = e1.nextElement();
393       for (Enumeration JavaDoc<DataValue> e2 = subXmlDocument.hasDataValue.elements() ; e2.hasMoreElements();) {
394         DataValue elementDataValue = e2.nextElement();
395         elementDataValue.connect(); //SQL
396
}
397     }
398
399     // Parameter of the report (not for the SQL query's)
400
for (Enumeration JavaDoc<ParameterValue> e3 = report.xmlDocument.hasParameterValue.elements() ; e3.hasMoreElements();) {
401       ParameterValue parameter = e3.nextElement();
402       parameter.strValue = request.getParameter(parameter.parameterTemplate.strName);
403       if (parameter.strValue == null) {
404         log4jXmlEngine.debug("getParameter of: " + parameter.parameterTemplate.strName + " default assigned");
405         parameter.strValue = parameter.parameterTemplate.strDefault;
406       }
407       log4jXmlEngine.debug("getParameter: " + parameter.parameterTemplate.strName + " value: " + parameter.strValue );
408     }
409
410     response.setContentType("text/html; charset=UTF-8");
411     PrintWriter JavaDoc out = response.getWriter();
412     String JavaDoc strBlank = request.getParameter("blank");
413     if (strBlank != null) {
414       out.println(report.xmlDocument.print(strBlank));
415     } else {
416       out.println(report.xmlDocument.print());
417     }
418     out.close();
419   }
420
421   public void connect(){
422     for (Enumeration JavaDoc e1 = hasXmlTemplate.elements() ; e1.hasMoreElements() ;) {
423       Report report = (Report)e1.nextElement(); // use XmlDocument
424
for (Enumeration JavaDoc<DataValue> e2 = report.xmlDocument.hasDataValue.elements() ; e2.hasMoreElements();) {
425         DataValue elementDataValue = e2.nextElement();
426         elementDataValue.connect();
427       }
428     }
429   }
430
431   public void closeConnections () {
432     for (Enumeration JavaDoc e1 = hasXmlTemplate.elements() ; e1.hasMoreElements() ;) {
433       Report report = (Report)e1.nextElement();
434       for (Enumeration JavaDoc<DataValue> e2 = report.xmlDocument.hasDataValue.elements() ; e2.hasMoreElements();) {
435         DataValue elementDataValue = e2.nextElement();
436         elementDataValue.closeConnection();
437       }
438     }
439   }
440
441   public void destroy() {
442     closeConnections();
443   }
444
445   public static void configureLog4j(String JavaDoc file) {
446     if (file != null) {
447       PropertyConfigurator.configure(file);
448     } else {
449       PropertyConfigurator.configure("log4j.lcf");
450     }
451   }
452
453   public static void main(String JavaDoc argv[]) {
454     int i;
455     configureLog4j(null);
456     String JavaDoc strFile;
457     if (argv.length < 1) {
458       log4jXmlEngine.error("Usage: java XmlEngine [driver URL] file");
459       return;
460     }
461     XmlEngine xmlEngine = new XmlEngine();
462     if (argv[0].equals("-d")) {
463       xmlEngine.strDriverDefault = argv[1];
464       xmlEngine.strUrlDefault = argv[2];
465       strFile = argv[3];
466       i = 3;
467     } else {
468       strFile = argv[0];
469       i = 0;
470     }
471
472     xmlEngine.initialize();
473     Report report = xmlEngine.readReportConfiguration(strFile);
474     for (Enumeration JavaDoc<DataValue> e1 = report.xmlDocument.hasDataValue.elements() ; e1.hasMoreElements();) {
475       DataValue elementDataValue = e1.nextElement();
476       for (Enumeration JavaDoc e2 = elementDataValue.vecParameterValue.elements() ; e2.hasMoreElements();) {
477         ParameterValue parameter = (ParameterValue)e2.nextElement();
478         i++;
479         parameter.strValue = argv[i];
480         if (parameter.strValue == null) {
481           log4jXmlEngine.info("Parameter(main): default assigned");
482           parameter.strValue = parameter.parameterTemplate.strDefault;
483         }
484         log4jXmlEngine.debug("Parameter(main): " + parameter.parameterTemplate.strName + " valor: " + parameter.strValue );
485       }
486     }
487
488     log4jXmlEngine.info("Hashtable: ");
489     for (Enumeration JavaDoc<String JavaDoc> e = report.xmlDocument.xmlTemplate.configuration.hashtable.vecKeys.elements() ; e.hasMoreElements() ;) {
490       String JavaDoc id = e.nextElement();
491       IDComponent iDComponent = (IDComponent)report.xmlDocument.xmlTemplate.configuration.hashtable.get(id);
492       log4jXmlEngine.info("id: " + id + " type: "+ iDComponent.type());
493     }
494     log4jXmlEngine.info("Template: " + report.xmlDocument.xmlTemplate.configuration.strTemplate);
495     log4jXmlEngine.debug(report.xmlDocument.print());
496   }
497
498   //XmlEngineNP: classes for compatibilizing with the Rrports version
499
public Report readReportConfiguration(String JavaDoc strReportFile) {
500     return readReportConfiguration(strReportFile, new String JavaDoc[0]);
501   }
502
503   public Report readReportConfiguration(String JavaDoc strReportFile, String JavaDoc[] discard) {
504     return new Report(strReportFile, discard, this);
505   }
506
507 }
508
Popular Tags