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