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