001 //$HeadURL: http://svn.wald.intevation.org/svn/deegree/base/trunk/src/org/deegree/graphics/sld/StyledLayerDescriptor.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 java.util.ArrayList;
039 import java.util.List;
040
041 import org.deegree.framework.xml.Marshallable;
042
043 /**
044 * StyledLayerDescriptor: This is a sequence of styled layers, represented at the first level by
045 * Layer and UserLayer elements. A "version" attribute has been added to allow the formatting of
046 * static-file
047 *
048 * @author <a href="mailto:k.lupp@web.de">Katharina Lupp</a>
049 * @author last edited by: $Author: mschneider $
050 * @version $Revision: 18195 $ $Date: 2009-06-18 17:55:39 +0200 (Thu, 18 Jun 2009) $
051 */
052 public class StyledLayerDescriptor implements Marshallable {
053 private List<AbstractLayer> layers = null;
054
055 private String version = null;
056
057 private String abstract_ = null;
058
059 private String name = null;
060
061 private String title = null;
062
063 /**
064 * @param name
065 * @param title
066 * @param version
067 * @param abstract_
068 * @param layers
069 */
070 StyledLayerDescriptor( String name, String title, String version, String abstract_, AbstractLayer[] layers ) {
071 this.layers = new ArrayList<AbstractLayer>( layers.length );
072 setLayers( layers );
073 setVersion( version );
074 setAbstract( abstract_ );
075 setName( name );
076 setTitle( title );
077 }
078
079 /**
080 * constructor initializing the class with the <StyledLayerDescriptor>
081 * @param layers
082 * @param version
083 */
084 public StyledLayerDescriptor( AbstractLayer[] layers, String version ) {
085 this.layers = new ArrayList<AbstractLayer>( layers.length );
086 setLayers( layers );
087 setVersion( version );
088 }
089
090 /**
091 * @return the Layers as Array
092 */
093 public AbstractLayer[] getLayers() {
094 return layers.toArray( new AbstractLayer[layers.size()] );
095 }
096
097 /**
098 * Sets Layers
099 *
100 * @param layers
101 * the Layers as Array
102 */
103 public void setLayers( AbstractLayer[] layers ) {
104 this.layers.clear();
105
106 if ( layers != null ) {
107 for ( int i = 0; i < layers.length; i++ ) {
108 this.layers.add( layers[i] );
109 }
110 }
111 }
112
113 /**
114 * adds the <Layer>
115 *
116 * @param layer
117 * a Layer to add
118 */
119 public void addLayer( AbstractLayer layer ) {
120 layers.add( layer );
121 }
122
123 /**
124 * removes the <Layer>
125 *
126 * @param layer
127 * a Layer to remove
128 */
129 public void removeLayer( AbstractLayer layer ) {
130 if ( layers.indexOf( layer ) != -1 ) {
131 layers.remove( layers.indexOf( layer ) );
132 }
133 }
134
135 /**
136 * A UserLayer can contain one or more UserStyles. A UserLayer may direct the WMS to a specified
137 * WFS source of feature data. Multiple feature types can be included in a UserLayer, since this
138 * is semantically equivalent to a Layer. All feature types of a UserLayer come from the same
139 * WFS. The WFS can be named explicitly with the "wfs" attribute or it can be implied by
140 * context.
141 *
142 * @return the UserLayers as Array
143 */
144 public UserLayer[] getUserLayers() {
145 List<UserLayer> list = new ArrayList<UserLayer>( layers.size() );
146 for ( int i = 0; i < layers.size(); i++ ) {
147 if ( layers.get( i ) instanceof UserLayer ) {
148 list.add( (UserLayer) layers.get( i ) );
149 }
150 }
151 return list.toArray( new UserLayer[list.size()] );
152 }
153
154 /**
155 * A NamedLayer uses the "name" attribute to identify a layer known to the WMS and can contain
156 * zero or more styles, either NamedStyles or UserStyles. In the absence of any styles the
157 * default style for the layer is used.
158 *
159 * @return the NamedLayers as Array
160 */
161 public NamedLayer[] getNamedLayers() {
162 List<NamedLayer> list = new ArrayList<NamedLayer>( layers.size() );
163 for ( int i = 0; i < layers.size(); i++ ) {
164 if ( layers.get( i ) instanceof NamedLayer ) {
165 list.add( (NamedLayer) layers.get( i ) );
166 }
167 }
168 return list.toArray( new NamedLayer[list.size()] );
169 }
170
171 /**
172 * The version attribute gives the SLD version of an SLD document, to facilitate backward
173 * compatibility with static documents stored in various different versions of the SLD spec. The
174 * string has the format x.y.z, the same as in other OpenGIS Web Server specs. For example, an
175 * SLD document stored according to this spec would have the version string 0.7.2.
176 *
177 * @return the version of the SLD as String
178 *
179 */
180 public String getVersion() {
181 return version;
182 }
183
184 /**
185 * sets the <Version>
186 *
187 * @param version
188 * the version of the SLD
189 *
190 */
191 public void setVersion( String version ) {
192 this.version = version;
193 }
194
195 /**
196 * @return Returns the abstract_.
197 */
198 public String getAbstract() {
199 return abstract_;
200 }
201
202 /**
203 * @param abstract_
204 * The abstract_ to set.
205 */
206 public void setAbstract( String abstract_ ) {
207 this.abstract_ = abstract_;
208 }
209
210 /**
211 * @return Returns the name.
212 *
213 */
214 public String getName() {
215 return name;
216 }
217
218 /**
219 * @param name
220 * The name to set.
221 *
222 */
223 public void setName( String name ) {
224 this.name = name;
225 }
226
227 /**
228 * @return Returns the title.
229 *
230 */
231 public String getTitle() {
232 return title;
233 }
234
235 /**
236 * @param title
237 * The title to set.
238 *
239 */
240 public void setTitle( String title ) {
241 this.title = title;
242 }
243
244 /**
245 * exports the content of the Font as XML formated String
246 *
247 * @return xml representation of the Font
248 */
249 public String exportAsXML() {
250
251 StringBuffer sb = new StringBuffer( 50000 );
252 sb.append( "<?xml version='1.0' encoding='UTF-8'?>" );
253 sb.append( "<StyledLayerDescriptor version='" + version + "' " );
254 sb.append( "xmlns='http://www.opengis.net/sld' " );
255 sb.append( "xmlns:gml='http://www.opengis.net/gml' " );
256 sb.append( "xmlns:ogc='http://www.opengis.net/ogc' " );
257 sb.append( "xmlns:xlink='http://www.w3.org/1999/xlink' " );
258 sb.append( "xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>" );
259
260 for ( int i = 0; i < layers.size(); i++ ) {
261 sb.append( ( (Marshallable) layers.get( i ) ).exportAsXML() );
262 }
263
264 sb.append( "</StyledLayerDescriptor>" );
265
266 return sb.toString();
267 }
268
269 }