001    //$HeadURL: svn+ssh://rbezema@svn.wald.intevation.org/deegree/base/branches/2.2_testing/src/org/deegree/graphics/sld/TextSymbolizer.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 org.deegree.framework.xml.Marshallable;
047    
048    /**
049     * Used to render a text label, according to the parameters. A missing Geometry, Label, Font, or
050     * LabelPlacement element selects the default value or behavior for the element. The default Label,
051     * Font, and LabelPlacement are system- dependent. Multiple Font elements may be used to specify
052     * alternate fonts in order of preference in case a map server does not support the first
053     * preference. A missing Halo or Fill element means that no halo or fill will be plotted,
054     * respectively. The Fill is rendered over top of the Halo, and the Halo includes the interiors of
055     * the font glyphs.
056     * <p>
057     * 
058     * @author <a href="mailto:k.lupp@web.de">Katharina Lupp</a>
059     * @author <a href="mailto:mschneider@lat-lon.de">Markus Schneider</a>
060     * @version $Revision: 9340 $ $Date: 2007-12-27 13:32:12 +0100 (Do, 27 Dez 2007) $
061     */
062    
063    public class TextSymbolizer extends AbstractSymbolizer implements Marshallable {
064    
065        private Fill fill = null;
066    
067        private Font font = null;
068    
069        private Halo halo = null;
070    
071        private LabelPlacement labelPlacement = null;
072    
073        private ParameterValueType label = null;
074    
075        /**
076         * constructor initializing the class with the <TextSymbolizer>
077         */
078        TextSymbolizer( Geometry geometry, ParameterValueType label, Font font, LabelPlacement labelPlacement, Halo halo,
079                        Fill fill, double min, double max ) {
080            super( geometry, "org.deegree.graphics.displayelements.LabelDisplayElement" );
081            setLabel( label );
082            setFont( font );
083            setLabelPlacement( labelPlacement );
084            setHalo( halo );
085            setFill( fill );
086            setMinScaleDenominator( min );
087            setMaxScaleDenominator( max );
088        }
089    
090        /**
091         * constructor initializing the class with the <TextSymbolizer>
092         */
093        TextSymbolizer( Geometry geometry, String responsibleClass, ParameterValueType label, Font font,
094                        LabelPlacement labelPlacement, Halo halo, Fill fill, double min, double max ) {
095            super( geometry, responsibleClass );
096            setLabel( label );
097            setFont( font );
098            setLabelPlacement( labelPlacement );
099            setHalo( halo );
100            setFill( fill );
101            setMinScaleDenominator( min );
102            setMaxScaleDenominator( max );
103        }
104    
105        /**
106         * returns the Label as a <tt>ParameterValueType</tt> to be renderd
107         * 
108         * @return the label
109         * 
110         */
111        public ParameterValueType getLabel() {
112            return label;
113        }
114    
115        /**
116         * sets the <Label>
117         * 
118         * @param label
119         *            the label
120         * 
121         */
122        public void setLabel( ParameterValueType label ) {
123            this.label = label;
124        }
125    
126        /**
127         * Identifies a Font of a certain family, style, and size.
128         * 
129         * @return the font
130         * 
131         */
132        public Font getFont() {
133            return font;
134        }
135    
136        /**
137         * Sets a Font of a certain family, style, and size.
138         * 
139         * @param font
140         *            the font
141         * 
142         */
143        public void setFont( Font font ) {
144            this.font = font;
145        }
146    
147        /**
148         * Used to position a label relative to a point or a line string. For a point, you can specify
149         * the anchor point of the label and a linear displacement from the point (so that you can also
150         * plot a graphic symbol at the point). For a line-string placement, you can specify a
151         * perpendicular offset (so you can draw a stroke on the line).
152         * <p>
153         * </p>
154         * MORE PARAMETERS ARE PROBABLY NEEDED HERE.
155         * 
156         * @return the labelPlacement
157         * 
158         */
159        public LabelPlacement getLabelPlacement() {
160            return labelPlacement;
161        }
162    
163        /**
164         * sets the <LabelPlacement>
165         * 
166         * @param labelPlacement
167         *            the labelPlacement
168         * 
169         */
170        public void setLabelPlacement( LabelPlacement labelPlacement ) {
171            this.labelPlacement = labelPlacement;
172        }
173    
174        /**
175         * A Halo is an extension (sub-type) of a Fill and is applied to the backgrounds of font glyphs.
176         * Either a Radius or a Block halo type can be used. The radius is computed from the outside
177         * edge of the font glyph (or inside of "holes"). The default is a Radius of 1.0 (pixels) but if
178         * no Halo is selected in a containing structure, no halo will be rendered. The default is a
179         * solid white (Color "#FFFFFF") opaque halo.
180         * 
181         * @return the halo
182         * 
183         */
184        public Halo getHalo() {
185            return halo;
186        }
187    
188        /**
189         * sets <Halo>
190         * 
191         * @param halo
192         *            the halo
193         * 
194         */
195        public void setHalo( Halo halo ) {
196            this.halo = halo;
197        }
198    
199        /**
200         * A Fill allows area geometries to be filled. There are two types of fills: solid-color and
201         * repeated GraphicFill. In general, if a Fill element is omitted in its containing element, no
202         * fill will be rendered. The default is a solid 50%-gray (color "#808080") opaque fill.
203         * 
204         * @return the fill
205         * 
206         */
207        public Fill getFill() {
208            return fill;
209        }
210    
211        /**
212         * sets the <Fill>
213         * 
214         * @param fill
215         *            the fill
216         * 
217         */
218        public void setFill( Fill fill ) {
219            this.fill = fill;
220        }
221    
222        /**
223         * exports the content of the TextSymbolizer as XML formated String
224         * 
225         * @return xml representation of the TextSymbolizer
226         */
227        public String exportAsXML() {
228    
229            StringBuffer sb = new StringBuffer( 1000 );
230            sb.append( "<TextSymbolizer>" );
231            if ( geometry != null ) {
232                sb.append( ( (Marshallable) geometry ).exportAsXML() );
233            }
234            if ( label != null ) {
235                sb.append( "<Label>" );
236                sb.append( ( (Marshallable) label ).exportAsXML() );
237                sb.append( "</Label>" );
238            }
239            if ( font != null ) {
240                sb.append( ( (Marshallable) font ).exportAsXML() );
241            }
242            if ( labelPlacement != null ) {
243                sb.append( ( (Marshallable) labelPlacement ).exportAsXML() );
244            }
245            if ( halo != null ) {
246                sb.append( ( (Marshallable) halo ).exportAsXML() );
247            }
248            if ( fill != null ) {
249                sb.append( ( (Marshallable) fill ).exportAsXML() );
250            }
251            sb.append( "</TextSymbolizer>" );
252    
253            return sb.toString();
254        }
255    }