001: package org.jasig.portal.layout;
002:
003: import javax.servlet.http.HttpServletRequest;
004: import javax.servlet.http.HttpServletResponse;
005:
006: import org.apache.commons.logging.Log;
007: import org.apache.commons.logging.LogFactory;
008: import org.jasig.portal.ChannelManager;
009: import org.jasig.portal.PortalEvent;
010: import org.jasig.portal.PortalException;
011: import org.jasig.portal.UserPreferences;
012: import org.jasig.portal.security.IPerson;
013:
014: /**
015: * This helper class processes HttpServletRequests for parameters relating to
016: * user layout actions, propogating appropriate events to the user's layout
017: * manager, preferences, and channel manager.
018: *
019: * This class results from factoring the processUserLayoutParameters method out
020: * of UserInstance in an effort to make UserInstance smaller and more literate.
021: */
022: public class UserLayoutParameterProcessor {
023:
024: protected final Log log = LogFactory.getLog(getClass());
025:
026: private final IUserLayoutManager userLayoutManager;
027:
028: private final UserPreferences userPrefs;
029:
030: public UserLayoutParameterProcessor(IUserLayoutManager ulm,
031: UserPreferences userPrefs) {
032:
033: if (ulm == null) {
034: throw new IllegalArgumentException(
035: "Cannot construct a UserLayoutParameterProcessor with a null user layout manager");
036: }
037:
038: if (userPrefs == null) {
039: throw new IllegalArgumentException(
040: "Cannot construct a UserLayoutParameterProcessor with a null user preferences");
041: }
042:
043: this .userLayoutManager = ulm;
044: this .userPrefs = userPrefs;
045: }
046:
047: /**
048: * Process layout action events.
049: * Events are described by the following
050: * request params: uP_help_target uP_about_target uP_edit_target
051: * uP_remove_target uP_detach_target
052: *
053: * @param req
054: * a <code>HttpServletRequest</code> value
055: * @param channelManager
056: * a <code>ChannelManager</code> value
057: * @exception PortalException
058: * if an error occurs
059: */
060: public synchronized void processUserLayoutParameters(
061: HttpServletRequest req, HttpServletResponse res,
062: ChannelManager channelManager, IPerson person)
063: throws PortalException {
064:
065: String[] values;
066: if ((values = req.getParameterValues("uP_help_target")) != null) {
067: for (int i = 0; i < values.length; i++) {
068: channelManager.passPortalEvent(req, res, values[i],
069: PortalEvent.HELP_BUTTON);
070: }
071: }
072: if ((values = req.getParameterValues("uP_about_target")) != null) {
073: for (int i = 0; i < values.length; i++) {
074: channelManager.passPortalEvent(req, res, values[i],
075: PortalEvent.ABOUT_BUTTON);
076: }
077: }
078: if ((values = req.getParameterValues("uP_edit_target")) != null) {
079: for (int i = 0; i < values.length; i++) {
080: channelManager.passPortalEvent(req, res, values[i],
081: PortalEvent.EDIT_BUTTON);
082: }
083: }
084: if ((values = req.getParameterValues("uP_detach_target")) != null) {
085: channelManager.passPortalEvent(req, res, values[0],
086: PortalEvent.DETACH_BUTTON);
087: }
088:
089: // Propagate minimize/maximize events to the channels
090: String[] tcattrs = req.getParameterValues("uP_tcattr");
091: if (tcattrs != null) {
092: for (int i = 0; i < tcattrs.length; i++) {
093: String aName = tcattrs[i];
094: if ("minimized".equals(aName)) {
095: String[] aNode = req.getParameterValues(aName
096: + "_channelId");
097: if (aNode != null && aNode.length > 0) {
098: for (int j = 0; j < aNode.length; j++) {
099: String aValue = req.getParameter(aName
100: + "_" + aNode[j] + "_value");
101:
102: PortalEvent e = null;
103:
104: if ("true".equals(aValue)) {
105: e = PortalEvent.MINIMIZE;
106: } else {
107: e = PortalEvent.MAXIMIZE;
108: }
109:
110: channelManager.passPortalEvent(req, res,
111: aNode[j], e);
112:
113: if (log.isDebugEnabled())
114: log
115: .debug("Sending window state event to '"
116: + aName
117: + "' of '"
118: + aNode[j]
119: + "' to '"
120: + aValue + "'.");
121: }
122: }
123: }
124: }
125: }
126:
127: userLayoutManager.processLayoutParameters(person, userPrefs,
128: req);
129:
130: }
131:
132: }
|