Clover Coverage Report
Coverage timestamp: Sa Aug 2 2008 13:56:27 CEST
../../../../../img/srcFileCovDistChart10.png 0% of files have more coverage
249   563   119   4,15
104   454   0,48   60
60     1,98  
1    
 
  Qedeq2Xml       Line # 69 249 119 92,5% 0.92493945
 
  (1)
 
1    /* $Id: Qedeq2Xml.java,v 1.1 2008/07/26 08:00:51 m31 Exp $
2    *
3    * This file is part of the project "Hilbert II" - http://www.qedeq.org
4    *
5    * Copyright 2000-2008, Michael Meyling <mime@qedeq.org>.
6    *
7    * "Hilbert II" is free software; you can redistribute
8    * it and/or modify it under the terms of the GNU General Public
9    * License as published by the Free Software Foundation; either
10    * version 2 of the License, or (at your option) any later version.
11    *
12    * This program is distributed in the hope that it will be useful,
13    * but WITHOUT ANY WARRANTY; without even the implied warranty of
14    * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15    * GNU General Public License for more details.
16    */
17   
18    package org.qedeq.kernel.xml.dao;
19   
20    import java.io.IOException;
21   
22    import org.qedeq.base.io.TextOutput;
23    import org.qedeq.base.utility.StringUtility;
24    import org.qedeq.kernel.base.list.ElementList;
25    import org.qedeq.kernel.base.module.Author;
26    import org.qedeq.kernel.base.module.AuthorList;
27    import org.qedeq.kernel.base.module.Axiom;
28    import org.qedeq.kernel.base.module.Chapter;
29    import org.qedeq.kernel.base.module.Formula;
30    import org.qedeq.kernel.base.module.FunctionDefinition;
31    import org.qedeq.kernel.base.module.Header;
32    import org.qedeq.kernel.base.module.Import;
33    import org.qedeq.kernel.base.module.ImportList;
34    import org.qedeq.kernel.base.module.Latex;
35    import org.qedeq.kernel.base.module.LatexList;
36    import org.qedeq.kernel.base.module.LinkList;
37    import org.qedeq.kernel.base.module.LiteratureItem;
38    import org.qedeq.kernel.base.module.LiteratureItemList;
39    import org.qedeq.kernel.base.module.Location;
40    import org.qedeq.kernel.base.module.LocationList;
41    import org.qedeq.kernel.base.module.Node;
42    import org.qedeq.kernel.base.module.PredicateDefinition;
43    import org.qedeq.kernel.base.module.Proof;
44    import org.qedeq.kernel.base.module.Proposition;
45    import org.qedeq.kernel.base.module.Qedeq;
46    import org.qedeq.kernel.base.module.Rule;
47    import org.qedeq.kernel.base.module.Section;
48    import org.qedeq.kernel.base.module.Specification;
49    import org.qedeq.kernel.base.module.Subsection;
50    import org.qedeq.kernel.base.module.SubsectionList;
51    import org.qedeq.kernel.base.module.Term;
52    import org.qedeq.kernel.base.module.UsedByList;
53    import org.qedeq.kernel.base.module.VariableList;
54    import org.qedeq.kernel.bo.context.KernelContext;
55    import org.qedeq.kernel.bo.module.ControlVisitor;
56    import org.qedeq.kernel.bo.module.KernelQedeqBo;
57    import org.qedeq.kernel.common.SourceFileExceptionList;
58   
59   
60    /**
61    * This class prints a QEDEQ module in XML format in an output stream.
62    *
63    * TODO mime 20080309: escape XML attributes like &gt;, &amp; and other.
64    * See {@link org.qedeq.base.utility.StringUtility#decodeXmlMarkup(StringBuffer)}.
65    *
66    * @version $Revision: 1.1 $
67    * @author Michael Meyling
68    */
 
69    public final class Qedeq2Xml extends ControlVisitor {
70   
71    /** Output goes here. */
72    private TextOutput printer;
73   
74    /**
75    * Constructor.
76    *
77    * @param bo QEDEQ BO.
78    * @param printer Print herein.
79    */
 
80  3 toggle private Qedeq2Xml(final KernelQedeqBo bo, final TextOutput printer) {
81  3 super(bo);
82  3 this.printer = printer;
83    }
84   
85    /**
86    * Prints a XML representation of given QEDEQ module into a given output stream.
87    *
88    * @param bo BO QEDEQ module object.
89    * @param printer Print herein.
90    * @throws SourceFileExceptionList Major problem occurred.
91    * @throws IOException
92    */
 
93  3 toggle public static void print(final KernelQedeqBo bo, final TextOutput printer) throws
94    SourceFileExceptionList, IOException {
95  3 final Qedeq2Xml converter = new Qedeq2Xml(bo, printer);
96  3 try {
97  3 converter.traverse();
98    } finally {
99  3 printer.flush();
100    }
101  3 if (printer.checkError()) {
102  0 throw printer.getError();
103    }
104    }
105   
 
106  3 toggle public final void visitEnter(final Qedeq qedeq) {
107  3 printer.levelPrintln("<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>");
108  3 printer.levelPrintln("<QEDEQ");
109  3 printer.levelPrintln(" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"");
110  3 printer.levelPrintln(" xsi:noNamespaceSchemaLocation=\"http://www.qedeq.org/"
111    + KernelContext.getInstance().getKernelVersionDirectory() + "/xml/qedeq.xsd\">");
112  3 printer.pushLevel();
113    }
114   
 
115  3 toggle public final void visitLeave(final Qedeq qedeq) {
116  3 printer.popLevel();
117  3 printer.levelPrintln("</QEDEQ>");
118    }
119   
 
120  3 toggle public void visitEnter(final Header header) {
121  3 printer.levelPrint("<HEADER");
122  3 if (header.getEmail() != null) {
123  3 printer.print(" email=\"" + header.getEmail() + "\"");
124    }
125  3 printer.println(">");
126  3 printer.pushLevel();
127    }
128   
 
129  3 toggle public void visitLeave(final Header header) {
130  3 printer.popLevel();
131  3 printer.levelPrintln("</HEADER>");
132    }
133   
 
134  6 toggle public void visitEnter(final Specification specification) {
135  6 printer.levelPrint("<SPECIFICATION");
136  6 if (specification.getName() != null) {
137  6 printer.print(" name=\"" + specification.getName() + "\"");
138    }
139  6 if (specification.getName() != null) {
140  6 printer.print(" ruleVersion=\"" + specification.getRuleVersion() + "\"");
141    }
142  6 printer.println(">");
143  6 printer.pushLevel();
144    }
145   
 
146  6 toggle public void visitLeave(final Specification specification) {
147  6 printer.popLevel();
148  6 printer.levelPrintln("</SPECIFICATION>");
149    }
150   
 
151  318 toggle public void visitEnter(final LatexList latexList) {
152  318 final String last = getCurrentContext().getLocationWithinModule();
153  318 if (last.endsWith(".getTitle()")) {
154  98 printer.levelPrintln("<TITLE>");
155  220 } else if (last.endsWith(".getSummary()")) {
156  3 printer.levelPrintln("<ABSTRACT>");
157  217 } else if (last.endsWith(".getIntroduction()")) {
158  47 printer.levelPrintln("<INTRODUCTION>");
159  170 } else if (last.endsWith(".getName()")) {
160  38 printer.levelPrintln("<NAME>");
161  132 } else if (last.endsWith(".getPrecedingText()")) {
162  92 printer.levelPrintln("<PRECEDING>");
163  40 } else if (last.endsWith(".getSucceedingText()")) {
164  19 printer.levelPrintln("<SUCCEEDING>");
165  21 } else if (last.endsWith(".getLatex()")) {
166  11 printer.levelPrintln("<TEXT>");
167  10 } else if (last.endsWith(".getDescription()")) {
168  2 printer.levelPrintln("<DESCRIPTION>");
169    }
170  318 printer.pushLevel();
171    }
172   
 
173  318 toggle public void visitLeave(final LatexList latexList) {
174  318 printer.popLevel();
175  318 final String last = getCurrentContext().getLocationWithinModule();
176  318 if (last.endsWith(".getTitle()")) {
177  98 printer.levelPrintln("</TITLE>");
178  220 } else if (last.endsWith(".getSummary()")) {
179  3 printer.levelPrintln("</ABSTRACT>");
180  217 } else if (last.endsWith(".getIntroduction()")) {
181  47 printer.levelPrintln("</INTRODUCTION>");
182  170 } else if (last.endsWith(".getName()")) {
183  38 printer.levelPrintln("</NAME>");
184  132 } else if (last.endsWith(".getPrecedingText()")) {
185  92 printer.levelPrintln("</PRECEDING>");
186  40 } else if (last.endsWith(".getSucceedingText()")) {
187  19 printer.levelPrintln("</SUCCEEDING>");
188  21 } else if (last.endsWith(".getLatex()")) {
189  11 printer.levelPrintln("</TEXT>");
190  10 } else if (last.endsWith(".getDescription()")) {
191  2 printer.levelPrintln("</DESCRIPTION>");
192    }
193    }
194   
 
195  575 toggle public void visitEnter(final Latex latex) {
196  575 printer.levelPrint("<LATEX");
197  575 if (latex.getLanguage() != null) {
198  522 printer.print(" language=\"" + latex.getLanguage() + "\"");
199    }
200  575 printer.println(">");
201  575 if (latex.getLatex() != null) {
202  573 printer.pushLevel();
203  573 printer.levelPrintln("<![CDATA[");
204  573 printer.pushLevel();
205  573 printer.levelPrintln(StringUtility.useSystemLineSeparator(latex.getLatex()));
206    }
207    }
208   
 
209  575 toggle public void visitLeave(final Latex latex) {
210  575 if (latex.getLatex() != null) {
211  573 printer.popLevel();
212  573 printer.levelPrintln("]]>");
213  573 printer.popLevel();
214    }
215  575 printer.levelPrintln("</LATEX>");
216    }
217   
 
218  6 toggle public void visitEnter(final LocationList locationList) {
219  6 printer.levelPrintln("<LOCATIONS>");
220  6 printer.pushLevel();
221    }
222   
 
223  6 toggle public void visitLeave(final LocationList locationList) {
224  6 printer.popLevel();
225  6 printer.levelPrintln("</LOCATIONS>");
226    }
227   
 
228  7 toggle public void visitEnter(final Location location) {
229  7 printer.levelPrint("<LOCATION");
230  7 if (location.getLocation() != null) {
231  7 printer.print(" value=\"" + location.getLocation() + "\"");
232    }
233  7 printer.println(" />");
234    }
235   
 
236  3 toggle public void visitEnter(final AuthorList authorList) {
237  3 printer.levelPrintln("<AUTHORS>");
238  3 printer.pushLevel();
239    }
240   
 
241  3 toggle public void visitLeave(final AuthorList authorList) {
242  3 printer.popLevel();
243  3 printer.levelPrintln("</AUTHORS>");
244    }
245   
 
246  3 toggle public void visitEnter(final Author author) {
247  3 printer.levelPrint("<AUTHOR");
248  3 if (author.getEmail() != null) {
249  3 printer.print(" email=\"" + author.getEmail() + "\"");
250    }
251  3 printer.println(">");
252  3 printer.pushLevel();
253  3 if (author.getName() != null) {
254  3 printer.levelPrintln("<NAME>");
255    }
256  3 printer.pushLevel();
257    }
258   
 
259  3 toggle public void visitLeave(final Author author) {
260  3 printer.popLevel();
261  3 if (author.getName() != null) {
262  3 printer.levelPrintln("</NAME>");
263    }
264  3 printer.popLevel();
265  3 printer.levelPrintln("</AUTHOR>");
266    }
267   
 
268  2 toggle public void visitEnter(final ImportList importList) {
269  2 printer.levelPrintln("<IMPORTS>");
270  2 printer.pushLevel();
271    }
272   
 
273  2 toggle public void visitLeave(final ImportList importList) {
274  2 printer.popLevel();
275  2 printer.levelPrintln("</IMPORTS>");
276    }
277   
 
278  2 toggle public void visitEnter(final Import imp) {
279  2 printer.levelPrint("<IMPORT");
280  2 if (imp.getLabel() != null) {
281  2 printer.print(" label=\"" + imp.getLabel() + "\"");
282    }
283  2 printer.println(">");
284  2 printer.pushLevel();
285    }
286   
 
287  2 toggle public void visitLeave(final Import imp) {
288  2 printer.popLevel();
289  2 printer.levelPrintln("</IMPORT>");
290    }
291   
 
292  1 toggle public void visitEnter(final UsedByList usedByList) {
293  1 printer.levelPrintln("<USEDBY>");
294  1 printer.pushLevel();
295    }
296   
 
297  1 toggle public void visitLeave(final UsedByList usedByList) {
298  1 printer.popLevel();
299  1 printer.levelPrintln("</USEDBY>");
300    }
301   
 
302  16 toggle public void visitEnter(final Chapter chapter) {
303  16 printer.levelPrint("<CHAPTER");
304  16 if (chapter.getNoNumber() != null) {
305  4 printer.print(" noNumber=\"" + chapter.getNoNumber().booleanValue() + "\"");
306    }
307  16 printer.println(">");
308  16 printer.pushLevel();
309    }
310   
 
311  16 toggle public void visitLeave(final Chapter chapter) {
312  16 printer.popLevel();
313  16 printer.levelPrintln("</CHAPTER>");
314    }
315   
 
316  31 toggle public void visitEnter(final Section section) {
317  31 printer.levelPrint("<SECTION");
318  31 if (section.getNoNumber() != null) {
319  0 printer.print(" noNumber=\"" + section.getNoNumber().booleanValue() + "\"");
320    }
321  31 printer.println(">");
322  31 printer.pushLevel();
323    }
324   
 
325  31 toggle public void visitLeave(final Section section) {
326  31 printer.popLevel();
327  31 printer.levelPrintln("</SECTION>");
328    }
329   
 
330  17 toggle public void visitEnter(final SubsectionList subsectionList) {
331  17 printer.levelPrintln("<SUBSECTIONS>");
332  17 printer.pushLevel();
333    }
334   
 
335  17 toggle public void visitLeave(final SubsectionList subsectionList) {
336  17 printer.popLevel();
337  17 printer.levelPrintln("</SUBSECTIONS>");
338    }
339   
 
340  11 toggle public void visitEnter(final Subsection subsection) {
341  11 printer.levelPrint("<SUBSECTION");
342  11 if (subsection.getId() != null) {
343  0 printer.print(" id=\"" + subsection.getId() + "\"");
344    }
345  11 if (subsection.getLevel() != null) {
346  0 printer.print(" level=\"" + subsection.getLevel() + "\"");
347    }
348  11 printer.println(">");
349  11 printer.pushLevel();
350    }
351   
 
352  11 toggle public void visitLeave(final Subsection subsection) {
353  11 printer.popLevel();
354  11 printer.levelPrintln("</SUBSECTION>");
355    }
356   
 
357  92 toggle public void visitEnter(final Node node) {
358  92 printer.levelPrint("<NODE");
359  92 if (node.getId() != null) {
360  92 printer.print(" id=\"" + node.getId() + "\"");
361    }
362  92 if (node.getLevel() != null) {
363  72 printer.print(" level=\"" + node.getLevel() + "\"");
364    }
365  92 printer.println(">");
366  92 printer.pushLevel();
367    }
368   
 
369  92 toggle public void visitLeave(final Node node) {
370  92 printer.popLevel();
371  92 printer.levelPrintln("</NODE>");
372    }
373   
 
374  12 toggle public void visitEnter(final Axiom axiom) {
375  12 printer.levelPrintln("<AXIOM>");
376  12 printer.pushLevel();
377    }
378   
 
379  12 toggle public void visitLeave(final Axiom axiom) {
380  12 printer.popLevel();
381  12 printer.levelPrintln("</AXIOM>");
382    }
383   
 
384  54 toggle public void visitEnter(final Proposition proposition) {
385  54 printer.levelPrintln("<THEOREM>");
386  54 printer.pushLevel();
387    }
388   
 
389  54 toggle public void visitLeave(final Proposition proposition) {
390  54 printer.popLevel();
391  54 printer.levelPrintln("</THEOREM>");
392    }
393   
 
394  5 toggle public void visitEnter(final Proof proof) {
395  5 printer.levelPrint("<PROOF");
396  5 if (proof.getKind() != null) {
397  5 printer.print(" kind=\"" + proof.getKind() + "\"");
398    }
399  5 if (proof.getLevel() != null) {
400  5 printer.print(" level=\"" + proof.getLevel() + "\"");
401    }
402  5 printer.println(">");
403    }
404   
 
405  5 toggle public void visitLeave(final Proof proof) {
406  5 printer.levelPrintln("</PROOF>");
407    }
408   
 
409  9 toggle public void visitEnter(final PredicateDefinition definition) {
410  9 printer.levelPrint("<DEFINITION_PREDICATE");
411  9 if (definition.getArgumentNumber() != null) {
412  9 printer.print(" arguments=\"" + definition.getArgumentNumber() + "\"");
413    }
414  9 if (definition.getName() != null) {
415  9 printer.print(" name=\"" + definition.getName() + "\"");
416    }
417  9 printer.println(">");
418  9 printer.pushLevel();
419  9 if (definition.getLatexPattern() != null) {
420  9 printer.levelPrintln("<LATEXPATTERN>" + definition.getLatexPattern()
421    + "</LATEXPATTERN>");
422    }
423    }
424   
 
425  9 toggle public void visitLeave(final PredicateDefinition definition) {
426  9 printer.popLevel();
427  9 printer.levelPrintln("</DEFINITION_PREDICATE>");
428    }
429   
 
430  16 toggle public void visitEnter(final FunctionDefinition definition) {
431  16 printer.levelPrint("<DEFINITION_FUNCTION");
432  16 if (definition.getArgumentNumber() != null) {
433  16 printer.print(" arguments=\"" + definition.getArgumentNumber() + "\"");
434    }
435  16 if (definition.getName() != null) {
436  16 printer.print(" name=\"" + definition.getName() + "\"");
437    }
438  16 printer.println(">");
439  16 printer.pushLevel();
440  16 if (definition.getLatexPattern() != null) {
441  16 printer.levelPrintln("<LATEXPATTERN>" + definition.getLatexPattern()
442    + "</LATEXPATTERN>");
443    }
444    }
445   
 
446  16 toggle public void visitLeave(final FunctionDefinition definition) {
447  16 printer.popLevel();
448  16 printer.levelPrintln("</DEFINITION_FUNCTION>");
449    }
450   
 
451  1 toggle public void visitEnter(final Rule rule) {
452  1 printer.levelPrint("<RULE");
453  1 if (rule.getName() != null) {
454  1 printer.print(" name=\"" + rule.getName() + "\"");
455    }
456  1 printer.println(">");
457  1 printer.pushLevel();
458    }
459   
 
460  1 toggle public void visitLeave(final Rule rule) {
461  1 printer.popLevel();
462  1 printer.levelPrintln("</RULE>");
463    }
464   
 
465  1 toggle public void visitEnter(final LinkList linkList) {
466  2 for (int i = 0; i < linkList.size(); i++) {
467  1 printer.levelPrint("<LINK");
468  1 if (linkList.get(i) != null) {
469  1 printer.print(" id=\"" + linkList.get(i) + "\"");
470    }
471  1 printer.println("/>");
472  1 };
473    }
474   
 
475  73 toggle public void visitEnter(final Formula formula) {
476  73 printer.levelPrintln("<FORMULA>");
477  73 printer.pushLevel();
478    }
479   
 
480  73 toggle public void visitLeave(final Formula formula) {
481  73 printer.popLevel();
482  73 printer.levelPrintln("</FORMULA>");
483    }
484   
 
485  16 toggle public void visitEnter(final Term term) {
486  16 printer.levelPrintln("<TERM>");
487  16 printer.pushLevel();
488    }
489   
 
490  16 toggle public void visitLeave(final Term term) {
491  16 printer.popLevel();
492  16 printer.levelPrintln("</TERM>");
493    }
494   
 
495  22 toggle public void visitEnter(final VariableList variableList) {
496  22 printer.levelPrintln("<VARLIST>");
497  22 printer.pushLevel();
498    }
499   
 
500  22 toggle public void visitLeave(final VariableList variableList) {
501  22 printer.popLevel();
502  22 printer.levelPrintln("</VARLIST>");
503    }
504   
505    // TODO mime 20070217: what do we do if an atom is not first element of a list?
506    // we wouldn't get it here!!! But can we think of an output syntax anyway????
 
507  1485 toggle public void visitEnter(final ElementList list) {
508  1485 final String operator = list.getOperator();
509  1485 printer.levelPrint("<" + operator);
510  1485 final boolean firstIsAtom = list.size() > 0 && list.getElement(0).isAtom();
511  1485 if (firstIsAtom) {
512  1236 final String atom = list.getElement(0).getAtom().getString();
513  1236 if (atom != null) {
514  1236 if ("VAR".equals(operator) || "PREDVAR".equals(operator)
515    || "FUNVAR".equals(operator)) {
516  693 printer.print(" id=\"" + atom + "\"");
517  543 } else if ("PREDCON".equals(operator) || "FUNCON".equals(operator)) {
518  543 printer.print(" ref=\"" + atom + "\"");
519    } else {
520  0 printer.print(" unknown=\"" + atom + "\"");
521    }
522    }
523    }
524  1485 if (list.size() == 0 || list.size() == 1 && list.getElement(0).isAtom()) {
525  724 printer.print("/");
526    }
527  1485 printer.println(">");
528  1485 printer.pushLevel();
529    }
530   
 
531  1485 toggle public void visitLeave(final ElementList list) {
532  1485 printer.popLevel();
533  1485 if (list.size() == 0 || list.size() == 1 && list.getElement(0).isAtom()) {
534  724 return;
535    }
536  761 printer.levelPrintln("</" + list.getOperator() + ">");
537    }
538   
 
539  1 toggle public void visitEnter(final LiteratureItemList list) {
540  1 printer.levelPrintln("<BIBLIOGRAPHY>");
541  1 printer.pushLevel();
542    }
543   
 
544  1 toggle public void visitLeave(final LiteratureItemList list) {
545  1 printer.popLevel();
546  1 printer.levelPrintln("</BIBLIOGRAPHY>");
547    }
548   
 
549  3 toggle public void visitEnter(final LiteratureItem item) {
550  3 printer.levelPrint("<ITEM");
551  3 if (item.getLabel() != null) {
552  3 printer.print(" label=\"" + item.getLabel() + "\"");
553    }
554  3 printer.println(">");
555  3 printer.pushLevel();
556    }
557   
 
558  3 toggle public void visitLeave(final LiteratureItem item) {
559  3 printer.popLevel();
560  3 printer.levelPrintln("</ITEM>");
561    }
562   
563    }