001 /* ===========================================================
002 * JFreeChart : a free chart library for the Java(tm) platform
003 * ===========================================================
004 *
005 * (C) Copyright 2000-2005, by Object Refinery Limited and Contributors.
006 *
007 * Project Info: http://www.jfree.org/jfreechart/index.html
008 *
009 * This library is free software; you can redistribute it and/or modify it
010 * under the terms of the GNU Lesser General Public License as published by
011 * the Free Software Foundation; either version 2.1 of the License, or
012 * (at your option) any later version.
013 *
014 * This library is distributed in the hope that it will be useful, but
015 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
016 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
017 * License for more details.
018 *
019 * You should have received a copy of the GNU Lesser General Public
020 * License along with this library; if not, write to the Free Software
021 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
022 * USA.
023 *
024 * [Java is a trademark or registered trademark of Sun Microsystems, Inc.
025 * in the United States and other countries.]
026 *
027 * ----------------
028 * ItemHandler.java
029 * ----------------
030 * (C) Copyright 2003-2005, by Object Refinery Limited and Contributors.
031 *
032 * Original Author: David Gilbert (for Object Refinery Limited);
033 * Contributor(s): -;
034 *
035 * $Id: ItemHandler.java,v 1.3.2.1 2005/10/25 21:36:10 mungady Exp $
036 *
037 * Changes (from 21-Jun-2001)
038 * --------------------------
039 * 23-Jan-2003 : Version 1 (DG);
040 *
041 */
042
043 package org.jfree.data.xml;
044
045 import org.xml.sax.Attributes;
046 import org.xml.sax.SAXException;
047 import org.xml.sax.helpers.DefaultHandler;
048
049 /**
050 * A handler for reading key-value items.
051 */
052 public class ItemHandler extends DefaultHandler implements DatasetTags {
053
054 /** The root handler. */
055 private RootHandler root;
056
057 /** The parent handler (can be the same as root, but not always). */
058 private DefaultHandler parent;
059
060 /** The key. */
061 private Comparable key;
062
063 /** The value. */
064 private Number value;
065
066 /**
067 * Creates a new item handler.
068 *
069 * @param root the root handler.
070 * @param parent the parent handler.
071 */
072 public ItemHandler(RootHandler root, DefaultHandler parent) {
073 this.root = root;
074 this.parent = parent;
075 this.key = null;
076 this.value = null;
077 }
078
079 /**
080 * Returns the key that has been read by the handler, or <code>null</code>.
081 *
082 * @return The key.
083 */
084 public Comparable getKey() {
085 return this.key;
086 }
087
088 /**
089 * Sets the key.
090 *
091 * @param key the key.
092 */
093 public void setKey(Comparable key) {
094 this.key = key;
095 }
096
097 /**
098 * Returns the key that has been read by the handler, or <code>null</code>.
099 *
100 * @return The value.
101 */
102 public Number getValue() {
103 return this.value;
104 }
105
106 /**
107 * Sets the value.
108 *
109 * @param value the value.
110 */
111 public void setValue(Number value) {
112 this.value = value;
113 }
114
115 /**
116 * The start of an element.
117 *
118 * @param namespaceURI the namespace.
119 * @param localName the element name.
120 * @param qName the element name.
121 * @param atts the attributes.
122 *
123 * @throws SAXException for errors.
124 */
125 public void startElement(String namespaceURI,
126 String localName,
127 String qName,
128 Attributes atts) throws SAXException {
129
130 if (qName.equals(ITEM_TAG)) {
131 KeyHandler subhandler = new KeyHandler(this.root, this);
132 this.root.pushSubHandler(subhandler);
133 }
134 else if (qName.equals(VALUE_TAG)) {
135 ValueHandler subhandler = new ValueHandler(this.root, this);
136 this.root.pushSubHandler(subhandler);
137 }
138 else {
139 throw new SAXException(
140 "Expected <Item> or <Value>...found " + qName
141 );
142 }
143
144 }
145
146 /**
147 * The end of an element.
148 *
149 * @param namespaceURI the namespace.
150 * @param localName the element name.
151 * @param qName the element name.
152 */
153 public void endElement(String namespaceURI,
154 String localName,
155 String qName) {
156
157 if (this.parent instanceof PieDatasetHandler) {
158 PieDatasetHandler handler = (PieDatasetHandler) this.parent;
159 handler.addItem(this.key, this.value);
160 this.root.popSubHandler();
161 }
162 else if (this.parent instanceof CategorySeriesHandler) {
163 CategorySeriesHandler handler = (CategorySeriesHandler) this.parent;
164 handler.addItem(this.key, this.value);
165 this.root.popSubHandler();
166 }
167
168 }
169
170 }