001: /*
002:
003: ============================================================================
004: The Apache Software License, Version 1.1
005: ============================================================================
006:
007: Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved.
008:
009: Redistribution and use in source and binary forms, with or without modifica-
010: tion, are permitted provided that the following conditions are met:
011:
012: 1. Redistributions of source code must retain the above copyright notice,
013: this list of conditions and the following disclaimer.
014:
015: 2. Redistributions in binary form must reproduce the above copyright notice,
016: this list of conditions and the following disclaimer in the documentation
017: and/or other materials provided with the distribution.
018:
019: 3. The end-user documentation included with the redistribution, if any, must
020: include the following acknowledgment: "This product includes software
021: developed by the Apache Software Foundation (http://www.apache.org/)."
022: Alternately, this acknowledgment may appear in the software itself, if
023: and wherever such third-party acknowledgments normally appear.
024:
025: 4. The names "Batik" and "Apache Software Foundation" must not be
026: used to endorse or promote products derived from this software without
027: prior written permission. For written permission, please contact
028: apache@apache.org.
029:
030: 5. Products derived from this software may not be called "Apache", nor may
031: "Apache" appear in their name, without prior written permission of the
032: Apache Software Foundation.
033:
034: THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
035: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
036: FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
037: APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
038: INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU-
039: DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
040: OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
041: ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
042: (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
043: THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
044:
045: This software consists of voluntary contributions made by many individuals
046: on behalf of the Apache Software Foundation. For more information on the
047: Apache Software Foundation, please see <http://www.apache.org/>.
048:
049: */
050:
051: package org.apache.batik.css.engine.value;
052:
053: import org.w3c.dom.DOMException;
054: import org.w3c.dom.css.CSSPrimitiveValue;
055:
056: /**
057: * This class represents float values.
058: *
059: * @author <a href="mailto:stephane@hillion.org">Stephane Hillion</a>
060: * @version $Id$
061: */
062: public class FloatValue extends AbstractValue {
063:
064: /**
065: * Returns the CSS text associated with the given type/value pair.
066: */
067: public static String getCssText(short unit, float value) {
068: if (unit < 0 || unit >= UNITS.length) {
069: throw new DOMException(DOMException.SYNTAX_ERR, "");
070: }
071: String s = String.valueOf(value);
072: if (s.endsWith(".0")) {
073: s = s.substring(0, s.length() - 2);
074: }
075: return s + UNITS[unit - CSSPrimitiveValue.CSS_NUMBER];
076: }
077:
078: /**
079: * The unit types representations
080: */
081: protected final static String[] UNITS = { "", "%", "em", "ex",
082: "px", "cm", "mm", "in", "pt", "pc", "deg", "rad", "grad",
083: "ms", "s", "Hz", "kHz", "" };
084:
085: /**
086: * The float value
087: */
088: protected float floatValue;
089:
090: /**
091: * The unit type
092: */
093: protected short unitType;
094:
095: /**
096: * Creates a new value.
097: */
098: public FloatValue(short unitType, float floatValue) {
099: this .unitType = unitType;
100: this .floatValue = floatValue;
101: }
102:
103: /**
104: * The type of the value.
105: */
106: public short getPrimitiveType() {
107: return unitType;
108: }
109:
110: /**
111: * Returns the float value.
112: */
113: public float getFloatValue() {
114: return floatValue;
115: }
116:
117: /**
118: * A string representation of the current value.
119: */
120: public String getCssText() {
121: return getCssText(unitType, floatValue);
122: }
123:
124: /**
125: * Returns a printable representation of this value.
126: */
127: public String toString() {
128: return getCssText();
129: }
130:
131: // BEGIN RAVE MODIFICATIONS
132: // Why is this missing for FloatValue? It's done for StringValue.
133: // Check other Value implementations too!
134: public boolean equals(Object obj) {
135: if (obj == null || !(obj instanceof FloatValue)) {
136: return false;
137: }
138: FloatValue v = (FloatValue) obj;
139: if (unitType != v.unitType) {
140: return false;
141: }
142: return floatValue == v.floatValue;
143: }
144: // END RAVE MODIFICATIONS
145: }
|