001: //$HeadURL: https://svn.wald.intevation.org/svn/deegree/base/trunk/src/org/deegree/ogcwebservices/csw/discovery/GetRecordByIdDocument.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: package org.deegree.ogcwebservices.csw.discovery;
044:
045: import java.io.IOException;
046: import java.net.URL;
047: import java.util.Map;
048:
049: import org.deegree.framework.util.StringTools;
050: import org.deegree.framework.xml.XMLTools;
051: import org.deegree.ogcbase.ExceptionCode;
052: import org.deegree.ogcwebservices.InvalidParameterValueException;
053: import org.deegree.ogcwebservices.OGCWebServiceException;
054: import org.deegree.ogcwebservices.csw.AbstractCSWRequestDocument;
055: import org.w3c.dom.Node;
056: import org.xml.sax.SAXException;
057:
058: /**
059: *
060: *
061: * @version $Revision: 9499 $
062: * @author <a href="mailto:poth@lat-lon.de">Andreas Poth</a>
063: * @author last edited by: $Author: aschmitz $
064: *
065: * @version 1.0. $Revision: 9499 $, $Date: 2008-01-09 07:47:04 -0800 (Wed, 09 Jan 2008) $
066: *
067: * @since 2.0
068: */
069: public class GetRecordByIdDocument extends AbstractCSWRequestDocument {
070:
071: private static final long serialVersionUID = 2796229558893029054L;
072:
073: private static final String XML_TEMPLATE = "GetRecordByIdTemplate.xml";
074:
075: /**
076: *
077: * @param id
078: * @return
079: */
080: GetRecordById parse(String id) throws OGCWebServiceException {
081:
082: String version = null;
083: Map<String, String> vendorSpecificParameters = null;
084: String[] ids = null;
085: String elementSetName = null;
086:
087: try {
088: // '<csw:GetRecords>'-element (required)
089: Node contextNode = XMLTools.getRequiredNode(this
090: .getRootElement(), "self::csw:GetRecordById",
091: nsContext);
092:
093: // 'service'-attribute (required, must be CSW)
094: String service = XMLTools.getRequiredNodeAsString(
095: contextNode, "@service", nsContext);
096: if (!service.equals("CSW")) {
097: ExceptionCode code = ExceptionCode.INVALIDPARAMETERVALUE;
098: throw new InvalidParameterValueException(
099: "GetRecordById", "'service' must be 'CSW'",
100: code);
101: }
102:
103: // 'version'-attribute (required)
104: version = XMLTools.getNodeAsString(contextNode, "@version",
105: nsContext, GetRecords.DEFAULT_VERSION);
106:
107: // '<csw:ResponseHandler>'-elements (optional)
108: ids = XMLTools.getNodesAsStrings(contextNode, "csw:Id",
109: nsContext);
110:
111: // '<csw:ElementSetName>'-element (optional)
112: Node elementSetNameElement = XMLTools.getNode(contextNode,
113: "csw:ElementSetName", nsContext);
114:
115: if (elementSetNameElement != null) {
116: // must contain one of the values 'brief', 'summary' or
117: // 'full'
118: elementSetName = XMLTools.getRequiredNodeAsString(
119: elementSetNameElement, "text()", nsContext,
120: new String[] { "brief", "summary", "full" });
121:
122: } else {
123: elementSetName = "summary";
124: }
125: // in the future the vendorSpecificParameters
126: vendorSpecificParameters = parseDRMParams(this
127: .getRootElement());
128: } catch (Exception e) {
129: ExceptionCode code = ExceptionCode.INVALIDPARAMETERVALUE;
130: throw new OGCWebServiceException("GetRecordByIdDocument",
131: StringTools.stackTraceToString(e), code);
132: }
133:
134: return new GetRecordById(id, version, vendorSpecificParameters,
135: ids, elementSetName);
136: }
137:
138: /*
139: * (non-Javadoc)
140: *
141: * @see org.deegree.framework.xml.XMLFragment#createEmptyDocument()
142: */
143: void createEmptyDocument() throws IOException, SAXException {
144: URL url = GetRecordByIdDocument.class.getResource(XML_TEMPLATE);
145: if (url == null) {
146: throw new IOException("The resource '" + XML_TEMPLATE
147: + " could not be found.");
148: }
149: load(url);
150: }
151:
152: }
|