001: //$HeadURL: https://svn.wald.intevation.org/svn/deegree/base/trunk/src/org/deegree/ogcwebservices/wfs/operation/DescribeFeatureType.java $
002: /*---------------- FILE HEADER ------------------------------------------
003:
004: This file is part of deegree.
005: Copyright (C) 2001-2008 by:
006: 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: Aennchenstraße 19
030: 53177 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: package org.deegree.ogcwebservices.wfs.operation;
044:
045: import java.util.Map;
046:
047: import org.deegree.datatypes.QualifiedName;
048: import org.deegree.framework.util.IDGenerator;
049: import org.deegree.framework.util.KVP2Map;
050: import org.deegree.ogcwebservices.InconsistentRequestException;
051: import org.deegree.ogcwebservices.InvalidParameterValueException;
052: import org.deegree.ogcwebservices.OGCWebServiceException;
053: import org.w3c.dom.Element;
054:
055: /**
056: * Represents a <code>DescribeFeatureType</code> request to a web feature service.
057: * <p>
058: * The function of the DescribeFeatureType interface is to provide a client the means to request a
059: * schema definition of any feature type that a particular WFS can service. The description that is
060: * generated will define how a WFS expects a client application to express the state of a feature
061: * to be created or the new state of a feature to be updated. The result of a DescribeFeatureType
062: * request is an XML document, describing one or more feature types serviced by the WFS.
063: *
064: * @author <a href="mailto:poth@lat-lon.de">Andreas Poth </a>
065: * @author <a href="mailto:schneider@lat-lon.de">Markus Schneider</a>
066: * @author last edited by: $Author: apoth $
067: *
068: * @version $Revision: 9345 $, $Date: 2007-12-27 08:22:25 -0800 (Thu, 27 Dec 2007) $
069: */
070: public class DescribeFeatureType extends AbstractWFSRequest {
071:
072: private static final long serialVersionUID = 4403179045869238426L;
073:
074: private String outputFormat;
075:
076: private QualifiedName[] typeNames;
077:
078: /**
079: * Creates a new <code>DescribeFeatureType</code> instance.
080: *
081: * @param version
082: * @param id
083: * @param handle
084: * @param outputFormat
085: * @param typeNames
086: */
087: DescribeFeatureType(String version, String id, String handle,
088: String outputFormat, QualifiedName[] typeNames,
089: Map<String, String> vendorspecificParameter) {
090: super (version, id, handle, vendorspecificParameter);
091: this .outputFormat = outputFormat;
092: this .typeNames = typeNames;
093: }
094:
095: /**
096: * Creates a <code>DescribeFeatureType</code> instance from a document that contains the DOM
097: * representation of the request.
098: *
099: * @param id
100: * @param root element that contains the DOM representation of the request
101: * @return DescribeFeatureType instance
102: * @throws OGCWebServiceException
103: */
104: public static DescribeFeatureType create(String id, Element root)
105: throws OGCWebServiceException {
106: DescribeFeatureTypeDocument doc = new DescribeFeatureTypeDocument();
107: doc.setRootElement(root);
108: DescribeFeatureType request;
109: try {
110: request = doc.parse(id);
111: } catch (Exception e) {
112: throw new OGCWebServiceException("DescribeFeatureType", e
113: .getMessage());
114: }
115: return request;
116: }
117:
118: /**
119: * Creates a new <code>DescribeFeatureType</code> instance from the given key-value pair encoded
120: * request.
121: *
122: * @param id request identifier
123: * @param request
124: * @return new <code>DescribeFeatureType</code> request
125: * @throws InvalidParameterValueException
126: * @throws InconsistentRequestException
127: */
128: public static DescribeFeatureType create(String id, String request)
129: throws InconsistentRequestException,
130: InvalidParameterValueException {
131: Map<String, String> map = KVP2Map.toMap(request);
132: map.put("ID", id);
133: return create(map);
134: }
135:
136: /**
137: * Creates a new <code>DescribeFeatureType</code> request from the given map.
138: *
139: * @param request
140: * @return new <code>DescribeFeatureType</code> request
141: * @throws InconsistentRequestException
142: * @throws InvalidParameterValueException
143: */
144: public static DescribeFeatureType create(Map<String, String> request)
145: throws InconsistentRequestException,
146: InvalidParameterValueException {
147:
148: checkServiceParameter(request);
149: String version = checkVersionParameter(request);
150: String outputFormat = getParam("OUTPUTFORMAT", request,
151: FORMAT_GML3);
152: QualifiedName[] typeNames = extractTypeNames(request);
153:
154: long l = IDGenerator.getInstance().generateUniqueID();
155: String id = Long.toString(l);
156: return new DescribeFeatureType(version, id, null, outputFormat,
157: typeNames, request);
158: }
159:
160: /**
161: * Returns the value of the outputFormat attribute.
162: * <p>
163: * The outputFormat attribute, is used to indicate the schema description language that should
164: * be used to describe a feature schema. The only mandated format is XML-Schema denoted by the
165: * XMLSCHEMA element; other vendor specific formats specified in the capabilities document are
166: * also possible.
167: *
168: * @return the value of the outputFormat attribute.
169: */
170: public String getOutputFormat() {
171: return this .outputFormat;
172: }
173:
174: /**
175: * Returns the names of the feature types for which the schema is requested.
176: * <p>
177: * @return the names of the feature types for which the schema is requested.
178: */
179: public QualifiedName[] getTypeNames() {
180: return typeNames;
181: }
182:
183: /**
184: * Returns a string representation of the object.
185: *
186: * @return a string representation of the object.
187: */
188: @Override
189: public String toString() {
190: String ret = this .getClass().getName() + ":\n";
191: ret += (outputFormat + "\n");
192: if (typeNames != null) {
193: for (int i = 0; i < typeNames.length; i++) {
194: ret += (typeNames[i] + "\n");
195: }
196: }
197: return ret;
198: }
199: }
|