001: /*
002: * $Header: /export/home/cvsroot/MyPersonalizerRepository/MyPersonalizer/Subsystems/Portal/Sources/es/udc/mypersonalizer/portal/controller/session/KeyChecker.java,v 1.1.1.1 2004/03/25 12:08:39 fbellas Exp $
003: * $Revision: 1.1.1.1 $
004: * $Date: 2004/03/25 12:08:39 $
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.session;
042:
043: import es.udc.mypersonalizer.kernel.model.editors.DesktopLayoutEditor;
044: import es.udc.mypersonalizer.kernel.model.editors.EditorFactory;
045: import es.udc.mypersonalizer.kernel.model.editors.ServiceKeys;
046: import es.udc.mypersonalizer.kernel.model.editors.WorkspaceLayoutEditor;
047: import es.udc.mypersonalizer.kernel.model.repository.interfaces.DesktopLayout;
048: import es.udc.mypersonalizer.kernel.model.repository.interfaces.ServicePropertyKey;
049: import es.udc.mypersonalizer.kernel.model.repository.interfaces.WorkspaceLayout;
050: import es.udc.mypersonalizer.kernel.util.exceptions.InternalErrorException;
051: import java.util.*;
052: import javax.servlet.http.HttpServletRequest;
053:
054: /**
055: * This utility class performs checks to ensure that a service property key
056: * or workspace layout identifier are valid and correspond, either with
057: * a service present in the current workspace, or with one of the workspaces
058: * for wich the user has permissions.
059: *
060: * @author Daniel Fernandez
061: * @since 1.0
062: */
063: public class KeyChecker {
064:
065: /**
066: * Avoids instantiation of this class.
067: */
068: private KeyChecker() {
069: }
070:
071: /**
072: * Checks if a given service property key corresponds to any of the services
073: * present in the current workspace layout.
074: *
075: * @param request the request object.
076: * @param key the service property key to check
077: * @throws InternalErrorException if any fatal errors happen.
078: * @return true if the service property key is valid,
079: * false if not.
080: */
081: public static boolean isValidServicePropertyKey(
082: HttpServletRequest request, ServicePropertyKey key)
083: throws InternalErrorException {
084:
085: /* We are going to check in the current workspace */
086: WorkspaceLayout currentWorkspaceLayout = SessionManager
087: .getCurrentWorkspaceLayout(request);
088:
089: EditorFactory editorFactory = EditorFactory.getInstance();
090: WorkspaceLayoutEditor workspaceLayoutEditor = editorFactory
091: .createWorkspaceLayoutEditor(currentWorkspaceLayout
092: .getProperty());
093:
094: Map serviceKeysByArea = workspaceLayoutEditor.getServiceKeys();
095:
096: String serviceIdentifier = key.getServiceIdentifier();
097: Long propertyIdentifier = key.getPropertyIdentifier();
098:
099: boolean valid = false;
100:
101: /* We'll have to check area by area, service by service. */
102: Iterator areasIter = serviceKeysByArea.entrySet().iterator();
103: while ((!valid) && (areasIter.hasNext())) {
104:
105: Map.Entry entry = (Map.Entry) areasIter.next();
106: List serviceKeysList = (List) entry.getValue();
107: Iterator serviceKeysIter = serviceKeysList.iterator();
108: while ((!valid) && (serviceKeysIter.hasNext())) {
109: ServiceKeys serviceKeys = (ServiceKeys) serviceKeysIter
110: .next();
111: ServicePropertyKey currentServicePropertyKey = serviceKeys
112: .getServicePropertyKey();
113:
114: String currentServiceIdentifier = currentServicePropertyKey
115: .getServiceIdentifier();
116: Long currentPropertyIdentifier = currentServicePropertyKey
117: .getPropertyIdentifier();
118:
119: if ((currentServiceIdentifier.equals(serviceIdentifier))
120: && (currentPropertyIdentifier
121: .equals(propertyIdentifier))) {
122:
123: valid = true;
124:
125: }
126: }
127:
128: }
129:
130: return valid;
131:
132: }
133:
134: /**
135: * Checks if a workspace layout identifier given corresponds to any of
136: * the workspace layouts the user has access to in his / her desktop.
137: *
138: * @param request the request object.
139: * @param identifier the workspace layout identifier.
140: * @throws InternalErrorException if any fatal errors happen.
141: * @return true if the identifier is valid, false if not.
142: */
143: public static boolean isValidWorkspaceLayoutIdentifier(
144: HttpServletRequest request, Long identifier)
145: throws InternalErrorException {
146:
147: DesktopLayout desktopLayout = SessionManager
148: .getDesktopLayout(request);
149:
150: EditorFactory editorFactory = EditorFactory.getInstance();
151: DesktopLayoutEditor desktopLayoutEditor = editorFactory
152: .createDesktopLayoutEditor(desktopLayout.getProperty());
153:
154: List workspaceLayoutIdentifiers = desktopLayoutEditor
155: .getWorkspaceLayoutIdentifiers();
156:
157: boolean valid = false;
158:
159: /* We go throuhg all the workspace layouts */
160: Iterator workspaceLayoutIdentifiersIter = workspaceLayoutIdentifiers
161: .iterator();
162: while ((!valid) && (workspaceLayoutIdentifiersIter.hasNext())) {
163:
164: Long currentIdentifier = (Long) workspaceLayoutIdentifiersIter
165: .next();
166:
167: if (currentIdentifier.equals(identifier)) {
168:
169: valid = true;
170:
171: }
172:
173: }
174:
175: return valid;
176: }
177:
178: }
|