Frames | No Frames |
1: /* ======================================================================== 2: * JCommon : a free general purpose class library for the Java(tm) platform 3: * ======================================================================== 4: * 5: * (C) Copyright 2000-2005, by Object Refinery Limited and Contributors. 6: * 7: * Project Info: http://www.jfree.org/jcommon/index.html 8: * 9: * This library is free software; you can redistribute it and/or modify it 10: * under the terms of the GNU Lesser General Public License as published by 11: * the Free Software Foundation; either version 2.1 of the License, or 12: * (at your option) any later version. 13: * 14: * This library is distributed in the hope that it will be useful, but 15: * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 16: * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public 17: * License for more details. 18: * 19: * You should have received a copy of the GNU Lesser General Public 20: * License along with this library; if not, write to the Free Software 21: * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, 22: * USA. 23: * 24: * [Java is a trademark or registered trademark of Sun Microsystems, Inc. 25: * in the United States and other countries.] 26: * 27: * -------------------------- 28: * RenderingHintsHandler.java 29: * -------------------------- 30: * (C)opyright 2003-2005, by Thomas Morgner and Contributors. 31: * 32: * Original Author: Thomas Morgner; 33: * Contributor(s): David Gilbert (for Object Refinery Limited); 34: * 35: * $Id: RenderingHintsWriteHandler.java,v 1.5 2005/10/18 13:35:21 mungady Exp $ 36: * 37: * Changes 38: * ------------------------- 39: * 22.11.2003 : Initial version 40: * 41: */ 42: 43: package org.jfree.xml.writer.coretypes; 44: 45: import java.awt.RenderingHints; 46: import java.io.IOException; 47: import java.lang.reflect.Field; 48: import java.lang.reflect.Modifier; 49: import java.util.Iterator; 50: 51: import org.jfree.util.Log; 52: import org.jfree.xml.writer.AbstractXmlWriteHandler; 53: import org.jfree.xml.writer.AttributeList; 54: import org.jfree.xml.writer.XMLWriter; 55: import org.jfree.xml.writer.XMLWriterException; 56: import org.jfree.xml.writer.XMLWriterSupport; 57: 58: /** 59: * A handler for writing a {@link RenderingHints} object. 60: */ 61: public class RenderingHintsWriteHandler extends AbstractXmlWriteHandler { 62: 63: /** 64: * Default constructor. 65: */ 66: public RenderingHintsWriteHandler() { 67: super(); 68: } 69: 70: /** 71: * Performs the writing of a single object. 72: * 73: * @param tagName the tag name. 74: * @param object the object. 75: * @param writer the writer. 76: * @param mPlexAttribute ??. 77: * @param mPlexValue ??. 78: * 79: * @throws IOException if there is an I/O error. 80: * @throws XMLWriterException if there is a writer problem. 81: */ 82: public void write(final String tagName, final Object object, final XMLWriter writer, 83: final String mPlexAttribute, final String mPlexValue) 84: throws IOException, XMLWriterException { 85: 86: writer.writeTag(tagName, mPlexAttribute, mPlexValue, XMLWriterSupport.OPEN); 87: writer.allowLineBreak(); 88: final RenderingHints hints = (RenderingHints) object; 89: final Iterator it = hints.keySet().iterator(); 90: while (it.hasNext()) { 91: final RenderingHints.Key key = (RenderingHints.Key) it.next(); 92: final String keyname = hintFieldToString(key); 93: final String value = hintFieldToString(hints.get(key)); 94: final AttributeList attribs = new AttributeList(); 95: attribs.setAttribute("key", keyname); 96: attribs.setAttribute("value", value); 97: writer.writeTag("entry", attribs, XMLWriterSupport.CLOSE); 98: writer.allowLineBreak(); 99: } 100: writer.writeCloseTag(tagName); 101: writer.allowLineBreak(); 102: } 103: 104: private String hintFieldToString(final Object o) { 105: final Field[] fields = RenderingHints.class.getFields(); 106: for (int i = 0; i < fields.length; i++) { 107: final Field f = fields[i]; 108: if (Modifier.isFinal(f.getModifiers()) 109: && Modifier.isPublic(f.getModifiers()) 110: && Modifier.isStatic(f.getModifiers())) { 111: try { 112: final Object value = f.get(null); 113: if (o.equals(value)) { 114: return f.getName(); 115: } 116: } 117: catch (Exception e) { 118: Log.info ("Unable to write RenderingHint", e); 119: } 120: } 121: } 122: throw new IllegalArgumentException("Invalid value given"); 123: } 124: 125: }