001    /**
002     * Copyright (c) 2000-2012 Liferay, Inc. All rights reserved.
003     *
004     * This library is free software; you can redistribute it and/or modify it under
005     * the terms of the GNU Lesser General Public License as published by the Free
006     * Software Foundation; either version 2.1 of the License, or (at your option)
007     * any later version.
008     *
009     * This library is distributed in the hope that it will be useful, but WITHOUT
010     * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
011     * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
012     * details.
013     */
014    
015    package com.liferay.portal.service.impl;
016    
017    import com.liferay.portal.kernel.exception.SystemException;
018    import com.liferay.portal.model.ResourceBlockConstants;
019    import com.liferay.portal.model.ResourceBlockPermission;
020    import com.liferay.portal.model.ResourceBlockPermissionsContainer;
021    import com.liferay.portal.service.base.ResourceBlockPermissionLocalServiceBaseImpl;
022    
023    import java.util.List;
024    import java.util.Map;
025    
026    /**
027     * Manages resource block permissions.
028     *
029     * <p>
030     * Never directly access this service, always go through the resource block
031     * local service.
032     * </p>
033     *
034     * @author Connor McKay
035     */
036    public class ResourceBlockPermissionLocalServiceImpl
037            extends ResourceBlockPermissionLocalServiceBaseImpl {
038    
039            public void addResourceBlockPermissions(
040                            long resourceBlockId,
041                            ResourceBlockPermissionsContainer resourceBlockPermissionsContainer)
042                    throws SystemException {
043    
044                    Map<Long, Long> permissions =
045                            resourceBlockPermissionsContainer.getPermissions();
046    
047                    for (Map.Entry<Long, Long> permission : permissions.entrySet()) {
048                            long resourceBlockPermissionId = counterLocalService.increment();
049    
050                            ResourceBlockPermission resourceBlockPermission =
051                                    resourceBlockPermissionPersistence.create(
052                                            resourceBlockPermissionId);
053    
054                            resourceBlockPermission.setResourceBlockId(resourceBlockId);
055                            resourceBlockPermission.setRoleId(permission.getKey());
056                            resourceBlockPermission.setActionIds(permission.getValue());
057    
058                            updateResourceBlockPermission(resourceBlockPermission);
059                    }
060            }
061    
062            public void deleteResourceBlockPermissions(long resourceBlockId)
063                    throws SystemException {
064    
065                    resourceBlockPermissionPersistence.removeByResourceBlockId(
066                            resourceBlockId);
067            }
068    
069            public ResourceBlockPermissionsContainer
070                            getResourceBlockPermissionsContainer(long resourceBlockId)
071                    throws SystemException {
072    
073                    List<ResourceBlockPermission> resourceBlockPermissions =
074                            resourceBlockPermissionPersistence.findByResourceBlockId(
075                                    resourceBlockId);
076    
077                    ResourceBlockPermissionsContainer resourceBlockPermissionContainer =
078                            new ResourceBlockPermissionsContainer();
079    
080                    for (ResourceBlockPermission resourceBlockPermission :
081                                    resourceBlockPermissions) {
082    
083                            resourceBlockPermissionContainer.setPermissions(
084                                    resourceBlockPermission.getRoleId(),
085                                    resourceBlockPermission.getActionIds());
086                    }
087    
088                    return resourceBlockPermissionContainer;
089            }
090    
091            public void updateResourceBlockPermission(
092                            long resourceBlockId, long roleId, long actionIdsLong, int operator)
093                    throws SystemException {
094    
095                    ResourceBlockPermission resourceBlockPermission =
096                            resourceBlockPermissionPersistence.fetchByR_R(
097                                    resourceBlockId, roleId);
098    
099                    if (resourceBlockPermission == null) {
100                            if (actionIdsLong == 0) {
101                                    return;
102                            }
103    
104                            long resourceBlockPermissionId = counterLocalService.increment();
105    
106                            resourceBlockPermission = resourceBlockPermissionPersistence.create(
107                                    resourceBlockPermissionId);
108    
109                            resourceBlockPermission.setResourceBlockId(resourceBlockId);
110                            resourceBlockPermission.setRoleId(roleId);
111                    }
112    
113                    if (operator == ResourceBlockConstants.OPERATOR_ADD) {
114                            actionIdsLong |= resourceBlockPermission.getActionIds();
115                    }
116                    else if (operator == ResourceBlockConstants.OPERATOR_REMOVE) {
117                            actionIdsLong =
118                                    resourceBlockPermission.getActionIds() & (~actionIdsLong);
119                    }
120    
121                    if (actionIdsLong == 0) {
122                            deleteResourceBlockPermission(resourceBlockPermission);
123                    }
124                    else {
125                            resourceBlockPermission.setActionIds(actionIdsLong);
126    
127                            updateResourceBlockPermission(resourceBlockPermission);
128                    }
129            }
130    
131    }