001: /*
002: * $Id: EventFactory.java,v 1.2 2003/09/14 05:36:47 jonesde Exp $
003: *
004: * Copyright (c) 2001-2003 The Open For Business Project - www.ofbiz.org
005: *
006: * Permission is hereby granted, free of charge, to any person obtaining a
007: * copy of this software and associated documentation files (the "Software"),
008: * to deal in the Software without restriction, including without limitation
009: * the rights to use, copy, modify, merge, publish, distribute, sublicense,
010: * and/or sell copies of the Software, and to permit persons to whom the
011: * Software is furnished to do so, subject to the following conditions:
012: *
013: * The above copyright notice and this permission notice shall be included
014: * in all copies or substantial portions of the Software.
015: *
016: * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
017: * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
018: * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
019: * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
020: * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT
021: * OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
022: * THE USE OR OTHER DEALINGS IN THE SOFTWARE.
023: *
024: */
025: package org.ofbiz.content.webapp.event;
026:
027: import java.util.HashMap;
028: import java.util.Map;
029:
030: import javax.servlet.ServletContext;
031: import javax.servlet.http.HttpServletRequest;
032: import javax.servlet.http.HttpServletResponse;
033:
034: import org.ofbiz.base.util.ObjectType;
035: import org.ofbiz.content.webapp.control.RequestHandler;
036: import org.ofbiz.content.webapp.control.RequestManager;
037:
038: /**
039: * EventFactory - Event Handler Factory
040: *
041: * @author <a href="mailto:jaz@ofbiz.org">Andy Zeneski</a>
042: * @version $Revision: 1.2 $
043: * @since 2.0
044: */
045: public class EventFactory {
046:
047: protected RequestHandler requestHandler = null;
048: protected RequestManager requestManager = null;
049: protected ServletContext context = null;
050: protected Map handlers = null;
051:
052: public EventFactory(RequestHandler requestHandler) {
053: handlers = new HashMap();
054: this .requestHandler = requestHandler;
055: this .requestManager = requestHandler.getRequestManager();
056: this .context = requestHandler.getServletContext();
057: }
058:
059: public EventHandler getEventHandler(String type)
060: throws EventHandlerException {
061: // attempt to get a pre-loaded handler
062: EventHandler handler = (EventHandler) handlers.get(type);
063:
064: if (handler == null) {
065: synchronized (EventHandler.class) {
066: handler = (EventHandler) handlers.get(type);
067: if (handler == null) {
068: String handlerClass = requestManager
069: .getHandlerClass(type,
070: RequestManager.EVENT_HANDLER_KEY);
071: if (handlerClass == null)
072: throw new EventHandlerException(
073: "Unknown handler");
074:
075: try {
076: handler = (EventHandler) ObjectType
077: .getInstance(handlerClass);
078: handlers.put(type, handler);
079: } catch (ClassNotFoundException cnf) {
080: throw new EventHandlerException(
081: "Cannot load handler class", cnf);
082: } catch (InstantiationException ie) {
083: throw new EventHandlerException(
084: "Cannot get instance of the handler",
085: ie);
086: } catch (IllegalAccessException iae) {
087: throw new EventHandlerException(iae
088: .getMessage(), iae);
089: }
090: }
091: }
092: if (handler == null)
093: throw new EventHandlerException("Invalid handler");
094: }
095: return handler;
096: }
097:
098: public static String runRequestEvent(HttpServletRequest request,
099: HttpServletResponse response, String requestUri)
100: throws EventHandlerException {
101: ServletContext application = ((ServletContext) request
102: .getAttribute("servletContext"));
103: RequestHandler handler = (RequestHandler) application
104: .getAttribute("_REQUEST_HANDLER_");
105: RequestManager rm = handler.getRequestManager();
106: String eventType = rm.getEventType(requestUri);
107: String eventPath = rm.getEventPath(requestUri);
108: String eventMethod = rm.getEventMethod(requestUri);
109: return handler.runEvent(request, response, eventType,
110: eventPath, eventMethod);
111: }
112: }
|