package org.js.model.workflow.test.action;
import org.eclipse.jwt.meta.model.organisations.Role;
import org.eclipse.jwt.meta.model.processes.Action;
import org.eclipse.jwt.meta.model.processes.Activity;
import org.eclipse.jwt.meta.model.processes.ActivityEdge;
import org.eclipse.jwt.meta.model.processes.ActivityNode;
import org.eclipse.jwt.meta.model.processes.FinalNode;
import org.eclipse.jwt.meta.model.processes.ForkNode;
import org.js.model.workflow.actions.MyAction;
import org.js.model.workflow.util.ChangePrimitive;
import org.js.model.workflow.util.WorkflowModelUtil;
import org.js.model.workflow.util.WorkflowUtil;
import org.js.model.workflow.util.WorkflowViewUtil;
public class AddTenant extends MyAction {
public AddTenant() {
}
@Override
public void run() {
initialRes();
addTenant();
save();
refresh();
}
public void addTenant() {
org.js.model.rbac.Role applicationProviderType = WorkflowUtil
.getRBACRole(workflowModel, "ApplicationProvider");
org.js.model.rbac.Role tenantType = WorkflowUtil.getRBACRole(
workflowModel, "Tenant");
Action idleAction = WorkflowModelUtil.getIdleAction(activity);
FinalNode finalNode = WorkflowModelUtil.getFinalNode(activity);
Action appProviderAction = getAppProviderAction(activity);
if (applicationProviderType != null && tenantType != null
&& idleAction != null && appProviderAction != null) {
int size = tenantType.getChildRoles().size();
String roleName = "TenantTest" + size;
// add an action
Action action = ChangePrimitive.addAction(workflowModel, activity,
diagram, WorkflowModelUtil.SPECIALIZATION_ACTION, 650,
200 + 100 * size);
// add the action with the reference of the role
Role role = ChangePrimitive.addRole(workflowModel, activity,
diagram, tenantType, roleName, 650,
250 + 100 * size);
ChangePrimitive.addRoleActionRef(workflowModel, activity, diagram,
role, action);
// add a fork node
ForkNode forkNode = ChangePrimitive.addForkNode(activity, diagram,
850, 200 + 100 * size);
// add the edge
ForkNode forNode1 = (ForkNode) ((ActivityEdge) appProviderAction
.getOut().get(0)).getTarget();
ChangePrimitive.addEdge(activity, forNode1, action);
ChangePrimitive.addEdge(activity, action, forkNode);
ChangePrimitive.addEdge(activity, forkNode, idleAction);
ChangePrimitive.updateActionState(action);
WorkflowViewUtil.treeLayout(workflowModel, activity, diagram,
idleAction, finalNode, action);
}
}
public Action getIdleAction(Activity activity) {
for (ActivityNode actNode : activity.getNodes()) {
if (actNode instanceof Action
&& WorkflowModelUtil.getActionName((Action) actNode)
.equals(WorkflowModelUtil.IDLE_ACTION)) {
return (Action) actNode;
}
}
return null;
}
public Action getAppProviderAction(Activity activity) {
for (ActivityNode actNode : activity.getNodes()) {
if (actNode instanceof Action
&& WorkflowModelUtil.getActionName((Action) actNode)
.equals(WorkflowModelUtil.SPECIALIZATION_ACTION)) {
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("ApplicationProvider")) {
return (Action) actNode;
}
}
}
}
}
return null;
}
}