001 //$HeadURL: svn+ssh://jwilden@svn.wald.intevation.org/deegree/base/branches/2.5_testing/src/org/deegree/graphics/sld/TextSymbolizer.java $ 002 /*---------------------------------------------------------------------------- 003 This file is part of deegree, http://deegree.org/ 004 Copyright (C) 2001-2009 by: 005 Department of Geography, University of Bonn 006 and 007 lat/lon GmbH 008 009 This library is free software; you can redistribute it and/or modify it under 010 the terms of the GNU Lesser General Public License as published by the Free 011 Software Foundation; either version 2.1 of the License, or (at your option) 012 any later version. 013 This library is distributed in the hope that it will be useful, but WITHOUT 014 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 015 FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more 016 details. 017 You should have received a copy of the GNU Lesser General Public License 018 along with this library; if not, write to the Free Software Foundation, Inc., 019 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 020 021 Contact information: 022 023 lat/lon GmbH 024 Aennchenstr. 19, 53177 Bonn 025 Germany 026 http://lat-lon.de/ 027 028 Department of Geography, University of Bonn 029 Prof. Dr. Klaus Greve 030 Postfach 1147, 53001 Bonn 031 Germany 032 http://www.geographie.uni-bonn.de/deegree/ 033 034 e-mail: info@deegree.org 035 ----------------------------------------------------------------------------*/ 036 package org.deegree.graphics.sld; 037 038 import org.deegree.framework.xml.Marshallable; 039 import org.deegree.model.filterencoding.Expression; 040 041 /** 042 * Used to render a text label, according to the parameters. A missing Geometry, Label, Font, or 043 * LabelPlacement element selects the default value or behavior for the element. The default Label, 044 * Font, and LabelPlacement are system- dependent. Multiple Font elements may be used to specify 045 * alternate fonts in order of preference in case a map server does not support the first 046 * preference. A missing Halo or Fill element means that no halo or fill will be plotted, 047 * respectively. The Fill is rendered over top of the Halo, and the Halo includes the interiors of 048 * the font glyphs. 049 * <p> 050 * 051 * @author <a href="mailto:k.lupp@web.de">Katharina Lupp</a> 052 * @author <a href="mailto:mschneider@lat-lon.de">Markus Schneider</a> 053 * @version $Revision: 18405 $ $Date: 2009-07-09 10:31:42 +0200 (Do, 09 Jul 2009) $ 054 */ 055 056 public class TextSymbolizer extends AbstractSymbolizer implements Marshallable { 057 058 private Fill fill = null; 059 060 private Font font = null; 061 062 private Halo halo = null; 063 064 private LabelPlacement labelPlacement = null; 065 066 private ParameterValueType label = null; 067 068 private ParameterValueType[] bbox; 069 070 /** 071 * constructor initializing the class with the <code>TextSymbolizer</code> 072 * @param geometry 073 * @param label 074 * @param font 075 * @param labelPlacement 076 * @param halo 077 * @param fill 078 * @param min 079 * @param max 080 */ 081 TextSymbolizer( Geometry geometry, ParameterValueType label, Font font, LabelPlacement labelPlacement, Halo halo, 082 Fill fill, double min, double max ) { 083 super( geometry, "org.deegree.graphics.displayelements.LabelDisplayElement" ); 084 setLabel( label ); 085 setFont( font ); 086 setLabelPlacement( labelPlacement ); 087 setHalo( halo ); 088 setFill( fill ); 089 setMinScaleDenominator( min ); 090 setMaxScaleDenominator( max ); 091 } 092 093 /** 094 * constructor initializing the class with the <code>TextSymbolizer</code> 095 * @param geometry 096 * @param responsibleClass 097 * @param label 098 * @param font 099 * @param labelPlacement 100 * @param halo 101 * @param fill 102 * @param min 103 * @param max 104 */ 105 TextSymbolizer( Geometry geometry, String responsibleClass, ParameterValueType label, Font font, 106 LabelPlacement labelPlacement, Halo halo, Fill fill, double min, double max ) { 107 super( geometry, responsibleClass ); 108 setLabel( label ); 109 setFont( font ); 110 setLabelPlacement( labelPlacement ); 111 setHalo( halo ); 112 setFill( fill ); 113 setMinScaleDenominator( min ); 114 setMaxScaleDenominator( max ); 115 } 116 117 /** 118 * Initializing with bounding box. 119 * 120 * @param geometry 121 * @param text 122 * @param font 123 * @param halo 124 * @param minx 125 * @param miny 126 * @param maxx 127 * @param maxy 128 */ 129 public TextSymbolizer( Geometry geometry, ParameterValueType text, Font font, Halo halo, ParameterValueType minx, 130 ParameterValueType miny, ParameterValueType maxx, ParameterValueType maxy ) { 131 super( geometry, "org.deegree.graphics.displayelements.LabelDisplayElement" ); 132 setLabel( text ); 133 setFont( font ); 134 setHalo( halo ); 135 bbox = new ParameterValueType[] { minx, miny, maxx, maxy }; 136 setLabelPlacement( new LabelPlacement( (LinePlacement) null ) ); 137 } 138 139 /** 140 * @return the bounding box, or null, if not set (minx, miny, maxx, maxy) 141 */ 142 public ParameterValueType[] getBoundingBox() { 143 return bbox; 144 } 145 146 /** 147 * returns the Label as a <tt>ParameterValueType</tt> to be renderd 148 * 149 * @return the label 150 * 151 */ 152 public ParameterValueType getLabel() { 153 return label; 154 } 155 156 /** 157 * returns the label as a String to be renderd 158 * 159 * @return the label or null, if the label is not set or not an expression 160 * 161 */ 162 public String getLabelAsString() { 163 Object[] o = label.getComponents(); 164 for ( int i = 0; i < o.length; i++ ) { 165 if ( o[i] instanceof Expression ) { 166 return o[i].toString().trim(); 167 } 168 } 169 return null; 170 } 171 172 /** 173 * sets the <Label> 174 * 175 * @param label 176 * the label 177 * 178 */ 179 public void setLabel( ParameterValueType label ) { 180 this.label = label; 181 } 182 183 /** 184 * Identifies a Font of a certain family, style, and size. 185 * 186 * @return the font 187 * 188 */ 189 public Font getFont() { 190 return font; 191 } 192 193 /** 194 * Sets a Font of a certain family, style, and size. 195 * 196 * @param font 197 * the font 198 * 199 */ 200 public void setFont( Font font ) { 201 this.font = font; 202 } 203 204 /** 205 * Used to position a label relative to a point or a line string. For a point, you can specify 206 * the anchor point of the label and a linear displacement from the point (so that you can also 207 * plot a graphic symbol at the point). For a line-string placement, you can specify a 208 * perpendicular offset (so you can draw a stroke on the line). 209 * <p> 210 * </p> 211 * MORE PARAMETERS ARE PROBABLY NEEDED HERE. 212 * 213 * @return the labelPlacement 214 * 215 */ 216 public LabelPlacement getLabelPlacement() { 217 return labelPlacement; 218 } 219 220 /** 221 * sets the <LabelPlacement> 222 * 223 * @param labelPlacement 224 * the labelPlacement 225 * 226 */ 227 public void setLabelPlacement( LabelPlacement labelPlacement ) { 228 this.labelPlacement = labelPlacement; 229 } 230 231 /** 232 * A Halo is an extension (sub-type) of a Fill and is applied to the backgrounds of font glyphs. 233 * Either a Radius or a Block halo type can be used. The radius is computed from the outside 234 * edge of the font glyph (or inside of "holes"). The default is a Radius of 1.0 (pixels) but if 235 * no Halo is selected in a containing structure, no halo will be rendered. The default is a 236 * solid white (Color "#FFFFFF") opaque halo. 237 * 238 * @return the halo 239 * 240 */ 241 public Halo getHalo() { 242 return halo; 243 } 244 245 /** 246 * sets <Halo> 247 * 248 * @param halo 249 * the halo 250 * 251 */ 252 public void setHalo( Halo halo ) { 253 this.halo = halo; 254 } 255 256 /** 257 * A Fill allows area geometries to be filled. There are two types of fills: solid-color and 258 * repeated GraphicFill. In general, if a Fill element is omitted in its containing element, no 259 * fill will be rendered. The default is a solid 50%-gray (color "#808080") opaque fill. 260 * 261 * @return the fill 262 * 263 */ 264 public Fill getFill() { 265 return fill; 266 } 267 268 /** 269 * sets the <Fill> 270 * 271 * @param fill 272 * the fill 273 * 274 */ 275 public void setFill( Fill fill ) { 276 this.fill = fill; 277 } 278 279 /** 280 * exports the content of the TextSymbolizer as XML formated String 281 * 282 * @return xml representation of the TextSymbolizer 283 */ 284 public String exportAsXML() { 285 286 StringBuffer sb = new StringBuffer( 1000 ); 287 sb.append( "<TextSymbolizer>" ); 288 if ( geometry != null ) { 289 sb.append( ( (Marshallable) geometry ).exportAsXML() ); 290 } 291 if ( label != null ) { 292 sb.append( "<Label>" ); 293 sb.append( ( (Marshallable) label ).exportAsXML() ); 294 sb.append( "</Label>" ); 295 } 296 if ( font != null ) { 297 sb.append( ( (Marshallable) font ).exportAsXML() ); 298 } 299 if ( labelPlacement != null ) { 300 sb.append( ( (Marshallable) labelPlacement ).exportAsXML() ); 301 } 302 if ( halo != null ) { 303 sb.append( ( (Marshallable) halo ).exportAsXML() ); 304 } 305 if ( fill != null ) { 306 sb.append( ( (Marshallable) fill ).exportAsXML() ); 307 } 308 sb.append( "</TextSymbolizer>" ); 309 310 return sb.toString(); 311 } 312 }