001    //$HeadURL: https://svn.wald.intevation.org/svn/deegree/base/branches/2.3_testing/src/org/deegree/enterprise/control/AbstractDBListener.java $
002    /*----------------------------------------------------------------------------
003     This file is part of deegree, http://deegree.org/
004     Copyright (C) 2001-2009 by:
005       Department of Geography, University of Bonn
006     and
007       lat/lon GmbH
008    
009     This library is free software; you can redistribute it and/or modify it under
010     the terms of the GNU Lesser General Public License as published by the Free
011     Software Foundation; either version 2.1 of the License, or (at your option)
012     any later version.
013     This library is distributed in the hope that it will be useful, but WITHOUT
014     ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
015     FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
016     details.
017     You should have received a copy of the GNU Lesser General Public License
018     along with this library; if not, write to the Free Software Foundation, Inc.,
019     59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
020    
021     Contact information:
022    
023     lat/lon GmbH
024     Aennchenstr. 19, 53177 Bonn
025     Germany
026     http://lat-lon.de/
027    
028     Department of Geography, University of Bonn
029     Prof. Dr. Klaus Greve
030     Postfach 1147, 53001 Bonn
031     Germany
032     http://www.geographie.uni-bonn.de/deegree/
033    
034     e-mail: info@deegree.org
035    ----------------------------------------------------------------------------*/
036    package org.deegree.enterprise.control;
037    
038    import java.util.HashMap;
039    
040    import org.deegree.portal.PortalException;
041    
042    /**
043     * The class listens to the get request against iso 19115 formated metadata here the result shall be
044     * returned in full format
045     *
046     * <p>
047     * ---------------------------------------------------------------------
048     * </p>
049     *
050     * @author <a href="mailto:poth@lat-lon.de">Andreas Poth</a>
051     * @version $Revision: 18195 $ $Date: 2009-06-18 17:55:39 +0200 (Do, 18. Jun 2009) $
052     */
053    public abstract class AbstractDBListener extends AbstractListener {
054    
055        /**
056         * This method is called either to search for metadata or to lookup keywords from the thesaurus
057         */
058        public void actionPerformed( FormEvent event ) {
059    
060            RPCWebEvent rpcEvent = (RPCWebEvent) event;
061    
062            try {
063                validateRequest( rpcEvent );
064            } catch ( Exception e ) {
065                gotoErrorPage( "Invalid Operations: " + e.toString() );
066                return;
067            }
068    
069            HashMap result = null;
070            try {
071                result = performRequest( rpcEvent );
072            } catch ( Exception e ) {
073                e.printStackTrace();
074                gotoErrorPage( "Invalid Operations: " + e.toString() );
075                return;
076            }
077    
078            Object res = null;
079            try {
080                res = validateResult( result );
081            } catch ( Exception e ) {
082                e.printStackTrace();
083                gotoErrorPage( "Invalid Result: " + e.toString() );
084                return;
085            }
086    
087            try {
088                handleResult( res );
089            } catch ( Exception e ) {
090                gotoErrorPage( "Error handling result: " + e.toString() );
091                return;
092            }
093    
094        }
095    
096        /**
097         * validates the request to be performed.
098         *
099         * @param event
100         *            event object containing the request to be performed
101         */
102        protected abstract void validateRequest( RPCWebEvent event )
103                                throws PortalException;
104    
105        /**
106         * creates a request from the <tt>RPCWebEvent</tt> passed to this listener
107         *
108         * @param rpcEvent
109         *            event object containing the request to be performed
110         * @return string representation of a request
111         * @exception PortalException
112         *                will be throwns if it is impossible to create the request
113         */
114        protected abstract HashMap createRequest( RPCWebEvent rpcEvent )
115                                throws PortalException;
116    
117        /**
118         * performs the request contained in the passed <tt>RPCWebEvent</tt>
119         *
120         * @param event
121         *            event object containing the request to be performed
122         * @return result of the GetRecord request
123         * @exception PortalException
124         */
125        protected abstract HashMap performRequest( RPCWebEvent event )
126                                throws PortalException;
127    
128        /**
129         * validates the result of the catalog request and returns an <tt>Object</tt> depending on the
130         * results content.
131         *
132         * @param result
133         *            result to a request
134         * @return validated result to a request
135         * @exception PortalException
136         */
137        protected abstract Object validateResult( HashMap result )
138                                throws PortalException;
139    
140        /**
141         * handles the result of a 'FULL' catalog query
142         *
143         * @param result
144         *            result to a GetRecord request
145         */
146        protected abstract void handleResult( Object result )
147                                throws PortalException;
148    
149    }