001    //$HeadURL: $
002    /*----------------    FILE HEADER  ------------------------------------------
003     This file is part of deegree.
004     Copyright (C) 2001-2008 by:
005     Department of Geography, University of Bonn
006     http://www.giub.uni-bonn.de/deegree/
007     lat/lon GmbH
008     http://www.lat-lon.de
009    
010     This library is free software; you can redistribute it and/or
011     modify it under the terms of the GNU Lesser General Public
012     License as published by the Free Software Foundation; either
013     version 2.1 of the License, or (at your option) any later version.
014     This library is distributed in the hope that it will be useful,
015     but WITHOUT ANY WARRANTY; without even the implied warranty of
016     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
017     Lesser General Public License for more details.
018     You should have received a copy of the GNU Lesser General Public
019     License along with this library; if not, write to the Free Software
020     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
021     Contact:
022    
023     Andreas Poth
024     lat/lon GmbH
025     Aennchenstr. 19
026     53177 Bonn
027     Germany
028     E-Mail: poth@lat-lon.de
029    
030     Prof. Dr. Klaus Greve
031     Department of Geography
032     University of Bonn
033     Meckenheimer Allee 166
034     53115 Bonn
035     Germany
036     E-Mail: greve@giub.uni-bonn.de
037     ---------------------------------------------------------------------------*/
038    
039    package org.deegree.ogcwebservices.csw.discovery;
040    
041    import java.net.URI;
042    import java.net.URISyntaxException;
043    import java.util.Map;
044    
045    import org.deegree.framework.log.ILogger;
046    import org.deegree.framework.log.LoggerFactory;
047    import org.deegree.i18n.Messages;
048    import org.deegree.ogcwebservices.OGCRequestFactory;
049    import org.deegree.ogcwebservices.OGCWebServiceException;
050    import org.deegree.ogcwebservices.csw.AbstractCSWRequest;
051    import org.deegree.ogcwebservices.csw.CSWExceptionCode;
052    
053    /**
054     * The <code>GetRepositoryItem</code> class encapsulates the data of a request for a repository
055     * item.
056     * 
057     * @author <a href="mailto:bezema@lat-lon.de">Rutger Bezema</a>
058     * 
059     * @author last edited by: $Author:$
060     * 
061     * @version $Revision:$, $Date:$
062     * 
063     */
064    
065    public class GetRepositoryItem extends AbstractCSWRequest {
066    
067        /**
068         * 
069         */
070        private static final long serialVersionUID = 6140080070986019397L;
071    
072        private static ILogger LOG = LoggerFactory.getLogger( GetRepositoryItem.class );
073    
074        private URI reposItem;
075    
076        private String service;
077    
078        /**
079         * Creates a new <code>GetRepositoryItem</code> instance.
080         * 
081         * @param id
082         * @param version
083         * @param vendorSpecificParameters
084         * @param reposItem
085         *            some uri identifying some ebrim extrinsic object
086         */
087        public GetRepositoryItem( String id, String version, Map<String, String> vendorSpecificParameters, URI reposItem ) {
088            super( version, id, vendorSpecificParameters );
089            this.service = OGCRequestFactory.CSW_SERVICE_NAME_EBRIM;
090            this.reposItem = reposItem;
091        }
092    
093        /**
094         * @param id
095         *            of the request
096         * @param version
097         *            of the csw
098         */
099        public GetRepositoryItem( String id, String version ) {
100            super( version, id, null );
101        }
102    
103        /**
104         * Creates a new <code>GetRepositoryItem</code> instance from the values stored in the
105         * submitted Map. Keys (parameter names) in the Map must be uppercase.
106         * 
107         * @TODO evaluate vendorSpecificParameter
108         * 
109         * @param kvp
110         *            Map containing the parameters
111         * @return a GetRepositoryItem instance with given id and values from the kvp
112         * @exception OGCWebServiceException
113         */
114        public static GetRepositoryItem create( Map<String, String> kvp )
115                                throws OGCWebServiceException {
116    
117            String service = getRequiredParam( "SERVICE", kvp );
118            if ( !OGCRequestFactory.CSW_SERVICE_NAME_EBRIM.equals( service ) ) {
119                throw new OGCWebServiceException( Messages.getMessage( "CSW_INVALID_REQUEST_PARAM", "service",
120                                                                       OGCRequestFactory.CSW_SERVICE_NAME_EBRIM, service ),
121                                                  CSWExceptionCode.WRS_INVALIDREQUEST );
122            }
123    
124            String request = getRequiredParam( "REQUEST", kvp );
125            if ( !"GetRepositoryItem".equals( request ) ) {
126                throw new OGCWebServiceException( Messages.getMessage( "CSW_INVALID_REQUEST_PARAM", "request",
127                                                                       "GetRepositoryItem", request ),
128                                                  CSWExceptionCode.WRS_INVALIDREQUEST );
129            }
130    
131            String requestID = getParam( "REQUESTID", kvp, "0" );
132    
133            String id = getRequiredParam( "ID", kvp );
134            URI reposItem = null;
135            try {
136                reposItem = new URI( id );
137            } catch ( URISyntaxException urise ) {
138                throw new OGCWebServiceException( Messages.getMessage( "CSW_INVALID_REQUEST_PARAM", "id",
139                                                                       "some kind of valid repository URI", id ),
140                                                  CSWExceptionCode.WRS_INVALIDREQUEST );
141            }
142            LOG.logDebug( "GetRepositoryItem id=" + reposItem );
143    
144            // for GetRepositoryItem default version is 2.0.1 because ebRIM profile set up
145            // on CSW 2.0.1 specification
146            String version = getParam( "REQUESTID", kvp, "2.0.1" );
147    
148            return new GetRepositoryItem( requestID, version, kvp, reposItem );
149        }
150    
151        /**
152         * @return the value 'urn:x-ogc:specification:cswebrim:Service:OGC-CSW:ebRIM'
153         */
154        @Override
155        public String getServiceName() {
156            return service;
157        }
158    
159        /**
160         * @return the requested repository Item's id.
161         */
162        public URI getRepositoryItemID() {
163            return reposItem;
164        }
165    }