001 // $HeadURL: svn+ssh://rbezema@svn.wald.intevation.org/deegree/base/tags/2.1/src/org/deegree/ogcwebservices/getcapabilities/OperationsMetadata.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.ogcwebservices.getcapabilities;
045
046 import java.io.Serializable;
047 import java.util.HashMap;
048 import java.util.Map;
049
050 import org.deegree.owscommon.OWSDomainType;
051
052 /**
053 * Represents the <code>OperationMetadata</code> part in the capabilities
054 * document of an OGC-web service according to the
055 * <code>OWS Common Implementation
056 * Specification 0.3</code> (and especially
057 * <code>owsOperationsMetadata.xsd</code>). As this class is abstract, it
058 * only defines the <code>GetCapabilities</code> operation, which all types of
059 * <code>OWS Common</code> -compliant web services must implement.
060 * <p>
061 * It consists of the following elements: <table border="1">
062 * <tr>
063 * <th>Name</th>
064 * <th>Occurences</th>
065 * <th>Function</th>
066 * </tr>
067 * <tr>
068 * <td>ows:Operation</td>
069 * <td align="center">2-*</td>
070 * <td>Metadata for unordered list of all the (requests for) operations that
071 * this server interface implements. The list of required and optional
072 * operations implemented shall be specified in the Implementation Specification
073 * for this service.</td>
074 * </tr>
075 * <tr>
076 * <td>ows:Parameter</td>
077 * <td align="center">0-*</td>
078 * <td>Optional unordered list of parameter valid domains that each apply to
079 * one or more operations which this server interface implements. The list of
080 * required and optional parameter domain limitations shall be specified in the
081 * Implementation Specification for this service.</td>
082 * </tr>
083 * <tr>
084 * <td>ows:Constraint</td>
085 * <td align="center">0-*</td>
086 * <td>Optional unordered list of valid domain constraints on non-parameter
087 * quantities that each apply to this server. The list of required and optional
088 * constraints shall be specified in the Implementation Specification for this
089 * service.</td>
090 * </tr>
091 * <tr>
092 * <td>ows:ExtendedCapabilities</td>
093 * <td align="center">0 or 1</td>
094 * <td>Individual software vendors and servers can use this element to provide
095 * metadata about any additional server abilities.</td>
096 * </tr>
097 * </table>
098 *
099 * @author <a href="mailto:poth@lat-lon.de">Andreas Poth </a>
100 * @author <a href="mailto:mschneider@lat-lon.de">Markus Schneider </a>
101 * @author last edited by: $Author: mschneider $
102 *
103 * @version $Revision: 6353 $, $Date: 2007-03-22 18:35:48 +0100 (Do, 22 Mär 2007) $
104 */
105 public abstract class OperationsMetadata implements Serializable {
106
107 /**
108 *
109 */
110 public static final String GET_CAPABILITIES_NAME = "GetCapabilities";
111
112 protected Operation getCapabilitiesOperation = null;
113
114 // keys are Strings (the names of the parameters), values are
115 // OWSDomainType-instances
116 protected Map<String, OWSDomainType> parameters;
117
118 // keys are Strings (the names of constrained domains), values are
119 // OWSDomainType-instances
120 protected Map<String, OWSDomainType> constraints;
121
122 /**
123 * Creates a new <code>OperationsMetadata</code> instance with the given
124 * configuration for the getCapabilitiesOperation.
125 *
126 * @param getCapabilitiesOperation
127 * @param parameters
128 * @param constraints
129 */
130 public OperationsMetadata(Operation getCapabilitiesOperation,
131 OWSDomainType[] parameters, OWSDomainType[] constraints) {
132 this.getCapabilitiesOperation = getCapabilitiesOperation;
133 setOperationParameter(parameters);
134 setConstraints(constraints);
135 }
136
137 /**
138 * @return The configuration for the <code>GetCapabilities</code>
139 * -operation.
140 */
141 public Operation getGetCapabilitiesOperation() {
142 return getCapabilitiesOperation;
143 }
144
145 /**
146 * Sets the configuration for the <code>GetCapabilities</code> -operation.
147 *
148 * @param getCapabilitiesOperation
149 * configuration for the <code>GetCapabilities</code>
150 * -operation to be set
151 */
152 public void setGetCapabilitiesOperation(Operation getCapabilitiesOperation) {
153 this.getCapabilitiesOperation = getCapabilitiesOperation;
154 }
155
156 /**
157 * @return all <code>Operation</code> configurations.
158 */
159 public Operation[] getOperations() {
160 return new Operation[] { getCapabilitiesOperation };
161 }
162
163 /**
164 *
165 * @return a list of parameters assigned directly to the OperationsMetadata.
166 */
167 public OWSDomainType[] getParameter() {
168 return parameters.values().toArray(new OWSDomainType[parameters.size()]);
169 }
170
171 /**
172 * adds a parameter to the OperationsMetadata
173 *
174 * @param parameter
175 */
176 public void addParameter(OWSDomainType parameter) {
177 parameters.put(parameter.getName(), parameter);
178 }
179
180 /**
181 *
182 *
183 * @param name removes a parameter from the OperationsMetadata
184 * @return the removed parameter
185 */
186 public OWSDomainType removeParameter( String name ) {
187 return parameters.remove(name);
188 }
189
190 /**
191 * sets a complete list of parameters to the OperationMetadata
192 *
193 * @param parameters
194 */
195 public void setOperationParameter(OWSDomainType[] parameters) {
196 if (this.parameters == null) {
197 this.parameters = new HashMap<String, OWSDomainType>();
198 } else {
199 this.parameters.clear();
200 }
201 if (parameters != null) {
202 for (int i = 0; i < parameters.length; i++) {
203 addParameter(parameters[i]);
204 }
205 }
206 }
207
208 /**
209 * @return Returns the constraints.
210 */
211 public OWSDomainType[] getConstraints() {
212 return constraints.values().toArray(
213 new OWSDomainType[constraints.values().size()]);
214 }
215
216 /**
217 * Sets the constraints of the <code>OperationMetadata</code>.
218 *
219 * @param constraints
220 * may be null
221 */
222 public void setConstraints(OWSDomainType[] constraints) {
223 if (this.constraints == null) {
224 this.constraints = new HashMap<String,OWSDomainType>();
225 } else {
226 this.constraints.clear();
227 }
228 if (constraints != null) {
229 for (int i = 0; i < constraints.length; i++) {
230 addConstraint(constraints[i]);
231 }
232 }
233 }
234
235 /**
236 * Adds a constraint.
237 *
238 * @param constraint
239 */
240 public void addConstraint(OWSDomainType constraint) {
241 constraints.put(constraint.getName(), constraint);
242 }
243 }