Skip to content

Commit 347f328

Browse files
committed
[SAFRAN-1206] Cinematic - Delete dandling Transition when FlowState is deleted
1 parent 36f389a commit 347f328

File tree

2 files changed

+31
-3
lines changed

2 files changed

+31
-3
lines changed

designs/cinematic/plugins/org.obeonetwork.dsl.cinematic.design/description/cinematic.odesign

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -328,9 +328,7 @@
328328
<elementView name="elementView"/>
329329
<containerView name="containerView"/>
330330
<initialOperation>
331-
<firstModelOperations xsi:type="tool_1:ChangeContext" browseExpression="var:element">
332-
<subModelOperations xsi:type="tool_1:RemoveElement"/>
333-
</firstModelOperations>
331+
<firstModelOperations xsi:type="tool_1:ChangeContext" browseExpression="aql:element.deleteFlowElement()"/>
334332
</initialOperation>
335333
</ownedTools>
336334
<ownedTools xsi:type="tool:DiagramCreationDescription" name="FLD_SubflowState_FlowDiagram_Create" label="Flow Diagram" precondition="service:isSubFlowNotNull" browseExpression="feature:subflow" diagramDescription="//@ownedViewpoints[name='Cinematic%20Views']/@ownedRepresentations[name='Flow%20Diagram']">

designs/cinematic/plugins/org.obeonetwork.dsl.cinematic.design/src/org/obeonetwork/dsl/cinematic/design/services/CinematicFlowServices.java

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import org.eclipse.emf.ecore.util.EcoreUtil;
2727
import org.eclipse.emf.ecore.util.EcoreUtil.CrossReferencer;
2828
import org.eclipse.jface.window.Window;
29+
import org.eclipse.sirius.business.api.helper.SiriusUtil;
2930
import org.eclipse.sirius.business.api.query.EObjectQuery;
3031
import org.eclipse.sirius.business.api.session.Session;
3132
import org.eclipse.sirius.common.tools.api.interpreter.IInterpreter;
@@ -44,6 +45,7 @@
4445
import org.obeonetwork.dsl.cinematic.flow.SubflowState;
4546
import org.obeonetwork.dsl.cinematic.flow.Transition;
4647
import org.obeonetwork.dsl.cinematic.flow.ViewState;
48+
import org.obeonetwork.dsl.cinematic.flow.util.FlowSwitch;
4749
import org.obeonetwork.dsl.cinematic.toolkits.WidgetEventType;
4850
import org.obeonetwork.dsl.cinematic.view.AbstractViewElement;
4951
import org.obeonetwork.dsl.cinematic.view.ViewContainer;
@@ -392,4 +394,32 @@ private static void collectTargetFlowStates(Collection<FlowState> targetFlowStat
392394
}
393395
}
394396
}
397+
398+
public void deleteFlowElement(EObject element) {
399+
new FlowSwitch<Boolean>() {
400+
401+
@Override
402+
public Boolean caseFlowState(FlowState flowState) {
403+
Session session = Session.of(flowState).get();
404+
ECrossReferenceAdapter crossReferencer = session.getSemanticCrossReferencer();
405+
Collection<Setting> inverseReferences = crossReferencer.getInverseReferences(flowState, true);
406+
for (Setting setting : inverseReferences) {
407+
if (FlowPackage.Literals.TRANSITION__FROM == setting.getEStructuralFeature() ||
408+
FlowPackage.Literals.TRANSITION__TO == setting.getEStructuralFeature()) {
409+
SiriusUtil.delete(setting.getEObject());
410+
}
411+
}
412+
SiriusUtil.delete(flowState);
413+
return true;
414+
}
415+
416+
@Override
417+
public Boolean defaultCase(EObject object) {
418+
SiriusUtil.delete(object);
419+
return true;
420+
}
421+
422+
}.doSwitch(element);
423+
}
424+
395425
}

0 commit comments

Comments
 (0)