View Javadoc

1   /* This file is part of the project "Hilbert II" - http://www.qedeq.org" target="alexandria_uri">http://www.qedeq.org
2    *
3    * Copyright 2000-2014,  Michael Meyling <mime@qedeq.org>.
4    *
5    * "Hilbert II" is free software; you can redistribute
6    * it and/or modify it under the terms of the GNU General Public
7    * License as published by the Free Software Foundation; either
8    * version 2 of the License, or (at your option) any later version.
9    *
10   * This program is distributed in the hope that it will be useful,
11   * but WITHOUT ANY WARRANTY; without even the implied warranty of
12   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13   * GNU General Public License for more details.
14   */
15  
16  package org.qedeq.kernel.xml.handler.module;
17  
18  import org.qedeq.kernel.se.base.module.Node;
19  import org.qedeq.kernel.se.dto.module.NodeVo;
20  import org.qedeq.kernel.xml.common.XmlSyntaxException;
21  import org.qedeq.kernel.xml.handler.common.AbstractSimpleHandler;
22  import org.qedeq.kernel.xml.handler.common.SimpleAttributes;
23  
24  
25  /**
26   * Handles node data.
27   *
28   * @author  Michael Meyling
29   */
30  public class NodeHandler extends AbstractSimpleHandler {
31  
32      /** Handler for node name. The node name is a visible, language specific node reference,
33       * e.g. "Axiom of Choice" or "is set". */
34      private final LatexListHandler nameHandler;
35  
36      /** Handler for title. This is simply the title of this subsection. */
37      private final LatexListHandler titleHandler;
38  
39      /** Handler for the formula preceding text. */
40      private final LatexListHandler precedingHandler;
41  
42      /** Handler for the formula succeeding text. */
43      private final LatexListHandler succeedingHandler;
44  
45      /** Handler for an axiom. */
46      private final AxiomHandler axiomHandler;
47  
48      /** Handler for an initial predicate definition. */
49      private final InitialPredicateDefinitionHandler initialPredicateDefinitionHandler;
50  
51      /** Handler for a predicate definition. */
52      private final PredicateDefinitionHandler predicateDefinitionHandler;
53  
54      /** Handler for a function definition. */
55      private final FunctionDefinitionHandler functionDefinitionHandler;
56  
57      /** Handler for a initial function definition. */
58      private final InitialFunctionDefinitionHandler initialFunctionDefinitionHandler;
59  
60      /** Handler for a proposition. */
61      private final PropositionHandler propositionHandler;
62  
63      /** Handler for a rule. */
64      private final RuleHandler ruleHandler;
65  
66      /** Node value object. */
67      private NodeVo node;
68  
69  
70      /**
71       * Constructor.
72       *
73       * @param   handler Parent handler.
74       */
75      public NodeHandler(final AbstractSimpleHandler handler) {
76          super(handler, "NODE");
77          nameHandler = new LatexListHandler(this, "NAME");
78          titleHandler = new LatexListHandler(this, "TITLE");
79          precedingHandler = new LatexListHandler(this, "PRECEDING");
80          succeedingHandler = new LatexListHandler(this, "SUCCEEDING");
81          axiomHandler = new AxiomHandler(this);
82          initialPredicateDefinitionHandler = new InitialPredicateDefinitionHandler(this);
83          predicateDefinitionHandler = new PredicateDefinitionHandler(this);
84          functionDefinitionHandler = new FunctionDefinitionHandler(this);
85          initialFunctionDefinitionHandler = new InitialFunctionDefinitionHandler(this);
86          propositionHandler = new PropositionHandler(this);
87          ruleHandler = new RuleHandler(this);
88      }
89  
90      public final void init() {
91          node = null;
92      }
93  
94      /**
95       * Get node.
96       *
97       * @return  Node.
98       */
99      public final Node getNode() {
100         return node;
101     }
102 
103     public final void startElement(final String name, final SimpleAttributes attributes)
104             throws XmlSyntaxException {
105         if (getStartTag().equals(name)) {
106             node = new NodeVo();
107             node.setId(attributes.getString("id"));
108             node.setLevel(attributes.getString("level"));
109         } else if (nameHandler.getStartTag().equals(name)) {
110             changeHandler(nameHandler, name, attributes);
111         } else if (titleHandler.getStartTag().equals(name)) {
112             changeHandler(titleHandler, name, attributes);
113         } else if (precedingHandler.getStartTag().equals(name)) {
114             changeHandler(precedingHandler, name, attributes);
115         } else if (succeedingHandler.getStartTag().equals(name)) {
116             changeHandler(succeedingHandler, name, attributes);
117         } else if (axiomHandler.getStartTag().equals(name)) {
118             changeHandler(axiomHandler, name, attributes);
119         } else if (initialPredicateDefinitionHandler.getStartTag().equals(name)) {
120             changeHandler(initialPredicateDefinitionHandler, name, attributes);
121         } else if (predicateDefinitionHandler.getStartTag().equals(name)) {
122             changeHandler(predicateDefinitionHandler, name, attributes);
123         } else if (functionDefinitionHandler.getStartTag().equals(name)) {
124             changeHandler(functionDefinitionHandler, name, attributes);
125         } else if (initialFunctionDefinitionHandler.getStartTag().equals(name)) {
126             changeHandler(initialFunctionDefinitionHandler, name, attributes);
127         } else if (propositionHandler.getStartTag().equals(name)) {
128             changeHandler(propositionHandler, name, attributes);
129         } else if (ruleHandler.getStartTag().equals(name)) {
130             changeHandler(ruleHandler, name, attributes);
131         } else {
132             throw XmlSyntaxException.createUnexpectedTagException(name);
133         }
134     }
135 
136     public void endElement(final String name) throws XmlSyntaxException {
137         if (getStartTag().equals(name)) {
138             // thats why we handle it
139         } else if (nameHandler.getStartTag().equals(name)) {
140             node.setName(nameHandler.getLatexList());
141         } else if (titleHandler.getStartTag().equals(name)) {
142             node.setTitle(titleHandler.getLatexList());
143         } else if (precedingHandler.getStartTag().equals(name)) {
144             node.setPrecedingText(precedingHandler.getLatexList());
145         } else if (succeedingHandler.getStartTag().equals(name)) {
146             node.setSucceedingText(succeedingHandler.getLatexList());
147         } else if (axiomHandler.getStartTag().equals(name)) {
148             node.setNodeType(axiomHandler.getAxiom());
149         } else if (initialPredicateDefinitionHandler.getStartTag().equals(name)) {
150             node.setNodeType(initialPredicateDefinitionHandler.getInitialDefinition());
151         } else if (predicateDefinitionHandler.getStartTag().equals(name)) {
152             node.setNodeType(predicateDefinitionHandler.getDefinition());
153         } else if (functionDefinitionHandler.getStartTag().equals(name)) {
154             node.setNodeType(functionDefinitionHandler.getDefinition());
155         } else if (initialFunctionDefinitionHandler.getStartTag().equals(name)) {
156             node.setNodeType(initialFunctionDefinitionHandler.getDefinition());
157         } else if (propositionHandler.getStartTag().equals(name)) {
158             node.setNodeType(propositionHandler.getProposition());
159         } else if (ruleHandler.getStartTag().equals(name)) {
160             node.setNodeType(ruleHandler.getRule());
161         } else {
162             throw XmlSyntaxException.createUnexpectedTagException(name);
163        }
164     }
165 
166 }