01: /* $Id: PortletEventBroker.java,v 1.4 2005/08/25 09:21:44 vs152012 Exp $
02: * Copyright 2004-2005 Sun Microsystems, Inc. All rights reserved.
03: * Use is subject to license terms.
04: */
05: package com.sun.portal.portletappengine.ipc;
06:
07: import java.util.ArrayList;
08: import java.util.LinkedHashMap;
09:
10: import javax.portlet.ActionRequest;
11: import javax.portlet.PortletContext;
12: import javax.portlet.PortletRequest;
13:
14: import com.sun.portal.portlet.impl.PortletRequestConstants;
15: import com.sun.portal.portletcontainercommon.PortletContainerConstants;
16:
17: /**
18: * This class performs two functions: (1) Restricts access to event creation
19: * only from processAction() and handleEvent() method and (2) Forces the
20: * declaration of events in sun-portlet.xml.
21: */
22: public class PortletEventBroker {
23: private PortletRequest pr = null;
24:
25: /**
26: * Constructor for PortletEventBroker
27: *
28: * @param pr
29: * An instance of PortletRequest used to determine whether the
30: * calling method is handleEvent() or processAction(). If calling
31: * method is other than these two an IllegalStateExcpetion is
32: * thrown.
33: */
34: public PortletEventBroker(PortletRequest pr) {
35: if (pr == null) {
36: throw new IllegalArgumentException(
37: "Request object can not be null!");
38: }
39: if ((pr instanceof ActionRequest) == false
40: && (pr instanceof EventRequest) == false) {
41: throw new IllegalStateException(
42: "Can not instantiate PortletEventBroker");
43: }
44: this .pr = pr;
45: }
46:
47: /**
48: * This method is responsible for event creation. An
49: * EventNotRegisteredException is thrown if the sun-portlet.xml does not
50: * contain an entry in generate-events for this event for the given portlet.
51: *
52: * @param eventName
53: * Specifies the name of the event. Used to determine whether the
54: * EventNotRegisteredException should be thrown.
55: * @return An instance of PortletEvent is returned.
56: * @throws EventNotRegisteredException
57: */
58: public PortletEvent createEvent(String eventName)
59: throws EventNotRegisteredException {
60: if (eventName == null) {
61: throw new IllegalArgumentException(
62: "Event name can not be null!");
63: }
64: PortletContext pc = pr.getPortletSession().getPortletContext();
65: LinkedHashMap eventsMap = (LinkedHashMap) pc
66: .getAttribute(PortletContainerConstants.GENERATE_EVENT_LIST);
67: String portletName = (String) pr
68: .getAttribute(PortletRequestConstants.PORTLET_NAME);
69: ArrayList events = (ArrayList) eventsMap.get(portletName);
70: if (!events.contains(eventName.trim())) {
71: throw new EventNotRegisteredException();
72: }
73: PortletEvent pe = new PortletEventImpl(eventName, pr);
74: return pe;
75: }
76: }
|