package org.js.model.adaptation.rules.add; import org.js.graph.transform.stagemodel.Stage; import org.js.graph.transform.stagemodel.StageModel; import org.js.model.adaptation.IRewriteRule; import org.js.model.adaptation.ui.UserInputAddRole; import org.js.model.rbac.AccessControlModel; import org.js.model.rbac.Group; import org.js.model.rbac.RbacFactory; import org.js.model.rbac.Role; import org.js.model.workflow.util.StageModelUtil; public class AddRoleGroupOwner extends AbstractAccessControlAddRewriteRule { private StageModel stageModel; public AddRoleGroupOwner(UserInputAddRole input, AccessControlModel accessControlModel, StageModel stageModel) { super(input, accessControlModel); this.stageModel = stageModel; } @Override public int execute() { if (!isLastStage()){ addRoleGroup(); } return IRewriteRule.OK; } private boolean isLastStage() { String stageId = input.getAbstractParentRole().getId(); Stage stage = StageModelUtil.getStageForId(stageId, stageModel); return StageModelUtil.isLastStage(stage); } private void addRoleGroup() { Role newRole = input.getNewRole(); Group roleGroup = createRoleGroup(); roleGroup.setId(newRole.getId()); roleGroup.setName(newRole.getName() + "Group"); roleGroup.setOwner(newRole); } private Group createRoleGroup(){ Group group = RbacFactory.eINSTANCE.createGroup(); accessControlModel.getGroups().add(group); return group; } }