001: /**
002: * $Id: TaskProvision.java,v 1.8 2007/02/06 22:10:19 pm95875 Exp $
003: * Copyright 2005 Sun Microsystems, Inc. All
004: * rights reserved. Use of this product is subject
005: * to license terms. Federal Acquisitions:
006: * Commercial Software -- Government Users
007: * Subject to Standard License Terms and
008: * Conditions.
009: *
010: * Sun, Sun Microsystems, the Sun logo, and Sun ONE
011: * are trademarks or registered trademarks of Sun Microsystems,
012: * Inc. in the United States and other countries.
013: */package com.sun.portal.portlet.service.tasksprocessor;
014:
015: import javax.servlet.ServletContext;
016: import javax.servlet.ServletConfig;
017: import javax.servlet.ServletException;
018:
019: import javax.servlet.http.HttpServlet;
020: import javax.servlet.http.HttpServletRequest;
021: import javax.servlet.http.HttpServletResponse;
022:
023: import com.sun.portal.portlet.service.taskshared.TaskCommonConstant;
024: import com.sun.portal.portlet.service.taskshared.TaskProvisionConstant;
025: import com.sun.portal.portlet.service.taskshared.TaskResult;
026: import com.sun.portal.portletappengine.LifecycleManager;
027: import com.sun.portal.portletcontainercommon.descriptor.DeploymentExtensionDescriptor;
028:
029: import com.sun.portal.portlet.service.provision.GenericPortletProvisionListener;
030: import com.sun.portal.portlet.service.provision.PortletProvisionEvent;
031: import com.sun.portal.portlet.service.provision.PortletProvisionException;
032: import com.sun.portal.portlet.service.provision.PortletProvisionListener;
033:
034: import javax.portlet.PortletContext;
035: import java.util.Map;
036: import java.util.List;
037: import java.util.Iterator;
038: import java.util.ArrayList;
039: import java.util.HashMap;
040:
041: import java.util.logging.Logger;
042: import java.util.logging.Level;
043: import com.sun.portal.log.common.PortalLogger;
044:
045: /**
046: *
047: * @author mjain
048: */
049: class TaskProvision {
050:
051: // Global variables
052: private LifecycleManager _lifecycleManager;
053: private static java.util.logging.Logger _logger = PortalLogger
054: .getLogger(TaskProvision.class);
055: private ServletContext _context;
056: private PortletContext _portletContext;
057: private DeploymentExtensionDescriptor _deploymentExtensionDescriptor;
058: private Map _listenerMap;
059: private boolean _initializationSuccessFul = true;
060:
061: /** Creates a new instance of TaskServicePortletProvision
062: * called by TasksProcessorServlet's init method
063: */
064: TaskProvision(ServletConfig config) throws ServletException {
065:
066: _lifecycleManager = (LifecycleManager) config
067: .getServletContext().getAttribute(
068: LifecycleManager.LIFECYCLE_MANAGER_PREFIX);
069: _portletContext = _lifecycleManager.getPortletContext();
070: _deploymentExtensionDescriptor = _lifecycleManager
071: .getDeploymentDescriptor()
072: .getDeploymentExtensionDescriptor();
073: _context = config.getServletContext();
074: _listenerMap = initializeListenerMap();
075:
076: }
077:
078: void process(HttpServletRequest req, HttpServletResponse res)
079: throws ServletException {
080:
081: if (_logger.isLoggable(Level.FINEST)) {
082: _logger.log(Level.FINEST, "TaskProvision start");
083: }
084: /*
085: * make sure the initialization has gone ok before proceeding
086: */
087: checkInitializationSuccess();
088:
089: /*
090: * extract the information needed to call listeners from the request object
091: */
092: String action = (String) req
093: .getAttribute(TaskCommonConstant.TASK);
094:
095: Map inputHolder = (Map) req
096: .getAttribute(TaskCommonConstant.TASK_INPUT_HOLDER);
097: Map outputHolder = (Map) req
098: .getAttribute(TaskCommonConstant.TASK_OUTPUT_HOLDER);
099: String portletName = (String) inputHolder
100: .get(TaskCommonConstant.PORTLET_NAME);
101: PortletProvisionEvent provisionEvent = (PortletProvisionEvent) inputHolder
102: .get(TaskProvisionConstant.PROVISION_EVENT);
103: TaskResult taskResult = (TaskResult) outputHolder
104: .get(TaskProvisionConstant.PROVISION_RESULTS);
105: /*
106: * call the configured listeners
107: */
108:
109: PortletProvisionListener listener = null;
110: try {
111: List provisionListeners = (List) _listenerMap
112: .get(portletName);
113: // log if no listeners found for a portlet.
114: if (_logger.isLoggable(Level.FINEST)) {
115: if (provisionListeners == null) {
116: _logger.log(Level.FINEST, "TaskProvision Listener:"
117: + "No listener configured for portlet:"
118: + portletName);
119: }
120: }
121: // iterate through the listener if found.
122: if (provisionListeners != null) {
123: Iterator provisionListenersIter = provisionListeners
124: .iterator();
125:
126: while (provisionListenersIter.hasNext()) {
127: listener = (PortletProvisionListener) provisionListenersIter
128: .next();
129: if (_logger.isLoggable(Level.FINEST)) {
130: _logger.log(Level.FINEST,
131: "Calling TaskProvision Listener:"
132: + listener.getClass().getName()
133: + "\n" + "For action:" + action
134: + "\n" + "For event:"
135: + provisionEvent.toString());
136:
137: }
138:
139: listener.handleProvisionEvent(provisionEvent);
140:
141: }
142: taskResult.setStatus(TaskCommonConstant.STATUS_SUCCESS);
143: }
144: } catch (PortletProvisionException pe) {
145: pe.printStackTrace();
146: _logger.log(Level.SEVERE,
147: "ERROR: PortletProvisionException:listener:"
148: + listener.getClass().getName() + "action:"
149: + action, pe);
150: taskResult.setStatus(TaskCommonConstant.STATUS_ERROR);
151: taskResult.setException(pe);
152:
153: }
154:
155: }
156:
157: /*
158: * Called through init() once
159: * Returns a map that map a portlet name to instances of provision listeners
160: * based on the configuration found in sun-portlet.xml
161: */
162: private Map initializeListenerMap() throws ServletException {
163:
164: Map listenerNameMap = _deploymentExtensionDescriptor
165: .getProvisionListenerMap();
166: Map listenerInstanceMap = new HashMap();
167: if (listenerNameMap != null) {
168: Iterator portletNamesIter = listenerNameMap.keySet()
169: .iterator();
170: while (portletNamesIter.hasNext()) {
171: List listeners = new ArrayList();
172: String portletName = (String) portletNamesIter.next();
173: String listenerName = null;
174: try {
175:
176: List listenerNames = (List) listenerNameMap
177: .get(portletName);
178: if (listenerNames != null) {
179: Iterator listenerNamesIter = listenerNames
180: .iterator();
181: while (listenerNamesIter.hasNext()) {
182: listenerName = (String) listenerNamesIter
183: .next();
184: _logger.log(Level.FINEST,
185: "TaskProvision:Portlet:"
186: + portletName
187: + ":listener configured:"
188: + listenerName);
189: PortletProvisionListener listener = (PortletProvisionListener) Thread
190: .currentThread()
191: .getContextClassLoader().loadClass(
192: listenerName).newInstance();
193: listener.init(_portletContext, _context);
194: listeners.add(listener);
195: }
196: listenerInstanceMap.put(portletName, listeners);
197: }
198: } catch (Exception ex) {
199: _initializationSuccessFul = false;
200: throw new ServletException(
201: "ERROR:TaskProvision:Provision :Initialization of listener failed:"
202: + listenerName, ex);
203: }
204:
205: }
206: }
207: return listenerInstanceMap;
208:
209: }
210:
211: private void checkInitializationSuccess() {
212: if (!_initializationSuccessFul) {
213: throw new IllegalStateException(
214: "ERROR:Initialization of provisioning framework had failed. Check logs of the portal webapp");
215: }
216: }
217: }
|