/* * Copyright 2012 PRODYNA AG * * Licensed under the Eclipse Public License (EPL), Version 1.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.opensource.org/licenses/eclipse-1.0.php or * http://www.nabucco.org/License.html * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.nabucco.framework.common.authorization.ui.web.action.permission; import org.nabucco.framework.base.facade.datatype.Datatype; import org.nabucco.framework.base.facade.datatype.DatatypeState; import org.nabucco.framework.base.facade.exception.client.ClientException; import org.nabucco.framework.base.facade.exception.client.action.ActionException; import org.nabucco.framework.base.facade.exception.service.MaintainException; import org.nabucco.framework.base.ui.web.action.handler.SaveActionHandler; import org.nabucco.framework.base.ui.web.action.parameter.WebActionParameter; import org.nabucco.framework.base.ui.web.component.work.WorkItemType; import org.nabucco.framework.base.ui.web.component.work.editor.EditorItem; import org.nabucco.framework.common.authorization.facade.datatype.AuthorizationGroup; import org.nabucco.framework.common.authorization.facade.datatype.AuthorizationGroupPermissionRelation; import org.nabucco.framework.common.authorization.facade.datatype.AuthorizationPermission; import org.nabucco.framework.common.authorization.facade.datatype.AuthorizationRole; import org.nabucco.framework.common.authorization.facade.datatype.AuthorizationRolePermissionRelation; import org.nabucco.framework.common.authorization.facade.datatype.AuthorizationUser; import org.nabucco.framework.common.authorization.facade.datatype.AuthorizationUserPermissionRelation; import org.nabucco.framework.common.authorization.facade.message.maintain.AuthorizationPermissionMaintainMsg; import org.nabucco.framework.common.authorization.ui.web.communication.AuthorizationComponentServiceDelegateFactory; import org.nabucco.framework.common.authorization.ui.web.communication.maintain.MaintainAuthorizationDelegate; /** * SavePermissionAction * * @author Nicolas Moser, PRODYNA AG */ public class SavePermissionAction extends SaveActionHandler<AuthorizationPermission> { @Override protected AuthorizationPermission saveDatatype(AuthorizationPermission permission, EditorItem editor, WebActionParameter parameter) throws ClientException { permission = this.maintainPermission(permission, parameter); this.addToParent(permission, editor); return permission; } /** * Add the permission to the parent datatype if exists. * * @param permission * the permission to add to the parent * @param editor * the editor holding the source reference */ private AuthorizationPermission maintainPermission(AuthorizationPermission permission, WebActionParameter parameter) throws ClientException { MaintainAuthorizationDelegate maintainService = AuthorizationComponentServiceDelegateFactory.getInstance() .getMaintainAuthorization(); AuthorizationPermissionMaintainMsg rq = new AuthorizationPermissionMaintainMsg(); rq.setAuthorizationPermission(permission); try { AuthorizationPermissionMaintainMsg rs = maintainService.maintainAuthorizationPermission(rq, parameter.getSession()); return rs.getAuthorizationPermission(); } catch (MaintainException e) { throw new ActionException("Error maintaining Authorization Permission.", e); } } /** * Add the permission to the parent datatype if exists. * * @param permission * the permission to add to the parent * @param editor * the editor holding the source reference */ private void addToParent(AuthorizationPermission permission, EditorItem editor) { if (editor.getSource() == null) { return; } if (editor.getSource().getItemType() != WorkItemType.EDITOR) { return; } EditorItem sourceEditor = (EditorItem) editor.getSource(); Datatype sourceDatatype = sourceEditor.getModel().getDatatype(); if (sourceDatatype instanceof AuthorizationGroup) { AuthorizationGroup group = (AuthorizationGroup) sourceDatatype; for (AuthorizationGroupPermissionRelation relation : group.getPermissionList()) { if (relation.getPermission() == null) { continue; } if (relation.getPermission().getId().equals(permission.getId())) { relation.setPermission(permission); return; } } AuthorizationGroupPermissionRelation relation = new AuthorizationGroupPermissionRelation(); relation.setDatatypeState(DatatypeState.INITIALIZED); relation.setPermission(permission); group.getPermissionList().add(relation); } else if (sourceDatatype instanceof AuthorizationUser) { AuthorizationUser user = (AuthorizationUser) sourceDatatype; for (AuthorizationUserPermissionRelation relation : user.getPermissionList()) { if (relation.getPermission() == null) { continue; } if (relation.getPermission().getId().equals(permission.getId())) { relation.setPermission(permission); return; } } AuthorizationUserPermissionRelation relation = new AuthorizationUserPermissionRelation(); relation.setDatatypeState(DatatypeState.INITIALIZED); relation.setPermission(permission); user.getPermissionList().add(relation); } else if (sourceDatatype instanceof AuthorizationRole) { AuthorizationRole role = (AuthorizationRole) sourceDatatype; for (AuthorizationRolePermissionRelation relation : role.getPermissionList()) { if (relation.getPermission() == null) { continue; } if (relation.getPermission().getId().equals(permission.getId())) { relation.setPermission(permission); return; } } AuthorizationRolePermissionRelation relation = new AuthorizationRolePermissionRelation(); relation.setDatatypeState(DatatypeState.INITIALIZED); relation.setPermission(permission); role.getPermissionList().add(relation); } } }