package org.js.model.adaptation.rules.add;
import org.eclipse.jwt.meta.model.core.Model;
import org.eclipse.jwt.meta.model.events.Event;
import org.eclipse.jwt.meta.model.processes.Action;
import org.js.graph.transform.stagemodel.Stage;
import org.js.graph.transform.stagemodel.StageModel;
import org.js.model.adaptation.ui.UserInputAddRole;
import org.js.model.workflow.util.ChangePrimitive;
import org.js.model.workflow.util.StageModelUtil;
public class AddSuccessorFinalNode extends AbstractWorkflowAddRewriteRule {
private StageModel stageModel;
private static String FLOWFINAL = "final";
public AddSuccessorFinalNode(UserInputAddRole input, Model workflow, StageModel stageModel) {
super(input, workflow);
this.stageModel = stageModel;
}
@Override
protected int executeInternal() {
if (isFinalStage()){
addSuccessorFinalNode();
}
return 0;
}
private void addSuccessorFinalNode() {
Action roleAction = input.getSpecializationAction();
Event finalNode = ChangePrimitive.addFlowFinalNode(activity, diagram, FLOWFINAL, coordinate, coordinate);
ChangePrimitive.addEdge(activity, roleAction, finalNode);
}
private boolean isFinalStage() {
boolean result = false;
String stageId = input.getAbstractParentRole().getId();
Stage stage = StageModelUtil.getStageForId(stageId, stageModel);
if (stage != null){
result = StageModelUtil.isLastStage(stage);
}
return result;
}
}