001 //$HeadURL: svn+ssh://jwilden@svn.wald.intevation.org/deegree/base/branches/2.5_testing/src/org/deegree/enterprise/control/RPCWebEvent.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.io.BufferedReader;
039 import java.io.StringReader;
040
041 import javax.servlet.ServletRequest;
042 import javax.servlet.http.HttpServletRequest;
043
044 /**
045 * @author Administrator
046 */
047
048 public class RPCWebEvent extends WebEvent {
049
050 /**
051 *
052 */
053 private static final long serialVersionUID = 1L;
054
055 /**
056 *
057 */
058 private RPCMethodCall mc = null;
059
060 /** Creates a new instance of RPCWebEvent */
061 public RPCWebEvent( HttpServletRequest request ) {
062 super( request );
063 }
064
065 /** Creates a new instance of RPCWebEvent */
066 public RPCWebEvent( HttpServletRequest request, RPCMethodCall mc ) {
067 super( request );
068 this.mc = mc;
069 }
070
071 /** Creates a new instance of RPCWebEvent */
072 public RPCWebEvent( FormEvent parent, RPCMethodCall mc ) {
073 super( (HttpServletRequest) parent.getSource() );
074 this.mc = mc;
075 }
076
077 /**
078 * returns the the RPC methodcall extracted from the <tt>HttpServletRequest</tt> passed to the
079 * first constructor.
080 */
081 public RPCMethodCall getRPCMethodCall() {
082 if ( mc == null ) {
083 try {
084 mc = getMethodCall( (ServletRequest) this.getSource() );
085 } catch ( Exception e ) {
086 e.printStackTrace();
087 }
088 }
089 return mc;
090 }
091
092 /**
093 * extracts the RPC method call from the
094 *
095 * @param request
096 * @throws RPCException
097 */
098 private RPCMethodCall getMethodCall( ServletRequest request )
099 throws RPCException {
100
101 StringBuffer sb = new StringBuffer( 1000 );
102 try {
103 BufferedReader br = request.getReader();
104 String line = null;
105 while ( ( line = br.readLine() ) != null ) {
106 sb.append( line );
107 }
108 br.close();
109 } catch ( Exception e ) {
110 throw new RPCException( "Error reading stream from servlet\n" + e.toString() );
111 }
112
113 String s = sb.toString();
114 int pos1 = s.indexOf( "<methodCall>" );
115 int pos2 = s.indexOf( "</methodCall>" );
116 if ( pos1 < 0 ) {
117 throw new RPCException( "request doesn't contain a RPC methodCall" );
118 }
119 s = s.substring( pos1, pos2 + 13 );
120
121 StringReader reader = new StringReader( s );
122 RPCMethodCall mc = RPCFactory.createRPCMethodCall( reader );
123
124 return mc;
125 }
126 }