001    //$HeadURL: svn+ssh://rbezema@svn.wald.intevation.org/deegree/base/branches/2.2_testing/src/org/deegree/graphics/sld/AbstractLayer.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.Arrays;
048    import java.util.List;
049    
050    import org.deegree.framework.xml.Marshallable;
051    
052    /**
053     * <p>
054     * ----------------------------------------------------------------------
055     * </p>
056     * 
057     * @author <a href="mailto:k.lupp@web.de">Katharina Lupp</a>
058     * @version $Revision: 9340 $ $Date: 2007-12-27 13:32:12 +0100 (Do, 27 Dez 2007) $
059     */
060    
061    public abstract class AbstractLayer implements Marshallable {
062    
063        protected LayerFeatureConstraints layerFeatureConstraints = null;
064    
065        protected List<AbstractStyle> styles = null;
066    
067        protected String name = null;
068    
069        /**
070         * constructor initializing the class with the <NamedLayer>
071         */
072        AbstractLayer( String name, LayerFeatureConstraints layerFeatureConstraints, AbstractStyle[] styles ) {
073            this.styles = new ArrayList<AbstractStyle>();
074            setName( name );
075            setLayerFeatureConstraints( layerFeatureConstraints );
076            setStyles( styles );
077        }
078    
079        /**
080         * The Name element identifies the well-known name of the layer being referenced, and is
081         * required. All possible well-known names are usually identified in the capabilities document
082         * for a server.
083         * 
084         * @return the name of the layer
085         * 
086         */
087        public String getName() {
088            return name;
089        }
090    
091        /**
092         * sets the <Name>
093         * 
094         * @param name
095         *            the name of the layer
096         * 
097         */
098        public void setName( String name ) {
099            this.name = name;
100        }
101    
102        /**
103         * The LayerFeatureConstraints element is optional in a NamedLayer and allows the user to
104         * specify constraints on what features of what feature types are to be selected by the
105         * named-layer reference. It is essentially a filter that allows the selection of fewer features
106         * than are present in the named layer.
107         * 
108         * @return the LayerFeatureConstraints
109         * 
110         */
111        public LayerFeatureConstraints getLayerFeatureConstraints() {
112            return layerFeatureConstraints;
113        }
114    
115        /**
116         * sets the <LayerFeatureConstraints>
117         * 
118         * @param layerFeatureConstraints
119         *            the LayerFeatureConstraints
120         * 
121         */
122        public void setLayerFeatureConstraints( LayerFeatureConstraints layerFeatureConstraints ) {
123            this.layerFeatureConstraints = layerFeatureConstraints;
124        }
125    
126        /**
127         * Returns the styles associated to the Layer. This may be UserStyles or NamedStyles
128         * <p>
129         * </p>
130         * A UserStyle is at the same semantic level as a NamedStyle used in the context of a WMS. In a
131         * sense, a named style can be thought of as a reference to a hidden UserStyle that is stored
132         * inside of a map server.
133         * 
134         * @return the Styles of the Layer as ArrayList
135         * 
136         */
137        public AbstractStyle[] getStyles() {
138            return styles.toArray( new AbstractStyle[styles.size()] );
139        }
140    
141        /**
142         * Adds styles to the Layer.
143         * 
144         * @param styles
145         *            the styles for the layer as Array
146         */
147        public void setStyles( AbstractStyle[] styles ) {
148            this.styles.clear();
149    
150            if ( styles != null ) {
151                this.styles = Arrays.asList( styles );
152            }
153        }
154    
155        /**
156         * @see org.deegree.graphics.sld.AbstractLayer#getStyles()
157         * @param style
158         *            a style to add
159         */
160        public void addStyle( AbstractStyle style ) {
161            styles.add( style );
162        }
163    
164        /**
165         * @see org.deegree.graphics.sld.AbstractLayer#getStyles()
166         * @param style
167         *            a style to remove
168         */
169        public void removeStyle( AbstractStyle style ) {
170            styles.remove( styles.indexOf( style ) );
171        }
172    
173        /**
174         * returns a STring-Representation of the layer
175         * 
176         * @return the layer as String
177         */
178        @Override
179        public String toString() {
180            String ret = getClass().getName() + "\n";
181            ret = "name = " + name + "\n";
182            ret += ( "layerFeatureConstraints = " + layerFeatureConstraints + "\n" );
183            ret += ( "styles = " + styles + "\n" );
184    
185            return ret;
186        }
187    
188    }