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