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 }