EMMA Coverage Report (generated Fri Feb 14 08:28:31 UTC 2014)
[all classes][org.qedeq.kernel.xml.handler.parser]

COVERAGE SUMMARY FOR SOURCE FILE [ParserHandler.java]

nameclass, %method, %block, %line, %
ParserHandler.java100% (1/1)100% (7/7)85%  (266/314)81%  (52/64)

COVERAGE BREAKDOWN BY CLASS AND METHOD

nameclass, %method, %block, %line, %
     
class ParserHandler100% (1/1)100% (7/7)85%  (266/314)81%  (52/64)
setBasisAttributes (String, SimpleAttributes): void 100% (1/1)68%  (55/81)68%  (13/19)
startElement (String, SimpleAttributes): void 100% (1/1)86%  (119/138)82%  (23/28)
endElement (String): void 100% (1/1)90%  (27/30)86%  (6/7)
ParserHandler (SaxDefaultHandler): void 100% (1/1)100% (10/10)100% (3/3)
addOperator (int): void 100% (1/1)100% (48/48)100% (4/4)
getOperators (): List 100% (1/1)100% (3/3)100% (1/1)
init (): void 100% (1/1)100% (4/4)100% (2/2)

1/* This file is part of the project "Hilbert II" - 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 
16package org.qedeq.kernel.xml.handler.parser;
17 
18import java.util.ArrayList;
19import java.util.List;
20 
21import org.qedeq.kernel.bo.parser.Operator;
22import org.qedeq.kernel.xml.common.XmlSyntaxException;
23import org.qedeq.kernel.xml.handler.common.AbstractSimpleHandler;
24import org.qedeq.kernel.xml.handler.common.SaxDefaultHandler;
25import org.qedeq.kernel.xml.handler.common.SimpleAttributes;
26 
27 
28/**
29 * Parses list of operators. Result is a list of all parsed operators.
30 *
31 * @author  Michael Meyling
32 */
33public final class ParserHandler extends AbstractSimpleHandler {
34 
35    /** List of all Operators. */
36    private List operators = new ArrayList();
37 
38    /** Operator start symbol. */
39    private String startSymbol;
40 
41    /** QEDEQ representation. E.g. "PREDCON".  */
42    private String qedeq;
43 
44    /** QEDEQ argument. E.g. "equal". */
45    private String qedeqArgument;
46 
47    /** Operator priority. */
48    private Integer priority;
49 
50    /** Minimum argument number. */
51    private Integer min;
52 
53    /** Maximum argument number. */
54    private Integer max;
55 
56 
57    /**
58     * Handle a parser XML file.
59     *
60     * @param   defaultHandler  Startup handler.
61     */
62    public ParserHandler(final SaxDefaultHandler defaultHandler) {
63        super(defaultHandler, "parser");
64    }
65 
66    public final void init() {
67        operators.clear();
68    }
69 
70    /**
71     * Get list of operators.
72     *
73     * @return  Operator list.
74     */
75    public final List getOperators() {
76        return operators;
77    }
78 
79    public final void startElement(final String name, final SimpleAttributes attributes)
80            throws XmlSyntaxException {
81        if (getStartTag().equals(name)) {
82            // nothing todo
83        } else if ("prefixOperator".equals(name)) {
84            setBasisAttributes(name, attributes);
85            addOperator(Operator.SIMPLE_PREFIX);
86        } else if ("infixOperator".equals(name)) {
87            setBasisAttributes(name, attributes);
88            addOperator(Operator.INFIX);
89        } else if ("functionOperator".equals(name)) {
90            setBasisAttributes(name, attributes);
91            addOperator(Operator.FUNCTION);
92        } else if ("complexOperator".equals(name)) {
93            setBasisAttributes(name, attributes);
94            final String separatorSymbol = attributes.getString("separatorSymbol");
95            if (separatorSymbol == null) {
96                throw XmlSyntaxException.createEmptyAttributeException(name, "separatorSymbol");
97            }
98            if (separatorSymbol.length() == 0) {
99                throw XmlSyntaxException.createMissingAttributeException(name, "separatorSymbol");
100            }
101            final String endSymbol = attributes.getString("endSymbol");
102            if (endSymbol == null) {
103                throw XmlSyntaxException.createEmptyAttributeException(name, "endSymbol");
104            }
105            if (endSymbol.length() == 0) {
106                throw XmlSyntaxException.createMissingAttributeException(name, "endSymbol");
107            }
108            if (max == null) {
109                operators.add(new Operator(startSymbol, separatorSymbol, endSymbol, qedeq,
110                    qedeqArgument, priority.intValue(), min.intValue()));
111            } else {
112                operators.add(new Operator(startSymbol, separatorSymbol, endSymbol, qedeq,
113                    qedeqArgument, priority.intValue(), min.intValue(), max.intValue()));
114            }
115        } else {
116            throw XmlSyntaxException.createUnexpectedTagException(name);
117        }
118    }
119 
120    private void addOperator(final int type) {
121        if (max == null) {
122            operators.add(new Operator(startSymbol, qedeq, qedeqArgument, priority.intValue(),
123                type, min.intValue()));
124        } else {
125            operators.add(new Operator(startSymbol, qedeq, qedeqArgument, priority.intValue(),
126                type, min.intValue(), max.intValue()));
127        }
128    }
129 
130    private void setBasisAttributes(final String element, final SimpleAttributes attributes)
131            throws XmlSyntaxException {
132        startSymbol = attributes.getString("startSymbol");
133        if (startSymbol == null) {
134            throw XmlSyntaxException.createMissingAttributeException(element, "startSymbol");
135        }
136        if (startSymbol.length() == 0) {
137            throw XmlSyntaxException.createEmptyAttributeException(element, "startSymbol");
138        }
139        qedeq = attributes.getString("qedeq");
140        if (qedeq == null) {
141            throw XmlSyntaxException.createMissingAttributeException(element, "qedeq");
142        }
143        if (qedeq.length() == 0) {
144            throw XmlSyntaxException.createEmptyAttributeException(element, "qedeq");
145        }
146        qedeqArgument = attributes.getString("qedeqArgument");
147        priority = attributes.getInteger("priority");
148        if (priority == null || priority.intValue() < 0) {
149            throw XmlSyntaxException.createMissingAttributeException(element, "priority");
150        }
151        min = attributes.getInteger("min");
152        if (min == null) {
153            min = new Integer(0);
154        }
155        max = attributes.getInteger("max");
156    }
157 
158    public final void endElement(final String name) throws XmlSyntaxException {
159        if (getStartTag().equals(name)) {
160            // nothing to do
161        } else if ("prefixOperator".equals(name)) {
162            // nothing to do
163        } else if ("infixOperator".equals(name)) {
164            // nothing to do
165        } else if ("functionOperator".equals(name)) {
166            // nothing to do
167        } else if ("complexOperator".equals(name)) {
168            // nothing to do
169        } else {
170            throw XmlSyntaxException.createUnexpectedTagException(name);
171        }
172    }
173 
174}

[all classes][org.qedeq.kernel.xml.handler.parser]
EMMA 2.1.5320 (stable) (C) Vladimir Roubtsov