001: //$HeadURL: https://svn.wald.intevation.org/svn/deegree/base/trunk/src/org/deegree/graphics/sld/Fill.java $
002: /*---------------- FILE HEADER ------------------------------------------
003:
004: This file is part of deegree.
005: Copyright (C) 2001-2008 by:
006: EXSE, Department of Geography, University of Bonn
007: http://www.giub.uni-bonn.de/deegree/
008: lat/lon GmbH
009: http://www.lat-lon.de
010:
011: This library is free software; you can redistribute it and/or
012: modify it under the terms of the GNU Lesser General Public
013: License as published by the Free Software Foundation; either
014: version 2.1 of the License, or (at your option) any later version.
015:
016: This library is distributed in the hope that it will be useful,
017: but WITHOUT ANY WARRANTY; without even the implied warranty of
018: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
019: Lesser General Public License for more details.
020:
021: You should have received a copy of the GNU Lesser General Public
022: License along with this library; if not, write to the Free Software
023: Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
024:
025: Contact:
026:
027: Andreas Poth
028: lat/lon GmbH
029: Aennchenstr. 19
030: 53115 Bonn
031: Germany
032: E-Mail: poth@lat-lon.de
033:
034: Prof. Dr. Klaus Greve
035: Department of Geography
036: University of Bonn
037: Meckenheimer Allee 166
038: 53115 Bonn
039: Germany
040: E-Mail: greve@giub.uni-bonn.de
041:
042:
043: ---------------------------------------------------------------------------*/
044: package org.deegree.graphics.sld;
045:
046: import java.awt.Color;
047: import java.util.HashMap;
048: import java.util.Iterator;
049:
050: import org.deegree.framework.util.ColorUtils;
051: import org.deegree.framework.xml.Marshallable;
052: import org.deegree.model.feature.Feature;
053: import org.deegree.model.filterencoding.FilterEvaluationException;
054:
055: /**
056: * A Fill allows area geometries to be filled. There are two types of fills: solid-color and
057: * repeated GraphicFill. In general, if a Fill element is omitted in its containing element, no fill
058: * will be rendered. The default is a solid 50%-gray (color "#808080") opaque fill.
059: * <p>
060: *
061: * @author <a href="mailto:k.lupp@web.de">Katharina Lupp </a>
062: * @author <a href="mailto:mschneider@lat-lon.de">Markus Schneider </a>
063: * @version $Revision: 9340 $ $Date: 2007-12-27 04:32:12 -0800 (Thu, 27 Dec 2007) $
064: */
065: public class Fill extends Drawing implements Marshallable {
066:
067: // default values
068: public static final Color FILL_DEFAULT = Color.decode("#808080");
069:
070: public static final double OPACITY_DEFAULT = 1.0;
071:
072: /**
073: * Constructs a new <tt>Fill</tt>.
074: */
075: protected Fill() {
076: super (new HashMap<String, Object>(), null);
077: }
078:
079: /**
080: * Constructs a new <tt>Fill</tt>.
081: */
082: protected Fill(HashMap<String, Object> cssParams,
083: GraphicFill graphicFill) {
084: super (cssParams, graphicFill);
085: }
086:
087: /**
088: * Returns the (evaluated) value of the fill's CssParameter 'fill'.
089: * <p>
090: *
091: * @param feature
092: * specifies the <tt>Feature</tt> to be used for evaluation of the underlying
093: * 'sld:ParameterValueType'
094: * @return the (evaluated) value of the parameter
095: * @throws FilterEvaluationException
096: * if the evaluation fails or the value is invalid
097: */
098: public Color getFill(Feature feature)
099: throws FilterEvaluationException {
100: Color awtColor = FILL_DEFAULT;
101:
102: CssParameter cssParam = (CssParameter) cssParams.get("fill");
103:
104: if (cssParam != null) {
105: String s = cssParam.getValue(feature);
106:
107: try {
108: awtColor = Color.decode(s);
109: } catch (NumberFormatException e) {
110: throw new FilterEvaluationException("Given value ('"
111: + s + "') for CSS-Parameter 'fill' "
112: + "does not denote a valid color!");
113: }
114: }
115:
116: return awtColor;
117: }
118:
119: /**
120: * sets the value of the fill's CssParameter 'fill' as a simple color
121: *
122: * @param color
123: * color to be set
124: */
125: public void setFill(Color color) {
126:
127: String hex = ColorUtils.toHexCode("#", color);
128: CssParameter fill = StyleFactory
129: .createCssParameter("fill", hex);
130:
131: cssParams.put("fill", fill);
132: }
133:
134: /**
135: * Returns the (evaluated) value of the fill's CssParameter 'fill-opacity'.
136: * <p>
137: *
138: * @param feature
139: * specifies the <tt>Feature</tt> to be used for evaluation of the underlying
140: * 'sld:ParameterValueType'
141: * @return the (evaluated) value of the parameter
142: * @throws FilterEvaluationException
143: * if the evaluation fails or the value is invalid
144: */
145: public double getOpacity(Feature feature)
146: throws FilterEvaluationException {
147: double opacity = OPACITY_DEFAULT;
148:
149: CssParameter cssParam = (CssParameter) cssParams
150: .get("fill-opacity");
151:
152: if (cssParam != null) {
153: String value = cssParam.getValue(feature);
154:
155: try {
156: opacity = Double.parseDouble(value);
157: } catch (NumberFormatException e) {
158: throw new FilterEvaluationException(
159: "Given value for parameter 'fill-opacity' ('"
160: + value + "') has invalid format!");
161: }
162:
163: if ((opacity < 0.0) || (opacity > 1.0)) {
164: throw new FilterEvaluationException(
165: "Value for parameter 'fill-opacity' (given: '"
166: + value
167: + "') must be between 0.0 and 1.0!");
168: }
169: }
170:
171: return opacity;
172: }
173:
174: /**
175: * sets the value of the opacity's CssParameter 'opacity' as a value. Valid values ranges from 0 ..
176: * 1. If a value < 0 is passed it will be set to 0. If a value > 1 is passed it will be set to
177: * 1.
178: *
179: * @param opacity
180: * opacity to be set
181: */
182: public void setOpacity(double opacity) {
183:
184: if (opacity > 1) {
185: opacity = 1;
186: } else if (opacity < 0) {
187: opacity = 0;
188: }
189:
190: CssParameter fillOp = StyleFactory.createCssParameter(
191: "fill-opacity", "" + opacity);
192: cssParams.put("fill-opacity", fillOp);
193: }
194:
195: /**
196: * exports the content of the CssParameter as XML formated String
197: *
198: * @return xml representation of the CssParameter
199: */
200: public String exportAsXML() {
201:
202: StringBuffer sb = new StringBuffer("<Fill>");
203:
204: if (graphicFill != null) {
205: sb.append(((Marshallable) graphicFill).exportAsXML());
206: }
207: Iterator iterator = cssParams.values().iterator();
208: while (iterator.hasNext()) {
209: sb.append(((Marshallable) iterator.next()).exportAsXML());
210: }
211:
212: sb.append("</Fill>");
213:
214: return sb.toString();
215: }
216:
217: }
|