package org.js.model.adaptation.rules.add;
import org.eclipse.jwt.meta.model.core.Model;
import org.eclipse.jwt.meta.model.processes.Action;
import org.eclipse.jwt.meta.model.processes.ForkNode;
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.Role;
import org.js.model.workflow.util.AccessControlModelUtil;
import org.js.model.workflow.util.ChangePrimitive;
import org.js.model.workflow.util.WorkflowModelUtil;
import org.js.model.workflow.util.WorkflowViewUtil;
public class AddSuccessorFork extends AbstractWorkflowAddRewriteRule {
private AccessControlModel accessControlModel;
public AddSuccessorFork(UserInputAddRole input, Model workflow, AccessControlModel accessControlModel) {
super(input, workflow);
this.accessControlModel = accessControlModel;
}
@Override
protected int executeInternal() {
if (isGroupOwner()){
addSuccessorFork();
}
return IRewriteRule.OK;
}
private void addSuccessorFork() {
Action specializationAction = input.getSpecializationAction();
ForkNode fork = WorkflowModelUtil.addForkNode(activity);
WorkflowViewUtil.setNodeLayout(diagram, fork, coordinate, coordinate);
ChangePrimitive.addEdge(activity, specializationAction, fork);
}
private boolean isGroupOwner() {
Role role = input.getNewRole();
Group roleGroup = AccessControlModelUtil.getRoleGroupForOwner(role, accessControlModel);
return roleGroup != null;
}
}