001 //$HeadURL: svn+ssh://jwilden@svn.wald.intevation.org/deegree/base/branches/2.5_testing/src/org/deegree/ogcwebservices/AbstractOGCWebServiceRequest.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; 038 039 import java.io.Serializable; 040 import java.util.HashMap; 041 import java.util.Map; 042 043 /** 044 * This is the abstract base class for all requests to OGC Web Services (OWS). 045 * <p> 046 * Contains utility methods to ease the extraction of values from KVP parameter maps. 047 * 048 * @author <a href="mailto:k.lupp@web.de">Katharina Lupp </a> 049 * @author last edited by: $Author: apoth $ 050 * 051 * @version $Revision: 26213 $, $Date: 2010-08-27 14:01:04 +0200 (Fr, 27 Aug 2010) $ 052 */ 053 public abstract class AbstractOGCWebServiceRequest implements OGCWebServiceRequest, Serializable { 054 055 056 private static final long serialVersionUID = -8818680896982952739L; 057 058 private Map<String, String> vendorSpecificParameter; 059 060 private String id; 061 062 private String version; 063 064 /** 065 * returns the ID of a request 066 */ 067 public String getId() { 068 return id; 069 } 070 071 /** 072 * returns the requested service version 073 */ 074 public String getVersion() { 075 return version; 076 } 077 078 /** 079 * Creates a new instance of <code>AbstractOGCWebServiceRequest</code>. 080 * 081 * @param version 082 * @param id 083 * @param vendorSpecificParameter 084 */ 085 protected AbstractOGCWebServiceRequest( String version, String id, Map<String, String> vendorSpecificParameter ) { 086 this.id = id; 087 if ( vendorSpecificParameter != null ) { 088 this.vendorSpecificParameter = vendorSpecificParameter; 089 } else { 090 this.vendorSpecificParameter = new HashMap<String, String>(); 091 } 092 this.version = version; 093 } 094 095 /** 096 * Finally, the requests allow for optional vendor-specific parameters (VSPs) that will enhance 097 * the results of a request. Typically, these are used for private testing of non-standard 098 * functionality prior to possible standardization. A generic client is not required or expected 099 * to make use of these VSPs. 100 */ 101 public Map<String, String> getVendorSpecificParameters() { 102 return vendorSpecificParameter; 103 } 104 105 /** 106 * Finally, the requests allow for optional vendor-specific parameters (VSPs) that will enhance 107 * the results of a request. Typically, these are used for private testing of non-standard 108 * functionality prior to possible standardization. A generic client is not required or expected 109 * to make use of these VSPs. 110 */ 111 public String getVendorSpecificParameter( String name ) { 112 return vendorSpecificParameter.get( name ); 113 } 114 115 /** 116 * returns the URI of a HTTP GET request. If the request doesn't support HTTP GET a 117 * <tt>WebServiceException</tt> will be thrown 118 * 119 */ 120 public String getRequestParameter() 121 throws OGCWebServiceException { 122 throw new OGCWebServiceException( "HTTP GET isn't supported" ); 123 } 124 125 /** 126 * Extracts a <code>String</code> parameter value from the given parameter map. If the given 127 * parameter does not exist, the also submitted default value is returned. 128 * 129 * @param name 130 * name of the parameter to be looked up 131 * @param kvp 132 * must contain Strings as keys and Strings as values 133 * @param defaultValue 134 * default value to be used if parameter is missing 135 * @return parameter value 136 */ 137 protected static String getParam( String name, Map<String, String> kvp, String defaultValue ) { 138 String value = kvp.remove( name ); 139 if ( value == null ) { 140 value = defaultValue; 141 } 142 return value; 143 } 144 145 /** 146 * Extracts a <code>String</code> list from the given parameter map. The single values are 147 * separated by commas. If the given parameter does not exist, the also submitted default value 148 * is returned. 149 * 150 * @param name 151 * name of the parameter to be looked up 152 * @param kvp 153 * must contain Strings as keys and Strings as values 154 * @param defaultValue 155 * default value to be used if parameter is missing 156 * @return parameter value 157 */ 158 protected static String[] getParamValues( String name, Map<String, String> kvp, String defaultValue ) { 159 String value = kvp.get( name ); 160 if ( value == null ) { 161 value = defaultValue; 162 } 163 return value.split( "," ); 164 } 165 166 /** 167 * Extracts a <code>String</code> parameter value from the given parameter map. Generates 168 * exceptions with descriptive messages, if the parameter does not exist in the <code>Map</code>. 169 * 170 * @param name 171 * name of the parameter to be looked up 172 * @param kvp 173 * must contain Strings as keys and Strings as values 174 * @return parameter value 175 * @throws MissingParameterValueException 176 */ 177 protected static String getRequiredParam( String name, Map<String, String> kvp ) 178 throws MissingParameterValueException { 179 String value = kvp.remove( name ); 180 if ( value == null ) { 181 throw new MissingParameterValueException( "Cannot create OGC web service request. Required parameter '" 182 + name + "' is missing.", name ); 183 } 184 return value; 185 } 186 187 /** 188 * Extracts an <code>int</code> parameter value from the given parameter map. If the given 189 * parameter does not exist, the also submitted default value is returned. 190 * 191 * @param name 192 * name of the parameter to be looked up 193 * @param kvp 194 * must contain Strings as keys and Strings as values 195 * @param defaultValue 196 * default value to be used if parameter is missing 197 * @return parameter value 198 * @throws InvalidParameterValueException 199 */ 200 protected static int getParamAsInt( String name, Map<String, String> kvp, int defaultValue ) 201 throws InvalidParameterValueException { 202 int value = defaultValue; 203 String paramValue = kvp.get( name ); 204 if ( paramValue != null ) { 205 try { 206 value = Integer.parseInt( paramValue ); 207 } catch ( NumberFormatException e ) { 208 throw new InvalidParameterValueException( "Value '" + paramValue + "' for parameter '" + name 209 + "' is invalid. Must be of type integer." ); 210 } 211 } 212 return value; 213 } 214 215 @Override 216 public String toString() { 217 String ret = "vendorSpecificParameter = " + vendorSpecificParameter + "\n"; 218 ret += ( "id = " + id + "\n" ); 219 ret += ( "version = " + version ); 220 return ret; 221 } 222 }