001    //$HeadURL: svn+ssh://rbezema@svn.wald.intevation.org/deegree/base/branches/2.2_testing/src/org/deegree/ogcwebservices/wmps/capabilities/WMPSCapabilities.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.ogcwebservices.wmps.capabilities;
045    
046    import org.deegree.ogcwebservices.getcapabilities.OGCCapabilities;
047    import org.deegree.ogcwebservices.getcapabilities.OperationsMetadata;
048    import org.deegree.ogcwebservices.getcapabilities.ServiceIdentification;
049    import org.deegree.ogcwebservices.getcapabilities.ServiceProvider;
050    import org.deegree.ogcwebservices.wms.capabilities.Layer;
051    import org.deegree.ogcwebservices.wms.capabilities.UserDefinedSymbolization;
052    
053    /**
054     * The purpose of the GetCapabilities operation is described in the Basic Capabilities Service
055     * Elements section, above. In the particular case of a Web Map Print Service Capabilities Service,
056     * the response of a GetCapabilities request is general information about the service itself and
057     * specific information about the available maps.
058     * 
059     * The available output formats and the online resource are listed for each operation offered by the
060     * server,
061     * <p>
062     * ----------------------------------------------------------------------
063     * </p>
064     * 
065     * @author <a href="mailto:deshmukh@lat-lon.de">Anup Deshmukh</a>
066     * @version 2.0
067     */
068    public class WMPSCapabilities extends OGCCapabilities {
069    
070        private static final long serialVersionUID = -5173204173366244735L;
071    
072        private ServiceIdentification serviceIdentification;
073    
074        private ServiceProvider serviceProvider;
075    
076        private OperationsMetadata operationMetadata;
077    
078        private UserDefinedSymbolization userDefinedSymbolization;
079    
080        private Layer layer;
081    
082        /**
083         * Constructor initializing the class with the <code>WMPSCapabilities</code>
084         * 
085         * @param version
086         * @param serviceIdentification
087         * @param serviceProvider
088         * @param userDefinedSymbolization
089         * @param metadata
090         * @param layer
091         */
092        protected WMPSCapabilities( String version, ServiceIdentification serviceIdentification,
093                                   ServiceProvider serviceProvider,
094                                   UserDefinedSymbolization userDefinedSymbolization,
095                                   OperationsMetadata metadata, Layer layer ) {
096            super( version, null );
097            setServiceProvider( serviceProvider );
098            setServiceIdentification( serviceIdentification );
099            setUserDefinedSymbolization( userDefinedSymbolization );
100            setOperationMetadata( metadata );
101            setLayer( layer );
102        }
103    
104        /**
105         * returns the service description section
106         * 
107         * @return ServiceIdentification
108         */
109        public ServiceIdentification getServiceIdentification() {
110            return this.serviceIdentification;
111        }
112    
113        /**
114         * the service description section
115         * 
116         * @param serviceIdentification
117         */
118        public void setServiceIdentification( ServiceIdentification serviceIdentification ) {
119            this.serviceIdentification = serviceIdentification;
120        }
121    
122        /**
123         * returns the root layer provided by a WMPS
124         * 
125         * @return Layer
126         */
127        public Layer getLayer() {
128            return this.layer;
129        }
130    
131        /**
132         * recursion over all layers to find the layer that matches the submitted name. If no layer can
133         * be found that fullfills the condition <tt>null</tt> will be returned.
134         * 
135         * @param name
136         * @return Layer
137         */
138        public Layer getLayer( String name ) {
139            Layer lay = null;
140            
141            if ( name.equals( this.layer.getName() ) ) {
142                lay = this.layer;
143            } else {
144                lay = getLayer( name, this.layer.getLayer() );
145            }
146            
147            return lay;
148        }
149    
150        /**
151         * returns the layer provided by a WMPS for the submitted name. If not found null will be
152         * returned.
153         * 
154         * @param name
155         *            name of the layer to be found
156         * @param layers
157         *            list of searchable layers
158         * 
159         * @return a layer object or <tt>null</tt>
160         */
161        private Layer getLayer( String name, Layer[] layers ) {
162            Layer lay = null;
163    
164            if ( layers != null ) {
165                for ( int i = 0; i < layers.length; i++ ) {
166                    if ( name.equals( layers[i].getName() ) ) {
167                        lay = layers[i];
168                        break;
169                    } 
170                    lay = getLayer( name, layers[i].getLayer() );
171                    if ( lay != null ) break;
172                }
173            }
174    
175            return lay;
176        }
177    
178        /**
179         * sets the root layer provided by a WMPS
180         * 
181         * @param layer
182         */
183        public void setLayer( Layer layer ) {
184            this.layer = layer;
185        }
186    
187        /**
188         * returns metadata about the offered access methods like PrintMap or GetCapabiliites
189         * 
190         * @return OperationsMetadata
191         */
192        public OperationsMetadata getOperationMetadata() {
193            return this.operationMetadata;
194        }
195    
196        /**
197         * sets metadata for the offered access methods like PrintMap or GetCapabiliites
198         * 
199         * @param operationMetadata
200         */
201        public void setOperationMetadata( OperationsMetadata operationMetadata ) {
202            this.operationMetadata = operationMetadata;
203        }
204    
205        /**
206         * returns informations about the provider of a WMPS
207         * 
208         * @return ServiceProvider
209         */
210        public ServiceProvider getServiceProvider() {
211            return this.serviceProvider;
212        }
213    
214        /**
215         * sets informations about the provider of a WMPS
216         * 
217         * @param serviceProvider
218         */
219        public void setServiceProvider( ServiceProvider serviceProvider ) {
220            this.serviceProvider = serviceProvider;
221        }
222    
223        public UserDefinedSymbolization getUserDefinedSymbolization() {
224            return this.userDefinedSymbolization;
225        }
226    
227        public void setUserDefinedSymbolization( UserDefinedSymbolization userDefinedSymbolization ) {
228            this.userDefinedSymbolization = userDefinedSymbolization;
229        }
230    }