001    //$HeadURL: svn+ssh://rbezema@svn.wald.intevation.org/deegree/base/tags/2.1/src/org/deegree/ogcwebservices/wass/wss/capabilities/WSSCapabilitiesDocument.java $
002    /*----------------    FILE HEADER  ------------------------------------------
003    
004     This file is part of deegree.
005     Copyright (C) 2001-2006 by:
006     EXSE, Department of Geography, University of Bonn
007     http://www.giub.uni-bonn.de/exse/
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     Jens Fitzke
035     lat/lon GmbH
036     Aennchenstraße 19
037     53177 Bonn
038     Germany
039     E-Mail: jens.fitzke@uni-bonn.de
040    
041     ---------------------------------------------------------------------------*/
042    
043    package org.deegree.ogcwebservices.wass.wss.capabilities;
044    
045    import java.io.IOException;
046    import java.net.MalformedURLException;
047    import java.net.URISyntaxException;
048    import java.util.ArrayList;
049    
050    import org.deegree.framework.log.ILogger;
051    import org.deegree.framework.log.LoggerFactory;
052    import org.deegree.framework.xml.XMLParsingException;
053    import org.deegree.framework.xml.XMLTools;
054    import org.deegree.i18n.Messages;
055    import org.deegree.ogcbase.CommonNamespaces;
056    import org.deegree.ogcwebservices.getcapabilities.InvalidCapabilitiesException;
057    import org.deegree.ogcwebservices.getcapabilities.OGCCapabilities;
058    import org.deegree.ogcwebservices.getcapabilities.ServiceIdentification;
059    import org.deegree.ogcwebservices.getcapabilities.ServiceProvider;
060    import org.deegree.ogcwebservices.wass.common.OWSCapabilitiesBaseDocument_1_0;
061    import org.deegree.ogcwebservices.wass.common.OperationsMetadata_1_0;
062    import org.deegree.ogcwebservices.wass.common.SupportedAuthenticationMethod;
063    import org.w3c.dom.Element;
064    import org.xml.sax.SAXException;
065    
066    /**
067     * A <code>WSSCapabilitiesDocument</code> class can parse xml-based requests. The gdi-nrw access
068     * control specification 1.0 defines xml-elements of type owscommon 1.0 hence this class base class
069     * is OWSCapabilitiesBaseDocument_1_0. For creating an empty response document a
070     * XML-Response-Template is located under WSSCapablitiesTemplate.xml .
071     * 
072     * @author <a href="mailto:bezema@lat-lon.de">Rutger Bezema</a>
073     * @author last edited by: $Author: aschmitz $
074     * 
075     * @version 2.0, $Revision: 7341 $, $Date: 2007-05-29 14:03:14 +0200 (Di, 29 Mai 2007) $
076     * 
077     * @since 2.0
078     */
079    
080    public class WSSCapabilitiesDocument extends OWSCapabilitiesBaseDocument_1_0 {
081    
082        private static final long serialVersionUID = 4456377564478064784L;
083    
084        /**
085         * The logger enhances the quality and simplicity of Debugging within the deegree2 framework
086         */
087        private static final ILogger LOG = LoggerFactory.getLogger( WSSCapabilitiesDocument.class );
088    
089        /**
090         * This is the XML template used for the GetCapabilities response document.
091         */
092        public static final String XML_TEMPLATE = "WSSCapabilitiesTemplate.xml";
093    
094        private static String PRE = CommonNamespaces.GDINRWWSS_PREFIX + ":";
095    
096        /*
097         * (non-Javadoc)
098         * 
099         * @see org.deegree.ogcwebservices.getcapabilities.OGCCapabilitiesDocument#parseCapabilities()
100         */
101        @Override
102        public OGCCapabilities parseCapabilities()
103                                throws InvalidCapabilitiesException {
104    
105            WSSCapabilities wssCapabilities = null;
106            try {
107    
108                ServiceIdentification sf = parseServiceIdentification();
109                ServiceProvider sp = parseServiceProvider();
110                OperationsMetadata_1_0 om = parseOperationsMetadata();
111                String version = parseVersion();
112                String updateSequence = parseUpdateSequence();
113    
114                ArrayList<SupportedAuthenticationMethod> am = parseSupportedAuthenticationMethods( CommonNamespaces.GDINRWWSS_PREFIX );
115    
116                String securedServiceType = parseSecuredServiceType();
117    
118                wssCapabilities = new WSSCapabilities( version, updateSequence, sf, sp, om, securedServiceType, am );
119    
120            } catch ( XMLParsingException e ) {
121                LOG.logError( e.getLocalizedMessage(), e );
122                throw new InvalidCapabilitiesException( Messages.getMessage( "WASS_ERROR_CAPABILITIES_NOT_PARSED", "WSS" ) );
123            } catch ( URISyntaxException e ) {
124                LOG.logError( e.getLocalizedMessage(), e );
125                throw new InvalidCapabilitiesException( Messages.getMessage( "WASS_ERROR_URI_NOT_READ",
126                                                                             new Object[] { "WSS", "(unknown)" } ) );
127            } catch ( MalformedURLException e ) {
128                LOG.logError( e.getLocalizedMessage(), e );
129                throw new InvalidCapabilitiesException( Messages.getMessage( "WASS_ERROR_URL_NOT_READ",
130                                                                             new Object[] { "WSS", "(unknown)" } ) );
131            }
132    
133            return wssCapabilities;
134        }
135    
136        /**
137         * @return the secured service as String
138         * @throws XMLParsingException
139         */
140        public String parseSecuredServiceType()
141                                throws XMLParsingException {
142            Element capability = (Element) XMLTools.getRequiredNode( getRootElement(), PRE + "Capability", nsContext );
143            return XMLTools.getRequiredNodeAsString( capability, PRE + "SecuredServiceType", nsContext );
144        }
145    
146        /**
147         * @throws SAXException
148         * @throws IOException
149         * 
150         */
151        public void createEmptyDocument()
152                                throws IOException, SAXException {
153            super.createEmptyDocument( XML_TEMPLATE );
154        }
155    
156    }
157    
158    /***************************************************************************************************
159     * Changes to this class. What the people have been up to: $Log$ Changes to this class. What the
160     * people have been up to: Revision 1.11 2006/11/27 09:07:53 poth Changes to this class. What the
161     * people have been up to: JNI integration of proj4 has been removed. The CRS functionality now will
162     * be done by native deegree code. Changes to this class. What the people have been up to: Changes
163     * to this class. What the people have been up to: Revision 1.10 2006/08/24 06:42:17 poth Changes to
164     * this class. What the people have been up to: File header corrected Changes to this class. What
165     * the people have been up to: Changes to this class. What the people have been up to: Revision 1.9
166     * 2006/06/27 13:10:47 bezema Changes to this class. What the people have been up to: Finished the
167     * last bits of the configuration of the wass. Changes to this class. What the people have been up
168     * to: Changes to this class. What the people have been up to: Revision 1.8 2006/06/23 13:53:48
169     * schmitz Changes to this class. What the people have been up to: Externalized all Strings, fixed
170     * up some exceptions and messages, reviewed/fixed some code. Changes to this class. What the people
171     * have been up to: Changes to this class. What the people have been up to: Revision 1.7 2006/06/20
172     * 15:31:04 bezema Changes to this class. What the people have been up to: It looks like the
173     * completion of wss. was needs further checking in a tomcat environment. The Strings must still be
174     * externalized. Logging is done, so is the formatting. Changes to this class. What the people have
175     * been up to: Changes to this class. What the people have been up to: Revision 1.6 2006/06/19
176     * 15:34:04 bezema Changes to this class. What the people have been up to: changed wass to handle
177     * things the right way Changes to this class. What the people have been up to: Changes to this
178     * class. What the people have been up to: Revision 1.5 2006/06/09 12:58:32 schmitz Changes to this
179     * class. What the people have been up to: Set up some tests for WAS/WSS and the URN class. Changes
180     * to this class. What the people have been up to: Commented out some of the deegree param stuff in
181     * order for the Changes to this class. What the people have been up to: tests to run. Changes to
182     * this class. What the people have been up to: Tests have hardcoded URLs in them, so they won't run
183     * just anywhere. Changes to this class. What the people have been up to: Revision 1.4 2006/05/30
184     * 10:12:02 bezema Putting the cvs asci option to -kkv which will update the $revision$ $author$ and
185     * $date$ variables in a cvs commit
186     * 
187     * Revision 1.2 2006/05/30 08:44:48 bezema Reararranging the layout (again) to use features of OOP.
188     * The owscommonDocument is the real baseclass now.
189     * 
190     * Revision 1.1 2006/05/29 12:00:58 bezema Refactored the security and authentication webservices
191     * into one package WASS (Web Authentication -and- Security Services), also created a common package
192     * and a saml package which could be updated to work in the future.
193     * 
194     * Revision 1.2 2006/05/23 15:22:02 bezema Added configuration files to the wss and wss is able to
195     * parse a DoService Request in xml
196     * 
197     * Revision 1.1 2006/05/22 15:48:16 bezema Starting the parsing of the xml request in wss
198     * 
199     * 
200     **************************************************************************************************/