[456188] Filter for inherited EReferences listed within the EClass
This add a filter 'Hide inherited reference'. If the filter is active, a
class node will only show references that are defined by that class.
Bug: 456188
Task-Url: https://bugs.eclipse.org/bugs/show_bug.cgi?id=456188
Change-Id: I1b1fc003ca4336bc7dfba1b2f0dd00430b16ea8c
Signed-off-by: Felix Dorner <felix.dorner@gmail.com>
diff --git a/org.eclipse.emf.ecoretools.design/description/ecore.odesign b/org.eclipse.emf.ecoretools.design/description/ecore.odesign
index d1bd947..a4cda03 100644
--- a/org.eclipse.emf.ecoretools.design/description/ecore.odesign
+++ b/org.eclipse.emf.ecoretools.design/description/ecore.odesign
@@ -18,6 +18,9 @@
<filters xsi:type="filter:CompositeFilterDescription" name="Hide references (nodes)">
<filters xsi:type="filter:MappingFilter" mappings="//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EReferenceNode']"/>
</filters>
+ <filters xsi:type="filter:CompositeFilterDescription" name="Hide inherited references (nodes)">
+ <filters xsi:type="filter:MappingFilter" mappings="//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EReferenceNode']" viewConditionExpression="aql:self.eContainer().oclAsType(viewpoint::DSemanticDecorator).target = self.oclAsType(viewpoint::DSemanticDecorator).target.eContainer()"/>
+ </filters>
<filters xsi:type="filter:CompositeFilterDescription" name="Hide derived features">
<filters xsi:type="filter:MappingFilter" mappings="//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference'] //@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute'] //@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='Bi-directional%20EC_EReference%20'] //@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EReferenceNode']" semanticConditionExpression="aql:not self.derived"/>
</filters>
diff --git a/org.eclipse.emf.ecoretools.design/src/org/eclipse/emf/ecoretools/design/service/DesignServices.java b/org.eclipse.emf.ecoretools.design/src/org/eclipse/emf/ecoretools/design/service/DesignServices.java
index 4163744..4f9e56a 100644
--- a/org.eclipse.emf.ecoretools.design/src/org/eclipse/emf/ecoretools/design/service/DesignServices.java
+++ b/org.eclipse.emf.ecoretools.design/src/org/eclipse/emf/ecoretools/design/service/DesignServices.java
@@ -230,10 +230,10 @@
public Set<EClass> getDisplayedEClasses(DSemanticDiagram diagram) {
Set<EClass> result = Sets.newLinkedHashSet();
- Iterator<DDiagramElement> it = new DDiagramQuery(diagram).getAllDiagramElements().iterator();
+ Iterator<DNodeList> it = Iterators.filter(new DDiagramQuery(diagram).getAllDiagramElements().iterator(), DNodeList.class);
while (it.hasNext()) {
- DDiagramElement dec = it.next();
- if (dec.getTarget() instanceof EClass) {
+ DNodeList dec = it.next();
+ if (dec.getTarget() instanceof EClass && dec.isVisible()) {
result.add((EClass) dec.getTarget());
}
}