001    //$HeadURL: svn+ssh://rbezema@svn.wald.intevation.org/deegree/base/branches/2.2_testing/src/org/deegree/security/owsrequestvalidator/wfs/WFSValidator.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     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.security.owsrequestvalidator.wfs;
044    
045    import org.deegree.ogcwebservices.InvalidParameterValueException;
046    import org.deegree.ogcwebservices.OGCWebServiceRequest;
047    import org.deegree.ogcwebservices.getcapabilities.GetCapabilities;
048    import org.deegree.ogcwebservices.wfs.operation.DescribeFeatureType;
049    import org.deegree.ogcwebservices.wfs.operation.GetFeature;
050    import org.deegree.ogcwebservices.wfs.operation.GetFeatureWithLock;
051    import org.deegree.ogcwebservices.wfs.operation.LockFeature;
052    import org.deegree.ogcwebservices.wfs.operation.transaction.Transaction;
053    import org.deegree.security.UnauthorizedException;
054    import org.deegree.security.drm.model.User;
055    import org.deegree.security.owsrequestvalidator.Messages;
056    import org.deegree.security.owsrequestvalidator.OWSValidator;
057    import org.deegree.security.owsrequestvalidator.Policy;
058    
059    /**
060     * @author <a href="mailto:poth@lat-lon.de">Andreas Poth </a>
061     * @author last edited by: $Author: apoth $
062     * 
063     * @version $Revision: 9346 $, $Date: 2007-12-27 17:39:07 +0100 (Do, 27 Dez 2007) $
064     */
065    public class WFSValidator extends OWSValidator {
066    
067        private static final String MS_INVALIDREQUEST = Messages.getString( "WFSValidator.WFS_INVALIDREQUEST" );
068    
069        private GetFeatureRequestValidator getFeatureValidator;
070    
071        private GetFeatureResponseValidator getFeatureRespValidator;
072    
073        private DescribeFeatureTypeRequestValidator describeFeatureTypeValidator;
074    
075        private TransactionValidator transactionValidator;
076    
077        /**
078         * @param policy
079         * @param proxyURL
080         */
081        public WFSValidator( Policy policy, String proxyURL ) {
082            super( policy, proxyURL );
083            getFeatureValidator = new GetFeatureRequestValidator( policy );
084            getFeatureRespValidator = new GetFeatureResponseValidator( policy );
085            describeFeatureTypeValidator = new DescribeFeatureTypeRequestValidator( policy );
086            transactionValidator = new TransactionValidator( policy );
087        }
088    
089        /**
090         * validates the passed <tt>OGCWebServiceRequest</tt> if it is valid against the defined
091         * conditions for WFS requests
092         * 
093         * @param request
094         * @param user
095         * @throws InvalidParameterValueException
096         * @throws UnauthorizedException
097         */
098        public void validateRequest( OGCWebServiceRequest request, User user )
099                                throws InvalidParameterValueException, UnauthorizedException {
100    
101            if ( request instanceof GetCapabilities ) {
102                getCapabilitiesValidator.validateRequest( request, user );
103            } else if ( request instanceof GetFeature ) {
104                getFeatureValidator.validateRequest( request, user );
105            } else if ( request instanceof GetFeatureWithLock ) {
106                throw new UnauthorizedException( "GetFeatureWithLock on the WFS are not allowed!" );
107            } else if ( request instanceof LockFeature ) {
108                throw new UnauthorizedException( "Lock on the WFS are not allowed!" );
109            } else if ( request instanceof DescribeFeatureType ) {
110                describeFeatureTypeValidator.validateRequest( request, user );
111            } else if ( request instanceof Transaction ) {
112                transactionValidator.validateRequest( request, user );
113            } else {
114                throw new InvalidParameterValueException( MS_INVALIDREQUEST
115                                                          + request.getClass().getName() );
116            }
117        }
118    
119        /**
120         * @param request
121         * @param response
122         * @param mime
123         * @param user
124         * @return
125         * @throws InvalidParameterValueException
126         * @throws UnauthorizedException
127         * @see org.deegree_impl.security.OWSPolicyValidator#validateResponse(java.lang.Object,
128         *      java.lang.String)
129         */
130        public byte[] validateResponse( OGCWebServiceRequest request, byte[] response, String mime,
131                                        User user )
132                                throws InvalidParameterValueException, UnauthorizedException {
133    
134            if ( request instanceof GetCapabilities ) {
135                response = getCapabilitiesValidatorR.validateResponse( "WFS", response, mime, user );
136            } else if ( request instanceof GetFeature ) {
137                response = getFeatureRespValidator.validateResponse( "WFS", response, mime, user );
138            }
139            // TODO responses to other requests
140            return response;
141        }
142    }