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 name) throws 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 }
|