001    //$HeadURL: svn+ssh://rbezema@svn.wald.intevation.org/deegree/base/branches/2.2_testing/src/org/deegree/ogcwebservices/wfs/capabilities/WFSOperationsMetadata.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.wfs.capabilities;
045    
046    import java.util.ArrayList;
047    import java.util.List;
048    
049    import org.deegree.ogcwebservices.getcapabilities.Operation;
050    import org.deegree.ogcwebservices.getcapabilities.OperationsMetadata;
051    import org.deegree.owscommon.OWSDomainType;
052    
053    /**
054     * Represents the <code>OperationMetadata</code> part in the capabilities document of a WFS
055     * according to the <code>Web Feature Service Implementation Specification 1.1.0</code>.
056     * <p>
057     * In addition to the <code>GetCapabilities</code> operation that all <code>OWS 0.3</code>
058     * compliant services must implement, it may define some or all of the following operations: <table
059     * border="1">
060     * <tr>
061     * <th>Name</th>
062     * <th>Mandatory?</th>
063     * <th>Function</th>
064     * </tr>
065     * <tr>
066     * <td><code>DescribeFeatureType</code></td>
067     * <td align="center">X</td>
068     * <td>The function of the <code>DescribeFeatureType</code> operation is to generate a schema
069     * description of feature types serviced by a WFS implementation.</td>
070     * </tr>
071     * <tr>
072     * <td><code>GetFeature</code></td>
073     * <td align="center">X</td>
074     * <td>The <code>GetFeature</code> operation allows retrieval of features from a web feature
075     * service.</td>
076     * </tr>
077     * <tr>
078     * <td><code>GetFeatureWithLock</code></td>
079     * <td align="center">-</td>
080     * <td>The lock action of the <code>GetFeatureWithLock</code> request is to attempt to lock all
081     * identified feature instances. If all identified feature instances cannot be locked, then an
082     * exception report should be generated.</td>
083     * </tr>
084     * <tr>
085     * <td><code>GetGMLObject</code></td>
086     * <td align="center">-</td>
087     * <td>The <code>GetGMLObject</code> operation allows retrieval of features and elements by ID
088     * from a web feature service.</td>
089     * </tr>
090     * <tr>
091     * <td><code>LockFeature</code></td>
092     * <td align="center">-</td>
093     * <td>The purpose of the <code>LockFeature</code> operation is to expose a long term feature
094     * locking mechanism to ensure consistency. The lock is considered long term because network latency
095     * would make feature locks last relatively longer than native commercial database locks.</td>
096     * </tr>
097     * <tr>
098     * <td><code>Transaction</code></td>
099     * <td align="center">-</td>
100     * <td>The <code>Transaction</code> operation is used to describe data transformation operations
101     * that are to be applied to web accessible feature instances. When the transaction has been
102     * completed, a web feature service will generate an XML response document indicating the completion
103     * status of the transaction.</td>
104     * </tr>
105     * </table>
106     * 
107     * @see org.deegree.ogcwebservices.getcapabilities.OperationsMetadata
108     * @author <a href="mailto:poth@lat-lon.de">Andreas Poth </a>
109     * @author last edited by: $Author: apoth $
110     * 
111     * @version $Revision: 9345 $, $Date: 2007-12-27 17:22:25 +0100 (Do, 27 Dez 2007) $
112     */
113    public class WFSOperationsMetadata extends OperationsMetadata {
114    
115        private static final long serialVersionUID = -3953425919713834071L;
116    
117        /**
118         * 
119         */
120        public static final String DESCRIBE_FEATURETYPE_NAME = "DescribeFeatureType";
121    
122        /**
123         * 
124         */
125        public static final String GET_FEATURE_NAME = "GetFeature";
126    
127        /**
128         * 
129         */
130        public static final String GET_FEATURE_WITH_LOCK_NAME = "GetFeatureWithLock";
131    
132        /**
133         * 
134         */
135        public static final String GET_GML_OBJECT_NAME = "GetGMLObject";
136    
137        /**
138         * 
139         */
140        public static final String LOCK_FEATURE_NAME = "LockFeature";
141    
142        /**
143         * 
144         */
145        public static final String TRANSACTION_NAME = "Transaction";
146    
147        private Operation describeFeatureType;
148    
149        private Operation getFeature;
150    
151        private Operation getFeatureWithLock;
152    
153        private Operation getGMLObject;
154    
155        private Operation lockFeature;
156    
157        private Operation transaction;
158    
159        /**
160         * Constructs a new <code>WFSOperationsMetadata</code> instance from the given parameters.
161         * 
162         * @param getCapabilities
163         * @param describeFeatureType
164         * @param getFeature
165         * @param getFeatureWithLock
166         *            optional operation (may be null)
167         * @param getGMLObject
168         *            optional operation (may be null)
169         * @param lockFeature
170         *            optional operation (may be null)
171         * @param transaction
172         *            optional operation (may be null)
173         * @param parameters
174         * @param constraints
175         */
176        public WFSOperationsMetadata( Operation getCapabilities, Operation describeFeatureType,
177                                      Operation getFeature, Operation getFeatureWithLock,
178                                      Operation getGMLObject, Operation lockFeature,
179                                      Operation transaction, OWSDomainType[] parameters,
180                                      OWSDomainType[] constraints ) {
181            super( getCapabilities, parameters, constraints );
182            this.describeFeatureType = describeFeatureType;
183            this.getFeature = getFeature;
184            this.getFeatureWithLock = getFeatureWithLock;
185            this.getGMLObject = getGMLObject;
186            this.lockFeature = lockFeature;
187            this.transaction = transaction;
188        }
189    
190        /**
191         * Returns all <code>Operations</code> known to the WFS.
192         * 
193         * @return all <code>Operations</code> known to the WFS.
194         */
195        @Override
196        public Operation[] getOperations() {
197            List<Operation> list = new ArrayList<Operation>( 10 );
198            list.add( getFeature );
199            list.add( describeFeatureType );
200            list.add( getCapabilitiesOperation );
201            if ( getFeatureWithLock != null ) {
202                list.add( getFeatureWithLock );
203            }
204            if ( getGMLObject != null ) {
205                list.add( getGMLObject );
206            }
207            if ( lockFeature != null ) {
208                list.add( lockFeature );
209            }
210            if ( transaction != null ) {
211                list.add( transaction );
212            }
213    
214            Operation[] ops = new Operation[list.size()];
215            return list.toArray( ops );
216        }
217    
218        /**
219         * @return Returns the describeFeatureType <code>Operation</code>.
220         */
221        public Operation getDescribeFeatureType() {
222            return describeFeatureType;
223        }
224    
225        /**
226         * @param describeFeatureType
227         *            The describeFeatureType <code>Operation</code> to set.
228         */
229        public void setDescribeFeatureType( Operation describeFeatureType ) {
230            this.describeFeatureType = describeFeatureType;
231        }
232    
233        /**
234         * @return Returns the getFeature <code>Operation</code>.
235         */
236        public Operation getGetFeature() {
237            return getFeature;
238        }
239    
240        /**
241         * @param getFeature
242         *            The getFeature <code>Operation</code> to set.
243         */
244        public void setGetFeature( Operation getFeature ) {
245            this.getFeature = getFeature;
246        }
247    
248        /**
249         * @return Returns the getFeatureWithLock <code>Operation</code>.
250         */
251        public Operation getGetFeatureWithLock() {
252            return getFeatureWithLock;
253        }
254    
255        /**
256         * @param getFeatureWithLock
257         *            The getFeatureWithLock <code>Operation</code> to set.
258         */
259        public void setGetFeatureWithLock( Operation getFeatureWithLock ) {
260            this.getFeatureWithLock = getFeatureWithLock;
261        }
262    
263        /**
264         * @return Returns the getGMLObject <code>Operation</code>.
265         */
266        public Operation getGetGMLObject() {
267            return getGMLObject;
268        }
269    
270        /**
271         * @param getGMLObject
272         *            The getGMLObject <code>Operation</code> to set.
273         */
274        public void setGetGMLObject( Operation getGMLObject ) {
275            this.getGMLObject = getGMLObject;
276        }
277    
278        /**
279         * @return Returns the lockFeature <code>Operation</code>.
280         */
281        public Operation getLockFeature() {
282            return lockFeature;
283        }
284    
285        /**
286         * @param lockFeature
287         *            The lockFeature <code>Operation</code> to set.
288         */
289        public void setLockFeature( Operation lockFeature ) {
290            this.lockFeature = lockFeature;
291        }
292    
293        /**
294         * @return Returns the transaction <code>Operation</code>.
295         */
296        public Operation getTransaction() {
297            return transaction;
298        }
299    
300        /**
301         * @param transaction
302         *            The transaction <code>Operation</code> to set.
303         */
304        public void setTransaction( Operation transaction ) {
305            this.transaction = transaction;
306        }
307    }