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