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