001: /*--
002: $Id: ColorConverter.java,v 1.1 2004/03/01 07:55:58 wolfpaulus Exp $
003:
004: Copyright (C) 2003-2007 Wolf Paulus.
005: All rights reserved.
006:
007: Redistribution and use in source and binary forms, with or without
008: modification, are permitted provided that the following conditions
009: are met:
010:
011: 1. Redistributions of source code must retain the above copyright
012: notice, this list of conditions, and the following disclaimer.
013:
014: 2. Redistributions in binary form must reproduce the above copyright
015: notice, this list of conditions, and the disclaimer that follows
016: these conditions in the documentation and/or other materials provided
017: with the distribution.
018:
019: 3. The end-user documentation included with the redistribution,
020: if any, must include the following acknowledgment:
021: "This product includes software developed by the
022: SWIXML Project (http://www.swixml.org/)."
023: Alternately, this acknowledgment may appear in the software itself,
024: if and wherever such third-party acknowledgments normally appear.
025:
026: 4. The name "Swixml" must not be used to endorse or promote products
027: derived from this software without prior written permission. For
028: written permission, please contact <info_AT_swixml_DOT_org>
029:
030: 5. Products derived from this software may not be called "Swixml",
031: nor may "Swixml" appear in their name, without prior written
032: permission from the Swixml Project Management.
033:
034: THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
035: WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
036: OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
037: DISCLAIMED. IN NO EVENT SHALL THE SWIXML PROJECT OR ITS
038: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
039: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
040: LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
041: USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
042: ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
043: OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
044: OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
045: SUCH DAMAGE.
046: ====================================================================
047:
048: This software consists of voluntary contributions made by many
049: individuals on behalf of the Swixml Project and was originally
050: created by Wolf Paulus <wolf_AT_swixml_DOT_org>. For more information
051: on the Swixml Project, please see <http://www.swixml.org/>.
052: */
053:
054: package org.swixml.converters;
055:
056: import org.jdom.Attribute;
057: import org.swixml.Converter;
058: import org.swixml.Localizer;
059: import org.swixml.SwingEngine;
060:
061: import java.awt.*;
062: import java.lang.reflect.Field;
063: import java.lang.reflect.Modifier;
064: import java.util.StringTokenizer;
065:
066: /**
067: * The ColorConverter class defines a Converter that turns the Strings into a Color object
068: *
069: * @author <a href="mailto:wolf@paulus.com">Wolf Paulus</a>
070: * @version $Revision: 1.1 $
071: *
072: * @see java.awt.Color
073:
074: *
075: * <h3>Examples for Valid XML attribute notations:</h3>
076: * <pre><b>The following example show valid xml attributes to create Color objects:</b><br>
077: * <ul>
078: * <li>background="3399CC"</li>
079: * <li>background="red"</li>
080: * <li>foreground="991144"</li>
081: * </ul>
082: * </pre>
083: */
084: public class ColorConverter implements Converter {
085: /** converter's return type */
086: public static final Class TEMPLATE = Color.class;
087:
088: /**
089: * Returns a <code>java.awt.Color</code> runtime object
090: * @param type <code>Class</code> not used
091: * @param attr <code>Attribute</code> value needs to provide a String
092: * @return runtime type is subclass of <code>java.awt.Color</code>
093: */
094: public Object convert(final Class type, final Attribute attr,
095: Localizer localizer) {
096: return ColorConverter.conv(type, attr);
097: }
098:
099: /**
100: * Returns a <code>java.awt.Color</code> runtime object
101: * @param type <code>Class</code> not used
102: * @param attr <code>Attribute</code> value needs to provide a String
103: * @return runtime type is subclass of <code>java.awt.Color</code>
104: */
105: public static Object conv(final Class type, final Attribute attr) {
106: if (attr != null) {
107: try {
108: Field field = Color.class.getField(attr.getValue());
109: if (Color.class.equals(field.getType())
110: && Modifier.isStatic(field.getModifiers()))
111: return field.get(Color.class);
112: } catch (NoSuchFieldException e) {
113: } catch (SecurityException e) {
114: } catch (IllegalAccessException e) {
115: }
116: StringTokenizer st = new StringTokenizer(attr.getValue(),
117: ",");
118: if (1 == st.countTokens()) {
119: try {
120: return new Color(Integer.parseInt(st.nextToken()
121: .trim(), 16));
122: } catch (NumberFormatException e) {
123: if (SwingEngine.DEBUG_MODE)
124: System.err.println(e);
125: return null;
126: }
127: }
128: int[] para = Util.ia(st);
129: if (4 <= para.length)
130: return new Color(para[0], para[1], para[2], para[3]);
131: if (3 <= para.length)
132: return new Color(para[0], para[1], para[2]);
133: if (1 <= para.length)
134: return new Color(para[0]);
135: }
136: return null;
137: }
138:
139: /**
140: * A <code>Converters</code> conversTo method informs about the Class type the converter
141: * is returning when its <code>convert</code> method is called
142: * @return <code>Class</code> - the Class the converter is returning when its convert method is called
143: */
144: public Class convertsTo() {
145: return TEMPLATE;
146: }
147:
148: }
|