001: /*
002: * $Header: /export/home/cvsroot/MyPersonalizerRepository/MyPersonalizer/Subsystems/Portal/Sources/es/udc/mypersonalizer/portal/model/actions/personalization/FindServicePropertyAction.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.model.actions.personalization;
042:
043: import es.udc.mypersonalizer.kernel.model.actions.AbstractAction;
044: import es.udc.mypersonalizer.kernel.model.repository.interfaces.RepositoryAccessorFactory;
045: import es.udc.mypersonalizer.kernel.model.repository.interfaces.ServiceButtonPermission;
046: import es.udc.mypersonalizer.kernel.model.repository.interfaces.ServiceProperty;
047: import es.udc.mypersonalizer.kernel.model.repository.interfaces.ServicePropertyAccessor;
048: import es.udc.mypersonalizer.kernel.model.repository.interfaces.ServicePropertyKey;
049: import es.udc.mypersonalizer.kernel.util.exceptions.ActionNotAllowedException;
050: import es.udc.mypersonalizer.kernel.util.exceptions.InstanceNotFoundException;
051: import es.udc.mypersonalizer.kernel.util.exceptions.InternalErrorException;
052: import es.udc.mypersonalizer.kernel.util.general.PersonalizationHelper;
053: import es.udc.mypersonalizer.portal.model.permissions.PermissionCheckerSingleton;
054: import es.udc.mypersonalizer.portal.model.types.personalization.FindServicePropertyEvent;
055: import java.io.Serializable;
056:
057: /**
058: * This action finds and returns the {@link ServiceProperty} object
059: * belonging to a concrete service for a concrete user and workspace. This
060: * ServiceProperty object keeps all the configuration data for that instance
061: * of the service in a Property structured as established in the service
062: * metainformation.<p>
063: *
064: * This ServiceProperty is only returned if the user has permissions for the
065: * <tt>personalize</tt> button for that service, because if he / she has not
066: * this permissions, no personalization will be allowed.<p>
067: *
068: * The event this action receives is a {@link FindServicePropertyEvent},
069: * containing the identifier for the service and the {@link ServicePropertyKey}
070: * for the desired concrete instance of the service.<p>
071: *
072: * It returns the ServiceProperty object.
073: *
074: * @author Daniel Fernandez
075: * @since 1.0
076: */
077: public class FindServicePropertyAction extends AbstractAction {
078:
079: public Serializable execute(Serializable event)
080: throws InternalErrorException {
081:
082: FindServicePropertyEvent findServicePropertyEvent = (FindServicePropertyEvent) event;
083:
084: ServicePropertyKey servicePropertyKey = findServicePropertyEvent
085: .getServicePropertyKey();
086:
087: String serviceIdentifier = servicePropertyKey
088: .getServiceIdentifier();
089:
090: try {
091:
092: if (!PersonalizationHelper
093: .isPersonalizable(serviceIdentifier)) {
094: throw new InstanceNotFoundException(serviceIdentifier,
095: "ServiceProperty");
096: }
097:
098: /* Accessors */
099: RepositoryAccessorFactory repositoryAccessorFactory = RepositoryAccessorFactory
100: .getInstance();
101:
102: ServicePropertyAccessor servicePropertyAccessor = repositoryAccessorFactory
103: .createServicePropertyAccessor();
104:
105: /* Singletons */
106: PermissionCheckerSingleton permissionCheckerSingleton = PermissionCheckerSingleton
107: .getInstance();
108:
109: if (permissionCheckerSingleton.isServiceButtonAllowed(
110: findServicePropertyEvent.getUserCredentials(),
111: serviceIdentifier,
112: ServiceButtonPermission.PERSONALIZE_BUTTON_NAME)) {
113:
114: /* We find the desired serviceProperty */
115: ServiceProperty serviceProperty = servicePropertyAccessor
116: .findServiceProperty(servicePropertyKey);
117:
118: return serviceProperty;
119:
120: } else {
121: throw new ActionNotAllowedException(
122: "User is not allowed to personalize service "
123: + servicePropertyKey
124: .getServiceIdentifier(),
125: ActionNotAllowedException.PERSONALIZE_SERVICE_ACTION,
126: servicePropertyKey.getServiceIdentifier());
127: }
128:
129: } catch (InternalErrorException e) {
130: throw e;
131: } catch (Exception e) {
132: throw new InternalErrorException(e);
133: }
134:
135: }
136:
137: }
|