NodeHandler.java
001 /* This file is part of the project "Hilbert II" - http://www.qedeq.org
002  *
003  * Copyright 2000-2014,  Michael Meyling <mime@qedeq.org>.
004  *
005  * "Hilbert II" is free software; you can redistribute
006  * it and/or modify it under the terms of the GNU General Public
007  * License as published by the Free Software Foundation; either
008  * version 2 of the License, or (at your option) any later version.
009  *
010  * This program is distributed in the hope that it will be useful,
011  * but WITHOUT ANY WARRANTY; without even the implied warranty of
012  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
013  * GNU General Public License for more details.
014  */
015 
016 package org.qedeq.kernel.xml.handler.module;
017 
018 import org.qedeq.kernel.se.base.module.Node;
019 import org.qedeq.kernel.se.dto.module.NodeVo;
020 import org.qedeq.kernel.xml.common.XmlSyntaxException;
021 import org.qedeq.kernel.xml.handler.common.AbstractSimpleHandler;
022 import org.qedeq.kernel.xml.handler.common.SimpleAttributes;
023 
024 
025 /**
026  * Handles node data.
027  *
028  @author  Michael Meyling
029  */
030 public class NodeHandler extends AbstractSimpleHandler {
031 
032     /** Handler for node name. The node name is a visible, language specific node reference,
033      * e.g. "Axiom of Choice" or "is set". */
034     private final LatexListHandler nameHandler;
035 
036     /** Handler for title. This is simply the title of this subsection. */
037     private final LatexListHandler titleHandler;
038 
039     /** Handler for the formula preceding text. */
040     private final LatexListHandler precedingHandler;
041 
042     /** Handler for the formula succeeding text. */
043     private final LatexListHandler succeedingHandler;
044 
045     /** Handler for an axiom. */
046     private final AxiomHandler axiomHandler;
047 
048     /** Handler for an initial predicate definition. */
049     private final InitialPredicateDefinitionHandler initialPredicateDefinitionHandler;
050 
051     /** Handler for a predicate definition. */
052     private final PredicateDefinitionHandler predicateDefinitionHandler;
053 
054     /** Handler for a function definition. */
055     private final FunctionDefinitionHandler functionDefinitionHandler;
056 
057     /** Handler for a initial function definition. */
058     private final InitialFunctionDefinitionHandler initialFunctionDefinitionHandler;
059 
060     /** Handler for a proposition. */
061     private final PropositionHandler propositionHandler;
062 
063     /** Handler for a rule. */
064     private final RuleHandler ruleHandler;
065 
066     /** Node value object. */
067     private NodeVo node;
068 
069 
070     /**
071      * Constructor.
072      *
073      @param   handler Parent handler.
074      */
075     public NodeHandler(final AbstractSimpleHandler handler) {
076         super(handler, "NODE");
077         nameHandler = new LatexListHandler(this, "NAME");
078         titleHandler = new LatexListHandler(this, "TITLE");
079         precedingHandler = new LatexListHandler(this, "PRECEDING");
080         succeedingHandler = new LatexListHandler(this, "SUCCEEDING");
081         axiomHandler = new AxiomHandler(this);
082         initialPredicateDefinitionHandler = new InitialPredicateDefinitionHandler(this);
083         predicateDefinitionHandler = new PredicateDefinitionHandler(this);
084         functionDefinitionHandler = new FunctionDefinitionHandler(this);
085         initialFunctionDefinitionHandler = new InitialFunctionDefinitionHandler(this);
086         propositionHandler = new PropositionHandler(this);
087         ruleHandler = new RuleHandler(this);
088     }
089 
090     public final void init() {
091         node = null;
092     }
093 
094     /**
095      * Get node.
096      *
097      @return  Node.
098      */
099     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 namethrows 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 }