001 //$$HeadURL: svn+ssh://jwilden@svn.wald.intevation.org/deegree/base/branches/2.5_testing/src/org/deegree/ogcwebservices/wpvs/capabilities/WPVSOperationsMetadata.java $ 002 /*---------------------------------------------------------------------------- 003 This file is part of deegree, http://deegree.org/ 004 Copyright (C) 2001-2009 by: 005 Department of Geography, University of Bonn 006 and 007 lat/lon GmbH 008 009 This library is free software; you can redistribute it and/or modify it under 010 the terms of the GNU Lesser General Public License as published by the Free 011 Software Foundation; either version 2.1 of the License, or (at your option) 012 any later version. 013 This library is distributed in the hope that it will be useful, but WITHOUT 014 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 015 FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more 016 details. 017 You should have received a copy of the GNU Lesser General Public License 018 along with this library; if not, write to the Free Software Foundation, Inc., 019 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 020 021 Contact information: 022 023 lat/lon GmbH 024 Aennchenstr. 19, 53177 Bonn 025 Germany 026 http://lat-lon.de/ 027 028 Department of Geography, University of Bonn 029 Prof. Dr. Klaus Greve 030 Postfach 1147, 53001 Bonn 031 Germany 032 http://www.geographie.uni-bonn.de/deegree/ 033 034 e-mail: info@deegree.org 035 ----------------------------------------------------------------------------*/ 036 037 package org.deegree.ogcwebservices.wpvs.capabilities; 038 039 import java.util.ArrayList; 040 import java.util.HashMap; 041 import java.util.List; 042 import java.util.Map; 043 044 import org.deegree.ogcwebservices.getcapabilities.Operation; 045 import org.deegree.ogcwebservices.getcapabilities.OperationsMetadata; 046 import org.deegree.owscommon.com110.OWSDomainType110; 047 import org.deegree.owscommon.com110.Operation110; 048 049 /** 050 * FIXME check spec number! add "Function" to table. 051 * 052 * Represents the <code>OperationMetadata</code> part in the capabilities document of a WPVS 053 * according to the <code>Web Perspective View Service Implementation Specification 0.0.0</code>. 054 * 055 * In addition to the <code>GetCapabilities</code> operation that all <code>OWS 0.3</code> 056 * compliant services must implement, it may define some or all of the following operations: 057 * <table border="1"> 058 * <tr> 059 * <th>Name</th> 060 * <th>Mandatory?</th> 061 * <th>Function</th> 062 * <tr> 063 * <tr> 064 * <td><code>GetView</code></td> 065 * <td align="center">yes</td> 066 * <td> </td> 067 * <tr> 068 * <tr> 069 * <td><code>GetDescription</code></td> 070 * <td align="center"> </td> 071 * <td> </td> 072 * <tr> 073 * <tr> 074 * <td><code>GetLegendGraphic</code></td> 075 * <td align="center">no</td> 076 * <td> </td> 077 * <tr> 078 * </table> 079 * 080 * @see org.deegree.ogcwebservices.getcapabilities.OperationsMetadata 081 * 082 * @author <a href="mailto:mays@lat-lon.de">Judit Mays</a> 083 * @author last edited by: $Author: mschneider $ 084 * 085 * @version 2.0, $Revision: 18195 $, $Date: 2009-06-18 17:55:39 +0200 (Do, 18 Jun 2009) $ 086 * 087 * @since 2.0 088 */ 089 public class WPVSOperationsMetadata extends OperationsMetadata { 090 091 /** 092 * 093 */ 094 private static final long serialVersionUID = -4003368728363323890L; 095 /** 096 * 097 */ 098 public static final String GET_VIEW_NAME = "GetView"; 099 /** 100 * 101 */ 102 public static final String GET_CAPABILITIES_NAME = "GetCapabilities"; 103 /** 104 * 105 */ 106 public static final String GET_DESCRIPTION_NAME = "GetDescription"; 107 108 /** 109 * 110 */ 111 public static final String GET_3D_FEATURE_INFO = "Get3DFeatureInfo"; 112 113 /** 114 * 115 */ 116 public static final String GET_LEGEND_GRAPHIC_NAME = "GetLegendGraphic"; 117 118 private Operation110 getCapabilities; 119 private Operation110 getView; 120 private Operation110 getDescription; 121 private Operation110 getLegendGraphic; 122 private Operation110 get3DFeatureInfo; 123 124 private Object extendedCapabilities; 125 126 // keys are Strings (the names of the parameters), values are OWSDomainType110 - instances. 127 private Map<String, OWSDomainType110> parameters; 128 // keys are Strings (the names of constrained domains), values are OWSDomainType110 - instances. 129 private Map<String, OWSDomainType110> constraints; 130 131 132 /** 133 * Creates a new <code>WPVSOperationsMetadata</code> instance from the given parameters. 134 * 135 * @param getView 136 * mandatory operation 137 * @param getCapabilities 138 * mandatory operation 139 * @param getDescription 140 * optional operation; may be null 141 * @param getLegendGraphic 142 * optional operation; may be null 143 * @param parameters 144 * optional unordered list of parameter valid domains 145 * that each apply to one or more operations which this server interface implements. 146 * @param constraints 147 * optional unordered list of valid domain constraints on non-parameter quantaties 148 * that each apply to this server. 149 * @param extendedCapabilities 150 * optional; metadata about any additional server abilities. 151 */ 152 public WPVSOperationsMetadata( Operation110 getCapabilities, Operation110 getView, 153 Operation110 getDescription, Operation110 getLegendGraphic, 154 OWSDomainType110[] parameters, OWSDomainType110[] constraints, 155 Object[] extendedCapabilities ) { 156 157 //FIXME this is ugly 158 super( null, null, null ); 159 160 this.getCapabilities = getCapabilities; 161 this.getView = getView; 162 this.getDescription = getDescription; 163 this.getLegendGraphic = getLegendGraphic; 164 165 this.extendedCapabilities = extendedCapabilities; 166 167 setParameters110( parameters ); 168 setConstraints110( constraints ); 169 } 170 171 /** 172 * Creates a new <code>WPVSOperationsMetadata</code> instance from the given parameters. 173 * 174 * @param getView 175 * mandatory operation 176 * @param getCapabilities 177 * mandatory operation 178 * @param getDescription 179 * optional operation; may be null 180 * @param getLegendGraphic 181 * optional operation; may be null 182 * @param parameters 183 * optional unordered list of parameter valid domains 184 * that each apply to one or more operations which this server interface implements. 185 * @param constraints 186 * optional unordered list of valid domain constraints on non-parameter quantaties 187 * that each apply to this server. 188 * @param extendedCapabilities 189 * optional; metadata about any additional server abilities. 190 * @param get3DFeatureInfo 191 * optional operation; may be null 192 */ 193 public WPVSOperationsMetadata( Operation110 getCapabilities, Operation110 getView, 194 Operation110 getDescription, Operation110 getLegendGraphic, 195 OWSDomainType110[] parameters, OWSDomainType110[] constraints, 196 Object[] extendedCapabilities, Operation110 get3DFeatureInfo ) { 197 198 //FIXME this is ugly 199 super( null, null, null ); 200 201 this.getCapabilities = getCapabilities; 202 this.getView = getView; 203 this.getDescription = getDescription; 204 this.getLegendGraphic = getLegendGraphic; 205 this.get3DFeatureInfo = get3DFeatureInfo; 206 207 this.extendedCapabilities = extendedCapabilities; 208 209 setParameters110( parameters ); 210 setConstraints110( constraints ); 211 } 212 /** 213 * Returns all <code>Operations</code> known to the WPVS. 214 * 215 * @return the configured operations of the wpvs 216 */ 217 public Operation[] getAllOperations() { 218 219 List<Operation110> list = new ArrayList<Operation110>( 10 ); 220 221 list.add( getCapabilities ); 222 list.add( getView ); 223 if ( getDescription != null ) { 224 list.add( getDescription ); 225 } 226 if ( getLegendGraphic != null ) { 227 list.add( getLegendGraphic ); 228 } 229 if ( get3DFeatureInfo != null ) { 230 list.add( get3DFeatureInfo ); 231 } 232 233 Operation110 [] ops = new Operation110 [list.size()]; 234 return list.toArray( ops ); 235 } 236 237 /** 238 * @return the <code>GetCapabilities</code> -operation. 239 */ 240 public Operation getGetCapabilities() { 241 return getCapabilities; 242 } 243 244 /** 245 * Sets the configuration for the <code>GetCapabilities</code> -operation. 246 * 247 * @param getCapabilities 248 * configuration for the <code>GetCapabilities</code> -operation to be set. 249 */ 250 public void setGetCapabilities( Operation110 getCapabilities ) { 251 this.getCapabilities = getCapabilities; 252 } 253 254 /** 255 * @return Returns the getView <code>Operation</code>. 256 */ 257 public Operation getGetView() { 258 return getView; 259 } 260 261 /** 262 * @param getView The getView to set. 263 */ 264 public void setGetView( Operation110 getView ) { 265 this.getView = getView; 266 } 267 268 /** 269 * @return Returns the getDescription <code>Operation</code>. 270 */ 271 public Operation getGetDescription() { 272 return getDescription; 273 } 274 275 /** 276 * @param getDescription The getDescription to set. 277 */ 278 public void setGetDescription( Operation110 getDescription ) { 279 this.getDescription = getDescription; 280 } 281 282 /** 283 * @return Returns the getLegendGraphic <code>Operation</code>. 284 */ 285 public Operation getGetLegendGraphic() { 286 return getLegendGraphic; 287 } 288 289 /** 290 * @param getLegendGraphic The getLegendGraphic to set. 291 */ 292 public void setGetLegendGraphic( Operation110 getLegendGraphic ) { 293 this.getLegendGraphic = getLegendGraphic; 294 } 295 296 /** 297 * @return Returns the extendedCapabilities. 298 */ 299 public Object getExtendedCapabilities() { 300 return extendedCapabilities; 301 } 302 303 /** 304 * @param extendedCapabilities The extendedCapabilities to set. 305 */ 306 public void setExtendedCapabilities( Object extendedCapabilities ) { 307 this.extendedCapabilities = extendedCapabilities; 308 } 309 310 /** 311 * Returns a list of parameters assigned directly to the WPVSOperationsMetadata. 312 * 313 * @return a list of parameters assigned directly to the WPVSOperationsMetadata. 314 */ 315 public OWSDomainType110[] getParameters110() { 316 OWSDomainType110[] op = new OWSDomainType110[ parameters.size() ]; 317 return parameters.values().toArray(op); 318 } 319 320 /** 321 * Adds a parameter to the WPVSOperationsMetadata. 322 * 323 * @param parameter 324 */ 325 public void addParameter110( OWSDomainType110 parameter ) { 326 parameters.put(parameter.getName(), parameter); 327 } 328 329 /** 330 * Removes a parameter from the WPVSOperationsMetadata. 331 * 332 * @param name to be removed 333 * @return the removed OWSDomainType110 or null if not found (or if the name mapping was null) . 334 */ 335 public OWSDomainType110 removeParameter110( String name ) { 336 return parameters.remove( name ); 337 } 338 339 /** 340 * Sets a complete list of parameters to the WPVSOperationMetadata. 341 * 342 * @param parameters 343 */ 344 public void setParameters110( OWSDomainType110[] parameters ) { 345 if (this.parameters == null) { 346 this.parameters = new HashMap<String, OWSDomainType110>(); 347 } else { 348 this.parameters.clear(); 349 } 350 if (parameters != null) { 351 for (int i = 0; i < parameters.length; i++) { 352 addParameter110(parameters[i]); 353 } 354 } 355 } 356 357 /** 358 * @return Returns the constraints. 359 */ 360 public OWSDomainType110[] getConstraints110() { 361 OWSDomainType110[] op = new OWSDomainType110[ constraints.size() ]; 362 return constraints.values().toArray( op ); 363 } 364 365 /** 366 * Adds a constraint. 367 * 368 * @param constraint of OWSDomainType110 369 */ 370 private void addConstraints110( OWSDomainType110 constraint ) { 371 constraints.put( constraint.getName(), constraint ); 372 } 373 374 /** 375 * Sets the constraints of the <code>WPVSOperationMetadata</code>. 376 * 377 * @param constraints 378 * may be null 379 */ 380 private void setConstraints110( OWSDomainType110[] constraints ) { 381 if ( this.constraints == null ) { 382 this.constraints = new HashMap<String, OWSDomainType110>(); 383 } else { 384 this.constraints.clear(); 385 } 386 if ( constraints != null ) { 387 for ( int i = 0; i < constraints.length; i++ ) { 388 addConstraints110( constraints[i] ); 389 } 390 } 391 } 392 393 }