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