package org.js.model.workflow.test.action; import org.eclipse.jwt.meta.model.organisations.Role; import org.eclipse.jwt.meta.model.processes.*; import org.js.model.rbac.AccessControlModel; import org.js.model.rbac.RBACService; import org.js.model.workflow.ACMConnector; import org.js.model.workflow.RoleConnector; import org.js.model.workflow.actions.MyAction; import org.js.model.workflow.util.ChangePrimitive; import org.js.model.workflow.util.WorkflowConfUtil; import org.js.model.workflow.util.WorkflowModelUtil; import org.js.model.workflow.util.WorkflowUtil; import org.js.model.workflow.util.WorkflowViewUtil; public class AddPlatformProvider extends MyAction { @Override public void run() { initialRes(); addPlatformProvider(); save(); refresh(); } public void addPlatformProvider() { if (!hasPlatformProvider(activity)) { org.js.model.rbac.Role platformProviderType=WorkflowUtil.getRBACRole(workflowModel, "PlatformProvider"); ForkNode forkNode = getFirstForkNode(activity); Action idleAction = WorkflowModelUtil.getIdleAction(activity); FinalNode finalNode = WorkflowModelUtil.getFinalNode(activity); if (forkNode != null && platformProviderType != null) { String roleName = "PlatformProviderTest"; // add an action Action action = ChangePrimitive.addAction(workflowModel, activity, diagram, WorkflowModelUtil.SPECIALIZATION_ACTION, 200, 200); // add the action with the reference of the role Role role = ChangePrimitive.addRole(workflowModel, activity, diagram, platformProviderType, roleName, 200, 250); ChangePrimitive.addRoleActionRef(workflowModel, activity, diagram, role, action); // add the edge ChangePrimitive.addEdge(activity, forkNode, action); ChangePrimitive.addEdge(activity, action, idleAction); ChangePrimitive.updateActionState(action); // WorkflowViewUtil.treeLayout(workflowModel, activity, diagram, idleAction, finalNode, action); } } } /** * check if the workflow contains a platform provider. * @param activity * @return */ public boolean hasPlatformProvider(Activity activity) { for (ActivityNode actNode : activity.getNodes()) { if (actNode instanceof Action && ((Action) actNode).getPerformedBy() != null) { org.js.model.rbac.Role role = WorkflowUtil.getRBACRole((Action)actNode); if (role != null){ for(org.js.model.rbac.Role parent :role.getParentRoles()){ if(parent.getId().equals("PlatformProvider")){ return true; }} }} } return false; } public ForkNode getFirstForkNode(Activity activity) { for (ActivityNode actNode : activity.getNodes()) { if (actNode instanceof ForkNode) { return (ForkNode) actNode; } } return null; } }