001: /*--
002: $Id: FontConverter.java,v 1.1 2004/03/01 07:55:59 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: package org.swixml.converters;
054:
055: import org.jdom.Attribute;
056: import org.swixml.Converter;
057: import org.swixml.Localizer;
058:
059: import java.awt.*;
060:
061: /**
062: * The FontConverter class defines / describes
063: *
064: * @author <a href="mailto:wolf@wolfpaulus.com">Wolf Paulus</a>
065: * @version $Revision: 1.1 $
066: * @since swixml 1.0
067: */
068: public class FontConverter implements Converter {
069: /**
070: * converter's return type
071: */
072: public static final Class TEMPLATE = Font.class;
073:
074: /**
075: * Convert the value of the given <code>Attribute</code> object into an output object of the
076: * specified type.
077: * Returns the <code>Font</code> that the <code>str</code>
078: * argument describes.
079: * To ensure that this method returns the desired Font,
080: * format the <code>str</code> parameter in
081: * one of two ways:
082: * <p/>
083: * "fontfamilyname-style-pointsize" or <br>
084: * "fontfamilyname style pointsize"<p>
085: * in which <i>style</i> is one of the three
086: * case-insensitive strings:
087: * <code>"BOLD"</code>, <code>"BOLDITALIC"</code>, or
088: * <code>"ITALIC"</code>, and pointsize is a decimal
089: * representation of the point size.
090: * For example, if you want a font that is Arial, bold, and
091: * a point size of 18, you would call this method with:
092: * "Arial-BOLD-18".
093: * <p/>
094: * The default size is 12 and the default style is PLAIN.
095: * If you don't specify a valid size, the returned
096: * <code>Font</code> has a size of 12. If you don't specify
097: * a valid style, the returned Font has a style of PLAIN.
098: * If you do not provide a valid font family name in
099: * the <code>str</code> argument, this method still returns
100: * a valid font with a family name of "dialog".
101: * To determine what font family names are available on
102: * your system, use the
103: * {@link GraphicsEnvironment#getAvailableFontFamilyNames()} method.
104: * If <code>str</code> is <code>null</code>, a new <code>Font</code>
105: * is returned with the family name "dialog", a size of 12 and a
106: * PLAIN style.
107: * If <code>str</code> is <code>null</code>,
108: * a new <code>Font</code> is returned with the name "dialog", a
109: * size of 12 and a PLAIN style.
110: *
111: * @param type <code>Class</code> Data type to which the Attribute's value should be converted
112: * @param attr <code>Attribute</code> the attribute, providing the value to be converted.
113: * @return the <code>Font</code> object that <code>str</code>
114: * describes, or a new default <code>Font</code> if
115: * <code>str</code> is <code>null</code>.
116: */
117: public Object convert(Class type, Attribute attr,
118: Localizer localizer) throws Exception {
119: return attr != null ? Font.decode(attr.getValue()) : null;
120: }
121:
122: /**
123: * A <code>Converters</code> conversTo method informs about the Class type the converter
124: * is returning when its <code>convert</code> method is called
125: *
126: * @return <code>Class</code> - the Class the converter is returning when its convert method is called
127: */
128: public Class convertsTo() {
129: return TEMPLATE;
130: }
131: }
|