package org.js.model.adaptation.rules.add; import org.js.model.adaptation.IRewriteRule; import org.js.model.adaptation.ui.UserInputAddRole; import org.js.model.rbac.AccessControlModel; import org.js.model.rbac.RbacFactory; import org.js.model.rbac.Role; import org.js.model.rbac.RoleType; public class AddConcreteRole extends AbstractAccessControlAddRewriteRule { public AddConcreteRole(UserInputAddRole input, AccessControlModel accessControlModel) { super(input, accessControlModel); } @Override public int execute() { int returnCode = IRewriteRule.Error; createRole(); Role newConcreteRole = input.getNewRole(); if (newConcreteRole != null) { addRole(newConcreteRole); returnCode = IRewriteRule.OK; } return returnCode; } private void addRole(Role newRole) { accessControlModel.getRoles().add(newRole); Role parentRole = input.getAbstractParentRole(); parentRole.getChildRoles().add(newRole); } private void createRole() { String id = input.getRoleId(); String name = input.getRoleName(); Role newRole = createConcreteRole(name, id); input.setNewRole(newRole); } private Role createConcreteRole(String roleName, String roleId) { Role role = RbacFactory.eINSTANCE.createRole(); role.setId(roleId); role.setName(roleName); role.setType(RoleType.CONCRETE); return role; } }