|
26 | 26 | import org.eclipse.emf.ecore.util.EcoreUtil; |
27 | 27 | import org.eclipse.emf.ecore.util.EcoreUtil.CrossReferencer; |
28 | 28 | import org.eclipse.jface.window.Window; |
| 29 | +import org.eclipse.sirius.business.api.helper.SiriusUtil; |
29 | 30 | import org.eclipse.sirius.business.api.query.EObjectQuery; |
30 | 31 | import org.eclipse.sirius.business.api.session.Session; |
31 | 32 | import org.eclipse.sirius.common.tools.api.interpreter.IInterpreter; |
|
44 | 45 | import org.obeonetwork.dsl.cinematic.flow.SubflowState; |
45 | 46 | import org.obeonetwork.dsl.cinematic.flow.Transition; |
46 | 47 | import org.obeonetwork.dsl.cinematic.flow.ViewState; |
| 48 | +import org.obeonetwork.dsl.cinematic.flow.util.FlowSwitch; |
47 | 49 | import org.obeonetwork.dsl.cinematic.toolkits.WidgetEventType; |
48 | 50 | import org.obeonetwork.dsl.cinematic.view.AbstractViewElement; |
49 | 51 | import org.obeonetwork.dsl.cinematic.view.ViewContainer; |
@@ -392,4 +394,32 @@ private static void collectTargetFlowStates(Collection<FlowState> targetFlowStat |
392 | 394 | } |
393 | 395 | } |
394 | 396 | } |
| 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 | + |
395 | 425 | } |
0 commit comments