001: /*
002: * $Header: /export/home/cvsroot/MyPersonalizerRepository/MyPersonalizer/Subsystems/Portal/Sources/es/udc/mypersonalizer/portal/controller/actions/content/FindWorkspaceContentAction.java,v 1.1.1.1 2004/03/25 12:08:40 fbellas Exp $
003: * $Revision: 1.1.1.1 $
004: * $Date: 2004/03/25 12:08:40 $
005: *
006: * =============================================================================
007: *
008: * Copyright (c) 2003, The MyPersonalizer Development Group
009: * (http://www.tic.udc.es/~fbellas/mypersonalizer/index.html) at
010: * University Of A Coruna
011: * All rights reserved.
012: *
013: * Redistribution and use in source and binary forms, with or without
014: * modification, are permitted provided that the following conditions are met:
015: *
016: * - Redistributions of source code must retain the above copyright notice,
017: * this list of conditions and the following disclaimer.
018: *
019: * - Redistributions in binary form must reproduce the above copyright notice,
020: * this list of conditions and the following disclaimer in the documentation
021: * and/or other materials provided with the distribution.
022: *
023: * - Neither the name of the University Of A Coruna nor the names of its
024: * contributors may be used to endorse or promote products derived from
025: * this software without specific prior written permission.
026: *
027: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
028: * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
029: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
030: * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
031: * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
032: * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
033: * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
034: * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
035: * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
036: * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
037: * POSSIBILITY OF SUCH DAMAGE.
038: *
039: */
040:
041: package es.udc.mypersonalizer.portal.controller.actions.content;
042:
043: import es.udc.mypersonalizer.kernel.model.editors.EditorFactory;
044: import es.udc.mypersonalizer.kernel.model.editors.ServiceKeys;
045: import es.udc.mypersonalizer.kernel.model.editors.WorkspaceLayoutEditor;
046: import es.udc.mypersonalizer.kernel.model.repository.interfaces.WorkspaceLayout;
047: import es.udc.mypersonalizer.kernel.controller.actions.DefaultAction;
048: import es.udc.mypersonalizer.portal.controller.session.SessionManager;
049: import es.udc.mypersonalizer.portal.conventions.RequestAttributeNames;
050: import es.udc.mypersonalizer.portal.conventions.RequestParameterConventions;
051: import es.udc.mypersonalizer.portal.model.permissions.PermissionCheckerSingleton;
052: import es.udc.mypersonalizer.portal.model.permissions.UserCredentials;
053: import java.util.*;
054: import javax.servlet.http.HttpServletRequest;
055: import javax.servlet.http.HttpServletResponse;
056: import org.apache.commons.beanutils.BeanUtils;
057: import org.apache.struts.action.ActionErrors;
058: import org.apache.struts.action.ActionForm;
059: import org.apache.struts.action.ActionForward;
060: import org.apache.struts.action.ActionMapping;
061:
062: /**
063: * This action performs a lookup for the identifiers of all the services a user
064: * could add to his/her current workspace, as well as the ones that he/she has
065: * already active. It also looks for the workspace name.<p>
066: *
067: * This action requires a <tt>Success</tt> forward, which will point
068: * to a jsp page in which the lists of active and available services will be
069: * displayed so that the user can add or remove services from the workspace.<p>
070: *
071: * When successful, this action populates the form and the request (before
072: * performing any <i>forward</i> operation) with the following data:
073: * <ul>
074: * <li><tt>workspaceName</tt>: Which is a field of the action form for
075: * this action, and represents the name of the workspace.</li>
076: * <li><tt>serviceIdentifiers</tt>: Which is a field of the action form
077: * for this action, and represents the services currently active.</li>
078: * <li><tt>allowedServiceIdentifiers</tt>: Which is a Collection, set as
079: * an attribute into the request, with the identifiers for all possible
080: * services for the current workspace.</li>
081: * </ul>
082: *
083: *
084: * @author Daniel Fernandez
085: * @since 1.0
086: */
087: public class FindWorkspaceContentAction extends DefaultAction {
088:
089: protected ActionForward doExecute(ActionMapping mapping,
090: ActionForm form, HttpServletRequest request,
091: HttpServletResponse response) throws Exception {
092:
093: ActionErrors errors = new ActionErrors();
094:
095: /*
096: * If there are no workspaces, this action cannot be executed.
097: */
098: if (!SessionManager.getUserHasWorkspaces(request)) {
099: throw new NoActiveWorkspacesException(
100: "Cannot change layout");
101: }
102:
103: /* We get the action parameters from the session manager */
104: UserCredentials userCredentials = SessionManager
105: .getUserCredentials(request);
106: WorkspaceLayout currentWorkspaceLayout = SessionManager
107: .getCurrentWorkspaceLayout(request);
108:
109: EditorFactory editorFactory = EditorFactory.getInstance();
110: WorkspaceLayoutEditor workspaceLayoutEditor = editorFactory
111: .createWorkspaceLayoutEditor(currentWorkspaceLayout
112: .getProperty());
113:
114: String workspaceName = workspaceLayoutEditor.getWorkspaceName();
115: String workspaceType = workspaceLayoutEditor.getWorkspaceType();
116:
117: PermissionCheckerSingleton permissionCheckerSingleton = PermissionCheckerSingleton
118: .getInstance();
119:
120: /*
121: * We get all the services for which the user has permission.
122: */
123: Collection allowedServiceIdentifiers = permissionCheckerSingleton
124: .getAllowedServiceIdentifiersInWorkspace(
125: userCredentials, workspaceType);
126:
127: /*
128: * ...and we also get the list of the services which are currently
129: * active in the workspace.
130: */
131: Map serviceKeysMap = workspaceLayoutEditor.getServiceKeys();
132: Collection activeServiceIdentifiers = new ArrayList();
133: Iterator serviceKeysIter = serviceKeysMap.values().iterator();
134: while (serviceKeysIter.hasNext()) {
135: List areaServices = (List) serviceKeysIter.next();
136: Iterator servicesIter = areaServices.iterator();
137: while (servicesIter.hasNext()) {
138: ServiceKeys serviceKeys = (ServiceKeys) servicesIter
139: .next();
140: activeServiceIdentifiers
141: .add(serviceKeys.getServicePropertyKey()
142: .getServiceIdentifier());
143: }
144: }
145:
146: String[] serviceIdentifiersParameter = (String[]) activeServiceIdentifiers
147: .toArray(new String[0]);
148:
149: /*
150: * The workspace name and the active service identifiers get into
151: * the action form
152: */
153: BeanUtils.setProperty(form,
154: RequestParameterConventions.WORKSPACE_NAME,
155: workspaceName);
156: BeanUtils.setProperty(form,
157: RequestParameterConventions.SERVICE_IDENTIFIERS,
158: serviceIdentifiersParameter);
159:
160: /* The Collection of available services gets into the request */
161: request
162: .setAttribute(
163: RequestAttributeNames.ALLOWED_SERVICE_IDENTIFIERS_ATTRIBUTE_NAME,
164: allowedServiceIdentifiers);
165:
166: return mapping
167: .findForward(DefaultAction.ACTION_SUCCESS_FORWARD);
168: }
169:
170: }
|