NodeHandler.java
001 /* This file is part of the project "Hilbert II" - http://www.qedeq.org
002  *
003  * Copyright 2000-2013,  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 proposition. */
058     private final PropositionHandler propositionHandler;
059 
060     /** Handler for a rule. */
061     private final RuleHandler ruleHandler;
062 
063     /** Node value object. */
064     private NodeVo node;
065 
066 
067     /**
068      * Constructor.
069      *
070      @param   handler Parent handler.
071      */
072     public NodeHandler(final AbstractSimpleHandler handler) {
073         super(handler, "NODE");
074         nameHandler = new LatexListHandler(this, "NAME");
075         titleHandler = new LatexListHandler(this, "TITLE");
076         precedingHandler = new LatexListHandler(this, "PRECEDING");
077         succeedingHandler = new LatexListHandler(this, "SUCCEEDING");
078         axiomHandler = new AxiomHandler(this);
079         initialPredicateDefinitionHandler = new InitialPredicateDefinitionHandler(this);
080         predicateDefinitionHandler = new PredicateDefinitionHandler(this);
081         functionDefinitionHandler = new FunctionDefinitionHandler(this);
082         propositionHandler = new PropositionHandler(this);
083         ruleHandler = new RuleHandler(this);
084     }
085 
086     public final void init() {
087         node = null;
088     }
089 
090     /**
091      * Get node.
092      *
093      @return  Node.
094      */
095     public final Node getNode() {
096         return node;
097     }
098 
099     public final void startElement(final String name, final SimpleAttributes attributes)
100             throws XmlSyntaxException {
101         if (getStartTag().equals(name)) {
102             node = new NodeVo();
103             node.setId(attributes.getString("id"));
104             node.setLevel(attributes.getString("level"));
105         else if (nameHandler.getStartTag().equals(name)) {
106             changeHandler(nameHandler, name, attributes);
107         else if (titleHandler.getStartTag().equals(name)) {
108             changeHandler(titleHandler, name, attributes);
109         else if (precedingHandler.getStartTag().equals(name)) {
110             changeHandler(precedingHandler, name, attributes);
111         else if (succeedingHandler.getStartTag().equals(name)) {
112             changeHandler(succeedingHandler, name, attributes);
113         else if (axiomHandler.getStartTag().equals(name)) {
114             changeHandler(axiomHandler, name, attributes);
115         else if (initialPredicateDefinitionHandler.getStartTag().equals(name)) {
116             changeHandler(initialPredicateDefinitionHandler, name, attributes);
117         else if (predicateDefinitionHandler.getStartTag().equals(name)) {
118             changeHandler(predicateDefinitionHandler, name, attributes);
119         else if (functionDefinitionHandler.getStartTag().equals(name)) {
120             changeHandler(functionDefinitionHandler, name, attributes);
121         else if (propositionHandler.getStartTag().equals(name)) {
122             changeHandler(propositionHandler, name, attributes);
123         else if (ruleHandler.getStartTag().equals(name)) {
124             changeHandler(ruleHandler, name, attributes);
125         else {
126             throw XmlSyntaxException.createUnexpectedTagException(name);
127         }
128     }
129 
130     public void endElement(final String namethrows XmlSyntaxException {
131         if (getStartTag().equals(name)) {
132             // thats why we handle it
133         else if (nameHandler.getStartTag().equals(name)) {
134             node.setName(nameHandler.getLatexList());
135         else if (titleHandler.getStartTag().equals(name)) {
136             node.setTitle(titleHandler.getLatexList());
137         else if (precedingHandler.getStartTag().equals(name)) {
138             node.setPrecedingText(precedingHandler.getLatexList());
139         else if (succeedingHandler.getStartTag().equals(name)) {
140             node.setSucceedingText(succeedingHandler.getLatexList());
141         else if (axiomHandler.getStartTag().equals(name)) {
142             node.setNodeType(axiomHandler.getAxiom());
143         else if (initialPredicateDefinitionHandler.getStartTag().equals(name)) {
144             node.setNodeType(initialPredicateDefinitionHandler.getInitialDefinition());
145         else if (predicateDefinitionHandler.getStartTag().equals(name)) {
146             node.setNodeType(predicateDefinitionHandler.getDefinition());
147         else if (functionDefinitionHandler.getStartTag().equals(name)) {
148             node.setNodeType(functionDefinitionHandler.getDefinition());
149         else if (propositionHandler.getStartTag().equals(name)) {
150             node.setNodeType(propositionHandler.getProposition());
151         else if (ruleHandler.getStartTag().equals(name)) {
152             node.setNodeType(ruleHandler.getRule());
153         else {
154             throw XmlSyntaxException.createUnexpectedTagException(name);
155        }
156     }
157 
158 }