Skip to content
Snippets Groups Projects
Commit 766587e7 authored by Dongyue Mou's avatar Dongyue Mou
Browse files

fixed dangling reference problem when save the project after deleting a component

fixed consturctor exception from SIL-Plugin
added transform action for table specification
refs 1030
parent abe9e8b6
No related branches found
No related tags found
No related merge requests found
...@@ -27,6 +27,7 @@ import org.fortiss.tooling.base.model.element.IConnector; ...@@ -27,6 +27,7 @@ import org.fortiss.tooling.base.model.element.IConnector;
import org.fortiss.tooling.base.model.element.IHierarchicElement; import org.fortiss.tooling.base.model.element.IHierarchicElement;
import org.fortiss.tooling.base.model.element.IHierarchicElementContainer; import org.fortiss.tooling.base.model.element.IHierarchicElementContainer;
import org.fortiss.tooling.base.model.element.IModelElement; import org.fortiss.tooling.base.model.element.IModelElement;
import org.fortiss.tooling.base.model.element.IModelElementReference;
import org.fortiss.tooling.base.model.element.IModelElementSpecification; import org.fortiss.tooling.base.model.element.IModelElementSpecification;
import org.fortiss.tooling.kernel.extension.IElementCompositor; import org.fortiss.tooling.kernel.extension.IElementCompositor;
import org.fortiss.tooling.kernel.service.IConnectionCompositorService; import org.fortiss.tooling.kernel.service.IConnectionCompositorService;
...@@ -69,8 +70,9 @@ public abstract class HierarchicElementCompositorBase<HE extends IHierarchicElem ...@@ -69,8 +70,9 @@ public abstract class HierarchicElementCompositorBase<HE extends IHierarchicElem
if(!iterateDecomposeSpecifications((IModelElement)contained)) { if(!iterateDecomposeSpecifications((IModelElement)contained)) {
return false; return false;
} }
// TODO (CD): https://af3.fortiss.org/issues/389 if(!iterateDecomposeReference((IModelElement)contained)) {
// handle reference removal return false;
}
} }
if(contained instanceof IHierarchicElementContainer) { if(contained instanceof IHierarchicElementContainer) {
if(!iterateDecomposeSubelements((IHierarchicElementContainer)contained)) { if(!iterateDecomposeSubelements((IHierarchicElementContainer)contained)) {
...@@ -101,6 +103,21 @@ public abstract class HierarchicElementCompositorBase<HE extends IHierarchicElem ...@@ -101,6 +103,21 @@ public abstract class HierarchicElementCompositorBase<HE extends IHierarchicElem
return decomposeSpecific(contained); return decomposeSpecific(contained);
} }
/**
* Iterates over references of given {@link IModelElement} and performs
* decomposition.
*/
private boolean iterateDecomposeReference(IModelElement me) {
ArrayList<IModelElementReference> list =
new ArrayList<IModelElementReference>(me.getReferencedByList());
for(IModelElementReference ref : list) {
if(!decomposeReference(ref)) {
return false;
}
}
return true;
}
/** /**
* Iterates over specifications of given {@link IModelElement} and performs * Iterates over specifications of given {@link IModelElement} and performs
* decomposition. * decomposition.
...@@ -171,10 +188,13 @@ public abstract class HierarchicElementCompositorBase<HE extends IHierarchicElem ...@@ -171,10 +188,13 @@ public abstract class HierarchicElementCompositorBase<HE extends IHierarchicElem
return true; return true;
} }
/** Base implementation yet empty. */ /**
protected boolean decomposeReferences(@SuppressWarnings("unused") EObject element) { * Base implementation uses element compositor service's decomposition by
// TODO (FH): https://af3.fortiss.org/issues/389 * default and returns <code>true</code>. Subclasses may override.
// implement reference removal */
protected boolean decomposeReference(IModelElementReference element) {
element.setReference(null);
EcoreUtil.delete(element);
return true; return true;
} }
...@@ -202,6 +222,11 @@ public abstract class HierarchicElementCompositorBase<HE extends IHierarchicElem ...@@ -202,6 +222,11 @@ public abstract class HierarchicElementCompositorBase<HE extends IHierarchicElem
return false; return false;
} }
} }
if(IElementCompositorService.INSTANCE.canDecompose(element)) {
return IElementCompositorService.INSTANCE.decompose(element);
}
EcoreUtil.delete(element); EcoreUtil.delete(element);
return true; return true;
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment