001: /* ========================================================================
002: * JCommon : a free general purpose class 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/jcommon/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: * RenderingHintValueReadHandler.java
029: * ----------------------------------
030: * (C)opyright 2003, by Thomas Morgner and Contributors.
031: *
032: * Original Author: Thomas Morgner;
033: * Contributor(s): David Gilbert (for Object Refinery Limited);
034: *
035: * $Id: RenderingHintValueReadHandler.java,v 1.3 2005/10/18 13:33:32 mungady Exp $
036: *
037: * Changes
038: * -------
039: * 03-Dec-2003 : Initial version
040: * 11-Feb-2004 : Added missing Javadocs (DG);
041: *
042: */
043:
044: package org.jfree.xml.parser.coretypes;
045:
046: import java.awt.RenderingHints;
047: import java.lang.reflect.Field;
048: import java.lang.reflect.Modifier;
049:
050: import org.jfree.util.Log;
051: import org.jfree.xml.parser.AbstractXmlReadHandler;
052: import org.jfree.xml.parser.XmlReaderException;
053: import org.xml.sax.Attributes;
054: import org.xml.sax.SAXException;
055:
056: /**
057: * A read handler for a rendering hint value.
058: */
059: public class RenderingHintValueReadHandler extends
060: AbstractXmlReadHandler {
061:
062: /** The key under construction. */
063: private Object key;
064:
065: /** The value under construction. */
066: private Object value;
067:
068: /**
069: * Creates a new read handler.
070: */
071: public RenderingHintValueReadHandler() {
072: super ();
073: }
074:
075: /**
076: * Starts parsing.
077: *
078: * @param attrs the attributes.
079: *
080: * @throws SAXException if there is a parsing error.
081: */
082: protected void startParsing(final Attributes attrs)
083: throws SAXException {
084: final String keyText = attrs.getValue("key");
085: final String valueText = attrs.getValue("value");
086: this .key = stringToHintField(keyText);
087: this .value = stringToHintField(valueText);
088: }
089:
090: private Object stringToHintField(final String name) {
091: final Field[] fields = RenderingHints.class.getFields();
092: for (int i = 0; i < fields.length; i++) {
093: final Field f = fields[i];
094: if (Modifier.isFinal(f.getModifiers())
095: && Modifier.isPublic(f.getModifiers())
096: && Modifier.isStatic(f.getModifiers())) {
097: try {
098: final String fieldName = f.getName();
099: if (fieldName.equals(name)) {
100: return f.get(null);
101: }
102: } catch (Exception e) {
103: Log.info("Unable to write RenderingHint", e);
104: }
105: }
106: }
107: throw new IllegalArgumentException("Invalid value given");
108: }
109:
110: /**
111: * Returns the object for this element.
112: *
113: * @return the object.
114: *
115: * @throws XmlReaderException if there is a parsing error.
116: */
117: public Object getObject() throws XmlReaderException {
118: return new Object[] { this .key, this .value };
119: }
120:
121: /**
122: * Returns the key.
123: *
124: * @return the key.
125: */
126: public Object getKey() {
127: return this .key;
128: }
129:
130: /**
131: * Returns the value.
132: *
133: * @return the value.
134: */
135: public Object getValue() {
136: return this.value;
137: }
138:
139: }
|