use of org.yakindu.sct.model.sgraph.Vertex in project statecharts by Yakindu.
the class ExtractSubdiagramRefactoring method createExitPoint.
protected void createExitPoint(Edge edge, Diagram subdiagram) {
Transition transition = (Transition) edge.getElement();
// create semantic exit point
Region exitPointContainer = getExitPointContainer(transition);
Exit exitPoint = createSemanticExitPoint(transition);
// create node for exit point
View exitPointContainerView = helper.getViewForSemanticElement(exitPointContainer, subdiagram);
View exitPointRegionCompartment = ViewUtil.getChildBySemanticHint(exitPointContainerView, SemanticHints.REGION_COMPARTMENT);
Node exitNode = ViewService.createNode(exitPointRegionCompartment, exitPoint, SemanticHints.EXIT, preferencesHint);
// re-wire existing transition to new exit point
Vertex oldTransitionTarget = transition.getTarget();
transition.setTarget(exitPoint);
View oldEdgeTarget = edge.getTarget();
edge.setTarget(exitNode);
// create transition from selected state to former transition target
Transition exitPointTransition = SGraphFactory.eINSTANCE.createTransition();
exitPointTransition.setSource((State) subdiagram.getElement());
exitPointTransition.setTarget(oldTransitionTarget);
ViewService.createEdge(getContextObject(), oldEdgeTarget, exitPointTransition, SemanticHints.TRANSITION, preferencesHint);
addExitPointSpec(exitPointTransition, exitPoint);
}
use of org.yakindu.sct.model.sgraph.Vertex in project statecharts by Yakindu.
the class GroupStatesIntoCompositeRefactoring method makeNameUnique.
protected void makeNameUnique(StringBuilder nameBuilder) {
int index = 2;
List<String> existingStateNames = Lists.newArrayList();
EList<Vertex> vertices = getParentRegion().getVertices();
for (Vertex vertex : vertices) {
existingStateNames.add(vertex.getName());
}
while (existingStateNames.contains(nameBuilder.toString())) {
nameBuilder.append(index++);
}
}
use of org.yakindu.sct.model.sgraph.Vertex in project statecharts by Yakindu.
the class TransitionImpl method basicSetTarget.
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public NotificationChain basicSetTarget(Vertex newTarget, NotificationChain msgs) {
Vertex oldTarget = target;
target = newTarget;
if (eNotificationRequired()) {
ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, SGraphPackage.TRANSITION__TARGET, oldTarget, newTarget);
if (msgs == null)
msgs = notification;
else
msgs.add(notification);
}
return msgs;
}
use of org.yakindu.sct.model.sgraph.Vertex in project statecharts by Yakindu.
the class SGraphJavaValidator method vertexNotReachable.
@Check(CheckType.FAST)
public void vertexNotReachable(final Vertex vertex) {
if (!(vertex instanceof Entry)) {
final Set<Object> stateScopeSet = new HashSet<>();
for (EObject obj : EcoreUtil2.eAllContents(vertex)) {
stateScopeSet.add(obj);
}
stateScopeSet.add(vertex);
final List<Object> externalPredecessors = new ArrayList<>();
DFS dfs = new DFS() {
@Override
public Iterator<Object> getElementLinks(Object element) {
List<Object> elements = new ArrayList<>();
if (element instanceof org.yakindu.sct.model.sgraph.State) {
if (!stateScopeSet.contains(element)) {
externalPredecessors.add(element);
} else {
elements.addAll(((org.yakindu.sct.model.sgraph.State) element).getRegions());
elements.addAll(((org.yakindu.sct.model.sgraph.State) element).getIncomingTransitions());
}
} else if (element instanceof Region) {
elements.addAll(((Region) element).getVertices());
} else if (element instanceof Entry) {
if (!stateScopeSet.contains(element)) {
externalPredecessors.add(element);
} else {
elements.addAll(((Entry) element).getIncomingTransitions());
}
} else if (element instanceof Vertex) {
elements.addAll(((Vertex) element).getIncomingTransitions());
} else if (element instanceof Transition) {
elements.add(((Transition) element).getSource());
}
return elements.iterator();
}
};
dfs.perform(vertex);
if (externalPredecessors.size() == 0) {
error(ISSUE_NODE_NOT_REACHABLE, vertex, null, -1);
}
}
}
Aggregations