|
24 | 24 | import java.util.Set; |
25 | 25 |
|
26 | 26 | import org.eclipse.emf.ecore.EObject; |
| 27 | +import org.eclipse.emf.ecore.EStructuralFeature.Setting; |
| 28 | +import org.eclipse.emf.ecore.util.ECrossReferenceAdapter; |
| 29 | +import org.eclipse.sirius.business.api.helper.SiriusUtil; |
| 30 | +import org.eclipse.sirius.business.api.session.Session; |
27 | 31 | import org.eclipse.sirius.diagram.AbstractDNode; |
28 | 32 | import org.eclipse.sirius.diagram.DDiagram; |
29 | 33 | import org.eclipse.sirius.diagram.DDiagramElement; |
|
34 | 38 | import org.obeonetwork.dsl.database.Column; |
35 | 39 | import org.obeonetwork.dsl.database.DataBase; |
36 | 40 | import org.obeonetwork.dsl.database.DatabaseFactory; |
| 41 | +import org.obeonetwork.dsl.database.DatabasePackage; |
37 | 42 | import org.obeonetwork.dsl.database.ForeignKey; |
38 | 43 | import org.obeonetwork.dsl.database.ForeignKeyElement; |
39 | 44 | import org.obeonetwork.dsl.database.Sequence; |
|
44 | 49 | import org.obeonetwork.dsl.database.ViewElement; |
45 | 50 | import org.obeonetwork.dsl.database.ViewTable; |
46 | 51 | import org.obeonetwork.dsl.database.spec.ViewSpec; |
| 52 | +import org.obeonetwork.dsl.database.util.DatabaseSwitch; |
47 | 53 | import org.obeonetwork.dsl.database.view.parser.ColObject; |
48 | 54 | import org.obeonetwork.dsl.database.view.parser.ViewContentProvider; |
49 | 55 | import org.obeonetwork.dsl.technicalid.util.CopierUtils; |
@@ -539,4 +545,45 @@ && findColumn(c) == null) |
539 | 545 | return message.toString(); |
540 | 546 | } |
541 | 547 |
|
| 548 | + public void deleteDatabaseElement(EObject databaseElement) { |
| 549 | + new DatabaseSwitch<Boolean>() { |
| 550 | + |
| 551 | + @Override |
| 552 | + public Boolean caseTable(Table table) { |
| 553 | + Session session = Session.of(table).get(); |
| 554 | + ECrossReferenceAdapter crossReferencer = session.getSemanticCrossReferencer(); |
| 555 | + Collection<Setting> inverseReferences = crossReferencer.getInverseReferences(table, true); |
| 556 | + for (Setting setting : inverseReferences) { |
| 557 | + if (DatabasePackage.Literals.FOREIGN_KEY__TARGET == setting.getEStructuralFeature()) { |
| 558 | + SiriusUtil.delete(setting.getEObject()); |
| 559 | + } |
| 560 | + } |
| 561 | + SiriusUtil.delete(table); |
| 562 | + return true; |
| 563 | + } |
| 564 | + |
| 565 | + @Override |
| 566 | + public Boolean caseColumn(Column column) { |
| 567 | + Session session = Session.of(column).get(); |
| 568 | + ECrossReferenceAdapter crossReferencer = session.getSemanticCrossReferencer(); |
| 569 | + Collection<Setting> inverseReferences = crossReferencer.getInverseReferences(column, true); |
| 570 | + for (Setting setting : inverseReferences) { |
| 571 | + if (DatabasePackage.Literals.INDEX_ELEMENT__COLUMN == setting.getEStructuralFeature() || |
| 572 | + DatabasePackage.Literals.FOREIGN_KEY_ELEMENT__FK_COLUMN == setting.getEStructuralFeature() || |
| 573 | + DatabasePackage.Literals.FOREIGN_KEY_ELEMENT__PK_COLUMN == setting.getEStructuralFeature()) { |
| 574 | + SiriusUtil.delete(setting.getEObject()); |
| 575 | + } |
| 576 | + } |
| 577 | + SiriusUtil.delete(column); |
| 578 | + return true; |
| 579 | + } |
| 580 | + |
| 581 | + @Override |
| 582 | + public Boolean defaultCase(EObject object) { |
| 583 | + SiriusUtil.delete(object); |
| 584 | + return true; |
| 585 | + } |
| 586 | + |
| 587 | + }.doSwitch(databaseElement); |
| 588 | + } |
542 | 589 | } |
0 commit comments