diff options
| author | Belqassim Djafer | 2015-05-18 09:49:55 +0000 |
|---|---|---|
| committer | Pierre-Charles David | 2015-08-25 14:50:22 +0000 |
| commit | 27d55f94ccbad5201279b9a445dfae933c9fc272 (patch) | |
| tree | 5ee6b40ec0f522a1b30aac91614c462b3afd6f3b | |
| parent | 7d27c17d9a1ce24cd582a7bc9e077dcb7a9321dd (diff) | |
| download | org.eclipse.sirius-27d55f94ccbad5201279b9a445dfae933c9fc272.tar.gz org.eclipse.sirius-27d55f94ccbad5201279b9a445dfae933c9fc272.tar.xz org.eclipse.sirius-27d55f94ccbad5201279b9a445dfae933c9fc272.zip | |
[475824] Update the palette after viewpoint selection change
Bug: 475824
Change-Id: I8c33724f15e8b93d826117981611e68fb930ce27
Cherry-picked-from: 467512
Signed-off-by: Belqassim Djafer <belqassim.djafer@obeo.fr>
Signed-off-by: Pierre-Charles David <pierre-charles.david@obeo.fr>
Signed-off-by: Maxime Porhel <maxime.porhel@obeo.fr>
10 files changed, 399 insertions, 31 deletions
diff --git a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/palette/PaletteManagerImpl.java b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/palette/PaletteManagerImpl.java index 59c3721e63..df4e52ed6a 100644 --- a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/palette/PaletteManagerImpl.java +++ b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/palette/PaletteManagerImpl.java @@ -12,6 +12,7 @@ package org.eclipse.sirius.diagram.ui.tools.internal.palette; import java.text.MessageFormat; import java.util.Collection; +import java.util.HashSet; import java.util.Iterator; import java.util.LinkedHashSet; import java.util.List; @@ -46,7 +47,6 @@ import org.eclipse.sirius.business.api.query.IdentifiedElementQuery; import org.eclipse.sirius.business.api.session.Session; import org.eclipse.sirius.business.api.session.SessionManager; import org.eclipse.sirius.common.tools.api.interpreter.IInterpreter; -import org.eclipse.sirius.common.tools.api.util.EqualityHelper; import org.eclipse.sirius.common.tools.api.util.ReflectionHelper; import org.eclipse.sirius.common.tools.api.util.StringUtil; import org.eclipse.sirius.diagram.DDiagram; @@ -81,6 +81,7 @@ import com.google.common.base.Predicate; import com.google.common.collect.Iterables; import com.google.common.collect.Iterators; import com.google.common.collect.Lists; +import com.google.common.collect.Sets; import com.google.common.collect.UnmodifiableIterator; /** @@ -317,9 +318,16 @@ public class PaletteManagerImpl implements PaletteManager { * The {@session} containing the {@link DDiagram}. */ private void updatePaletteForDiagramWithLayer(DiagramDescription description, Session session, DDiagram dDiagram) { - /* Get the list of activated layers */ - final List<Layer> activatedLayers = dDiagram.getActivatedLayers(); - final List<Layer> deactivatedLayers = PaletteManagerImpl.getDeactivatedLayers(dDiagram, session, description); + // Copy of all layers of selected viewpoints + HashSet<Layer> layersInActivatedViewpoints = new HashSet<Layer>(new DiagramComponentizationManager().getAllLayers(session.getSelectedViewpoints(false), description)); + // Copy of diagram activated layers (in all Viewpoints: activated or + // not) + HashSet<Layer> activatedLayers = new HashSet<Layer>(dDiagram.getActivatedLayers()); + // Get the list of activated layers (of selected viewpoints) + final List<Layer> activatedLayersOfSelectedViewpoints = Lists.newArrayList(Sets.intersection(layersInActivatedViewpoints, activatedLayers)); + // Get the list of deactivated layers (deactivated layers of selected + // viewpoints and all layers of deselected viewpoints) + final List<Layer> deactivatedLayersAndAllLayersOfDeselectedViewpoints = Lists.newArrayList(Sets.symmetricDifference(layersInActivatedViewpoints, activatedLayers)); // Update the filters for (final ToolSection section : new DiagramComponentizationManager().getRootPaletteSections(session.getSelectedViewpoints(false), description)) { updateFilters(session, new DiagramComponentizationManager().getAllToolEntries(session.getSelectedViewpoints(false), section)); @@ -334,10 +342,10 @@ public class PaletteManagerImpl implements PaletteManager { updateContainer(session, dDiagram, paletteEntry.get(), new DiagramComponentizationManager().getAllToolEntries(session.getSelectedViewpoints(false), section)); } } - for (final Layer layer : Lists.newArrayList(deactivatedLayers)) { + for (final Layer layer : Lists.newArrayList(deactivatedLayersAndAllLayersOfDeselectedViewpoints)) { setLayerVisibility(layer, false); } - for (final Layer layer : Lists.newArrayList(activatedLayers)) { + for (final Layer layer : Lists.newArrayList(activatedLayersOfSelectedViewpoints)) { setLayerVisibility(layer, true); } } @@ -585,29 +593,6 @@ public class PaletteManagerImpl implements PaletteManager { return EcoreUtil.getURI(entry).toString(); } - // Browse list of all layers and remove from it all layers which are - // activated. - // all - activated = deactivated - private static List<Layer> getDeactivatedLayers(final DDiagram dDiagram, final Session session, final DiagramDescription description) { - // Copy of all layers - List<Layer> deactivatedLayers = Lists.newArrayList(new DiagramComponentizationManager().getAllLayers(session.getSelectedViewpoints(false), description)); - // Use a copy of activated layers to avoid a potential - // ConcurrentModificationException linked to async execution of this - // code during the activation of a Viewpoint. - List<Layer> activatedLayers = Lists.newArrayList(dDiagram.getActivatedLayers()); - for (Layer layer : activatedLayers) { - Iterator<Layer> iterator = deactivatedLayers.iterator(); - while (iterator.hasNext()) { - Layer allLayer = iterator.next(); - // If layer is activated (= in list of activated layer) - if (EqualityHelper.areEquals(layer, allLayer)) { - iterator.remove(); - } - } - } - return deactivatedLayers; - } - /** * Adds the default tools contributed by the environment in the same group * as the default GEF tools. diff --git a/plugins/org.eclipse.sirius.tests.junit/data/unit/tools/palette/extension/representations.aird b/plugins/org.eclipse.sirius.tests.junit/data/unit/tools/palette/extension/representations.aird new file mode 100644 index 0000000000..cb8230fb29 --- /dev/null +++ b/plugins/org.eclipse.sirius.tests.junit/data/unit/tools/palette/extension/representations.aird @@ -0,0 +1,144 @@ +<?xml version="1.0" encoding="UTF-8"?> +<viewpoint:DAnalysis xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:basicfamily="http://www.eclipse.org/sirius/sample/basicfamily" xmlns:description="http://www.eclipse.org/sirius/description/1.1.0" xmlns:description_1="http://www.eclipse.org/sirius/diagram/description/1.1.0" xmlns:diagram="http://www.eclipse.org/sirius/diagram/1.1.0" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmlns:style="http://www.eclipse.org/sirius/diagram/description/style/1.1.0" xmlns:viewpoint="http://www.eclipse.org/sirius/1.1.0" xsi:schemaLocation="http://www.eclipse.org/sirius/description/1.1.0 http://www.eclipse.org/sirius/1.1.0#//description http://www.eclipse.org/sirius/diagram/description/1.1.0 http://www.eclipse.org/sirius/diagram/1.1.0#//description http://www.eclipse.org/sirius/diagram/description/style/1.1.0 http://www.eclipse.org/sirius/diagram/1.1.0#//description/style" xmi:id="_0AsdwB_WEeWIiat630Qqjg" selectedViews="_m3EnMB_5EeWIiat630Qqjg _m3PmUB_5EeWIiat630Qqjg" version="10.0.0.201505222000"> + <semanticResources>My.basicfamily</semanticResources> + <ownedViews xmi:type="viewpoint:DRepresentationContainer" xmi:id="_3yzdcB_WEeWIiat630Qqjg"> + <viewpoint xmi:type="description:Viewpoint" href="platform:/resource/DesignerTestProject/family.odesign#//@ownedViewpoints[name='persons']"/> + </ownedViews> + <ownedViews xmi:type="viewpoint:DRepresentationContainer" xmi:id="_3y5kEB_WEeWIiat630Qqjg"> + <viewpoint xmi:type="description:Viewpoint" href="platform:/resource/DesignerTestProject/extended.odesign#//@ownedViewpoints[name='others']"/> + </ownedViews> + <ownedViews xmi:type="viewpoint:DRepresentationContainer" xmi:id="_m3EnMB_5EeWIiat630Qqjg"> + <ownedRepresentations xmi:type="diagram:DSemanticDiagram" xmi:id="_yzQ3sCCOEeWLIYOuPMQx9w" name="new personsDiagram"> + <ownedAnnotationEntries xmi:type="description:AnnotationEntry" xmi:id="_yzRewCCOEeWLIYOuPMQx9w" source="DANNOTATION_CUSTOMIZATION_KEY"> + <data xmi:type="diagram:ComputedStyleDescriptionRegistry" xmi:id="_yzRewSCOEeWLIYOuPMQx9w"/> + </ownedAnnotationEntries> + <ownedAnnotationEntries xmi:type="description:AnnotationEntry" xmi:id="_yzndACCOEeWLIYOuPMQx9w" source="GMF_DIAGRAMS"> + <data xmi:type="notation:Diagram" xmi:id="_yzndASCOEeWLIYOuPMQx9w" type="Sirius" element="_yzQ3sCCOEeWLIYOuPMQx9w" measurementUnit="Pixel"> + <children xmi:type="notation:Node" xmi:id="_yz2GgCCOEeWLIYOuPMQx9w" type="2001" element="_yzRewiCOEeWLIYOuPMQx9w"> + <children xmi:type="notation:Node" xmi:id="_y0dxkCCOEeWLIYOuPMQx9w" type="5002"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_y0dxkSCOEeWLIYOuPMQx9w" x="31"/> + </children> + <children xmi:type="notation:Node" xmi:id="_y0u3UCCOEeWLIYOuPMQx9w" type="3003" element="_yzRewyCOEeWLIYOuPMQx9w"> + <styles xmi:type="notation:ShapeStyle" xmi:id="_y0u3USCOEeWLIYOuPMQx9w" fontName="Segoe UI"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_y0u3UiCOEeWLIYOuPMQx9w"/> + </children> + <styles xmi:type="notation:ShapeStyle" xmi:id="_yz2GgSCOEeWLIYOuPMQx9w" fontName="Segoe UI" fontHeight="8"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yz2GgiCOEeWLIYOuPMQx9w" width="30" height="30"/> + </children> + <children xmi:type="notation:Node" xmi:id="_y0rM8CCOEeWLIYOuPMQx9w" type="2001" element="_yzRexCCOEeWLIYOuPMQx9w"> + <children xmi:type="notation:Node" xmi:id="_y0r0ACCOEeWLIYOuPMQx9w" type="5002"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_y0r0ASCOEeWLIYOuPMQx9w" x="31"/> + </children> + <children xmi:type="notation:Node" xmi:id="_y0veYCCOEeWLIYOuPMQx9w" type="3003" element="_yzRexSCOEeWLIYOuPMQx9w"> + <styles xmi:type="notation:ShapeStyle" xmi:id="_y0veYSCOEeWLIYOuPMQx9w" fontName="Segoe UI"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_y0veYiCOEeWLIYOuPMQx9w"/> + </children> + <styles xmi:type="notation:ShapeStyle" xmi:id="_y0rM8SCOEeWLIYOuPMQx9w" fontName="Segoe UI" fontHeight="8"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_y0rM8iCOEeWLIYOuPMQx9w" x="90" width="30" height="30"/> + </children> + <children xmi:type="notation:Node" xmi:id="_y0r0AiCOEeWLIYOuPMQx9w" type="2001" element="_yzRexiCOEeWLIYOuPMQx9w"> + <children xmi:type="notation:Node" xmi:id="_y0sbECCOEeWLIYOuPMQx9w" type="5002"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_y0sbESCOEeWLIYOuPMQx9w" x="31"/> + </children> + <children xmi:type="notation:Node" xmi:id="_y0veYyCOEeWLIYOuPMQx9w" type="3003" element="_yzRexyCOEeWLIYOuPMQx9w"> + <styles xmi:type="notation:ShapeStyle" xmi:id="_y0veZCCOEeWLIYOuPMQx9w" fontName="Segoe UI"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_y0veZSCOEeWLIYOuPMQx9w"/> + </children> + <styles xmi:type="notation:ShapeStyle" xmi:id="_y0r0AyCOEeWLIYOuPMQx9w" fontName="Segoe UI" fontHeight="8"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_y0r0BCCOEeWLIYOuPMQx9w" x="180" width="30" height="30"/> + </children> + <children xmi:type="notation:Node" xmi:id="_y0sbEiCOEeWLIYOuPMQx9w" type="2001" element="_yzReyCCOEeWLIYOuPMQx9w"> + <children xmi:type="notation:Node" xmi:id="_y0sbFSCOEeWLIYOuPMQx9w" type="5002"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_y0sbFiCOEeWLIYOuPMQx9w" x="31"/> + </children> + <children xmi:type="notation:Node" xmi:id="_y0wFcCCOEeWLIYOuPMQx9w" type="3003" element="_yzReySCOEeWLIYOuPMQx9w"> + <styles xmi:type="notation:ShapeStyle" xmi:id="_y0wFcSCOEeWLIYOuPMQx9w" fontName="Segoe UI"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_y0wFciCOEeWLIYOuPMQx9w"/> + </children> + <styles xmi:type="notation:ShapeStyle" xmi:id="_y0sbEyCOEeWLIYOuPMQx9w" fontName="Segoe UI" fontHeight="8"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_y0sbFCCOEeWLIYOuPMQx9w" x="270" width="30" height="30"/> + </children> + <children xmi:type="notation:Node" xmi:id="_y0tCICCOEeWLIYOuPMQx9w" type="2001" element="_yzReyiCOEeWLIYOuPMQx9w"> + <children xmi:type="notation:Node" xmi:id="_y0tCIyCOEeWLIYOuPMQx9w" type="5002"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_y0tCJCCOEeWLIYOuPMQx9w" x="31"/> + </children> + <children xmi:type="notation:Node" xmi:id="_y0wFcyCOEeWLIYOuPMQx9w" type="3003" element="_yzReyyCOEeWLIYOuPMQx9w"> + <styles xmi:type="notation:ShapeStyle" xmi:id="_y0wFdCCOEeWLIYOuPMQx9w" fontName="Segoe UI"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_y0wFdSCOEeWLIYOuPMQx9w"/> + </children> + <styles xmi:type="notation:ShapeStyle" xmi:id="_y0tCISCOEeWLIYOuPMQx9w" fontName="Segoe UI" fontHeight="8"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_y0tCIiCOEeWLIYOuPMQx9w" x="360" width="30" height="30"/> + </children> + <children xmi:type="notation:Node" xmi:id="_y0tpMCCOEeWLIYOuPMQx9w" type="2001" element="_yzRezCCOEeWLIYOuPMQx9w"> + <children xmi:type="notation:Node" xmi:id="_y0tpMyCOEeWLIYOuPMQx9w" type="5002"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_y0tpNCCOEeWLIYOuPMQx9w" x="31"/> + </children> + <children xmi:type="notation:Node" xmi:id="_y0wsgCCOEeWLIYOuPMQx9w" type="3003" element="_yzRezSCOEeWLIYOuPMQx9w"> + <styles xmi:type="notation:ShapeStyle" xmi:id="_y0wsgSCOEeWLIYOuPMQx9w" fontName="Segoe UI"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_y0wsgiCOEeWLIYOuPMQx9w"/> + </children> + <styles xmi:type="notation:ShapeStyle" xmi:id="_y0tpMSCOEeWLIYOuPMQx9w" fontName="Segoe UI" fontHeight="8"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_y0tpMiCOEeWLIYOuPMQx9w" x="450" width="30" height="30"/> + </children> + <styles xmi:type="notation:DiagramStyle" xmi:id="_yzndAiCOEeWLIYOuPMQx9w"/> + </data> + </ownedAnnotationEntries> + <ownedDiagramElements xmi:type="diagram:DNode" xmi:id="_yzRewiCOEeWLIYOuPMQx9w" name="Paul" width="3" height="3" resizeKind="NSEW"> + <target xmi:type="basicfamily:Man" href="My.basicfamily#//@members.0"/> + <semanticElements xmi:type="basicfamily:Man" href="My.basicfamily#//@members.0"/> + <ownedStyle xmi:type="diagram:Square" xmi:id="_yzRewyCOEeWLIYOuPMQx9w" color="114,159,207"> + <description xmi:type="style:SquareDescription" href="family.odesign#//@ownedViewpoints[name='persons']/@ownedRepresentations[name='personsDiagram']/@defaultLayer/@nodeMappings[name='Mannode']/@style"/> + </ownedStyle> + <actualMapping xmi:type="description_1:NodeMapping" href="family.odesign#//@ownedViewpoints[name='persons']/@ownedRepresentations[name='personsDiagram']/@defaultLayer/@nodeMappings[name='Mannode']"/> + </ownedDiagramElements> + <ownedDiagramElements xmi:type="diagram:DNode" xmi:id="_yzRexCCOEeWLIYOuPMQx9w" name="Elias" width="3" height="3" resizeKind="NSEW"> + <target xmi:type="basicfamily:Man" href="My.basicfamily#//@members.1"/> + <semanticElements xmi:type="basicfamily:Man" href="My.basicfamily#//@members.1"/> + <ownedStyle xmi:type="diagram:Square" xmi:id="_yzRexSCOEeWLIYOuPMQx9w" color="114,159,207"> + <description xmi:type="style:SquareDescription" href="family.odesign#//@ownedViewpoints[name='persons']/@ownedRepresentations[name='personsDiagram']/@defaultLayer/@nodeMappings[name='Mannode']/@style"/> + </ownedStyle> + <actualMapping xmi:type="description_1:NodeMapping" href="family.odesign#//@ownedViewpoints[name='persons']/@ownedRepresentations[name='personsDiagram']/@defaultLayer/@nodeMappings[name='Mannode']"/> + </ownedDiagramElements> + <ownedDiagramElements xmi:type="diagram:DNode" xmi:id="_yzRexiCOEeWLIYOuPMQx9w" name="Dave" width="3" height="3" resizeKind="NSEW"> + <target xmi:type="basicfamily:Man" href="My.basicfamily#//@members.3"/> + <semanticElements xmi:type="basicfamily:Man" href="My.basicfamily#//@members.3"/> + <ownedStyle xmi:type="diagram:Square" xmi:id="_yzRexyCOEeWLIYOuPMQx9w" color="114,159,207"> + <description xmi:type="style:SquareDescription" href="family.odesign#//@ownedViewpoints[name='persons']/@ownedRepresentations[name='personsDiagram']/@defaultLayer/@nodeMappings[name='Mannode']/@style"/> + </ownedStyle> + <actualMapping xmi:type="description_1:NodeMapping" href="family.odesign#//@ownedViewpoints[name='persons']/@ownedRepresentations[name='personsDiagram']/@defaultLayer/@nodeMappings[name='Mannode']"/> + </ownedDiagramElements> + <ownedDiagramElements xmi:type="diagram:DNode" xmi:id="_yzReyCCOEeWLIYOuPMQx9w" name="Alain" width="3" height="3" resizeKind="NSEW"> + <target xmi:type="basicfamily:Man" href="My.basicfamily#//@members.4"/> + <semanticElements xmi:type="basicfamily:Man" href="My.basicfamily#//@members.4"/> + <ownedStyle xmi:type="diagram:Square" xmi:id="_yzReySCOEeWLIYOuPMQx9w" color="114,159,207"> + <description xmi:type="style:SquareDescription" href="family.odesign#//@ownedViewpoints[name='persons']/@ownedRepresentations[name='personsDiagram']/@defaultLayer/@nodeMappings[name='Mannode']/@style"/> + </ownedStyle> + <actualMapping xmi:type="description_1:NodeMapping" href="family.odesign#//@ownedViewpoints[name='persons']/@ownedRepresentations[name='personsDiagram']/@defaultLayer/@nodeMappings[name='Mannode']"/> + </ownedDiagramElements> + <ownedDiagramElements xmi:type="diagram:DNode" xmi:id="_yzReyiCOEeWLIYOuPMQx9w" name="Bryan" width="3" height="3" resizeKind="NSEW"> + <target xmi:type="basicfamily:Man" href="My.basicfamily#//@members.6"/> + <semanticElements xmi:type="basicfamily:Man" href="My.basicfamily#//@members.6"/> + <ownedStyle xmi:type="diagram:Square" xmi:id="_yzReyyCOEeWLIYOuPMQx9w" color="114,159,207"> + <description xmi:type="style:SquareDescription" href="family.odesign#//@ownedViewpoints[name='persons']/@ownedRepresentations[name='personsDiagram']/@defaultLayer/@nodeMappings[name='Mannode']/@style"/> + </ownedStyle> + <actualMapping xmi:type="description_1:NodeMapping" href="family.odesign#//@ownedViewpoints[name='persons']/@ownedRepresentations[name='personsDiagram']/@defaultLayer/@nodeMappings[name='Mannode']"/> + </ownedDiagramElements> + <ownedDiagramElements xmi:type="diagram:DNode" xmi:id="_yzRezCCOEeWLIYOuPMQx9w" name="Albert" width="3" height="3" resizeKind="NSEW"> + <target xmi:type="basicfamily:Man" href="My.basicfamily#//@members.8"/> + <semanticElements xmi:type="basicfamily:Man" href="My.basicfamily#//@members.8"/> + <ownedStyle xmi:type="diagram:Square" xmi:id="_yzRezSCOEeWLIYOuPMQx9w" color="114,159,207"> + <description xmi:type="style:SquareDescription" href="family.odesign#//@ownedViewpoints[name='persons']/@ownedRepresentations[name='personsDiagram']/@defaultLayer/@nodeMappings[name='Mannode']/@style"/> + </ownedStyle> + <actualMapping xmi:type="description_1:NodeMapping" href="family.odesign#//@ownedViewpoints[name='persons']/@ownedRepresentations[name='personsDiagram']/@defaultLayer/@nodeMappings[name='Mannode']"/> + </ownedDiagramElements> + <description xmi:type="description_1:DiagramDescription" href="family.odesign#//@ownedViewpoints[name='persons']/@ownedRepresentations[name='personsDiagram']"/> + <filterVariableHistory xmi:type="diagram:FilterVariableHistory" xmi:id="_yzReziCOEeWLIYOuPMQx9w"/> + <activatedLayers xmi:type="description_1:Layer" href="family.odesign#//@ownedViewpoints[name='persons']/@ownedRepresentations[name='personsDiagram']/@defaultLayer"/> + <target xmi:type="basicfamily:Family" href="My.basicfamily#/"/> + </ownedRepresentations> + <viewpoint xmi:type="description:Viewpoint" href="family.odesign#//@ownedViewpoints[name='persons']"/> + </ownedViews> + <ownedViews xmi:type="viewpoint:DRepresentationContainer" xmi:id="_m3PmUB_5EeWIiat630Qqjg"> + <viewpoint xmi:type="description:Viewpoint" href="extended.odesign#//@ownedViewpoints[name='others']"/> + </ownedViews> +</viewpoint:DAnalysis> diff --git a/plugins/org.eclipse.sirius.tests.swtbot.support/src/org/eclipse/sirius/tests/swtbot/support/api/editor/SWTBotSiriusDiagramEditor.java b/plugins/org.eclipse.sirius.tests.swtbot.support/src/org/eclipse/sirius/tests/swtbot/support/api/editor/SWTBotSiriusDiagramEditor.java index 519205cb78..20a42ab058 100644 --- a/plugins/org.eclipse.sirius.tests.swtbot.support/src/org/eclipse/sirius/tests/swtbot/support/api/editor/SWTBotSiriusDiagramEditor.java +++ b/plugins/org.eclipse.sirius.tests.swtbot.support/src/org/eclipse/sirius/tests/swtbot/support/api/editor/SWTBotSiriusDiagramEditor.java @@ -44,6 +44,7 @@ import org.eclipse.gmf.runtime.diagram.ui.parts.DiagramGraphicalViewer; import org.eclipse.gmf.runtime.diagram.ui.parts.IDiagramGraphicalViewer; import org.eclipse.gmf.runtime.diagram.ui.parts.IDiagramWorkbenchPart; import org.eclipse.gmf.runtime.diagram.ui.requests.RequestConstants; +import org.eclipse.jface.bindings.keys.KeyStroke; import org.eclipse.jface.viewers.ISelection; import org.eclipse.sirius.business.api.query.EObjectQuery; import org.eclipse.sirius.business.api.session.Session; @@ -1748,6 +1749,7 @@ public class SWTBotSiriusDiagramEditor extends SWTBotGefEditor { Matcher<MenuItem> withLayerName = WidgetMatcherFactory.withText(layerName); SWTBotMenu layerButton = button.menuItem(withLayerName); layerButton.click(); + layerButton.pressShortcut(KeyStroke.getInstance(SWT.ESC)); } else { DesignerViews designerViews = new DesignerViews(designerBot); final SiriusOutlineView outlineView = designerViews.getOutlineView().layers(); diff --git a/plugins/org.eclipse.sirius.tests.swtbot/data/unit/tools/palette/extension/My.aird b/plugins/org.eclipse.sirius.tests.swtbot/data/unit/tools/palette/extension/My.aird new file mode 100644 index 0000000000..fff40c0358 --- /dev/null +++ b/plugins/org.eclipse.sirius.tests.swtbot/data/unit/tools/palette/extension/My.aird @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8"?> +<viewpoint:DAnalysis xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:description="http://www.eclipse.org/sirius/description/1.1.0" xmlns:description_1="http://www.eclipse.org/sirius/diagram/description/1.1.0" xmlns:diagram="http://www.eclipse.org/sirius/diagram/1.1.0" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmlns:viewpoint="http://www.eclipse.org/sirius/1.1.0" xsi:schemaLocation="http://www.eclipse.org/sirius/description/1.1.0 http://www.eclipse.org/sirius/1.1.0#//description http://www.eclipse.org/sirius/diagram/description/1.1.0 http://www.eclipse.org/sirius/diagram/1.1.0#//description" xmi:id="_Cx5V8CvEEeWSX-jWVe8JSA" selectedViews="_Ds3wcCvEEeWSX-jWVe8JSA _DtO80CvEEeWSX-jWVe8JSA" version="10.1.0.201507101000"> + <semanticResources>My.ecore</semanticResources> + <ownedViews xmi:type="viewpoint:DRepresentationContainer" xmi:id="_Ds3wcCvEEeWSX-jWVe8JSA"> + <ownedRepresentations xmi:type="diagram:DSemanticDiagram" xmi:id="_E02sMCvEEeWSX-jWVe8JSA" name="new classDiagram"> + <ownedAnnotationEntries xmi:type="description:AnnotationEntry" xmi:id="_E04hYCvEEeWSX-jWVe8JSA" source="DANNOTATION_CUSTOMIZATION_KEY"> + <data xmi:type="diagram:ComputedStyleDescriptionRegistry" xmi:id="_E04hYSvEEeWSX-jWVe8JSA"/> + </ownedAnnotationEntries> + <ownedAnnotationEntries xmi:type="description:AnnotationEntry" xmi:id="_E1MqcCvEEeWSX-jWVe8JSA" source="GMF_DIAGRAMS"> + <data xmi:type="notation:Diagram" xmi:id="_E1NRgCvEEeWSX-jWVe8JSA" type="Sirius" element="_E02sMCvEEeWSX-jWVe8JSA" measurementUnit="Pixel"> + <styles xmi:type="notation:DiagramStyle" xmi:id="_E1NRgSvEEeWSX-jWVe8JSA"/> + </data> + </ownedAnnotationEntries> + <description xmi:type="description_1:DiagramDescription" href="main.odesign#//@ownedViewpoints[name='classes']/@ownedRepresentations[name='classDiagram']"/> + <filterVariableHistory xmi:type="diagram:FilterVariableHistory" xmi:id="_E04hYivEEeWSX-jWVe8JSA"/> + <activatedLayers xmi:type="description_1:Layer" href="main.odesign#//@ownedViewpoints[name='classes']/@ownedRepresentations[name='classDiagram']/@defaultLayer"/> + <target xmi:type="ecore:EPackage" href="My.ecore#/"/> + </ownedRepresentations> + <viewpoint xmi:type="description:Viewpoint" href="main.odesign#//@ownedViewpoints[name='classes']"/> + </ownedViews> + <ownedViews xmi:type="viewpoint:DRepresentationContainer" xmi:id="_DtO80CvEEeWSX-jWVe8JSA"> + <viewpoint xmi:type="description:Viewpoint" href="extended.odesign#//@ownedViewpoints[name='others']"/> + </ownedViews> +</viewpoint:DAnalysis> diff --git a/plugins/org.eclipse.sirius.tests.swtbot/data/unit/tools/palette/extension/My.ecore b/plugins/org.eclipse.sirius.tests.swtbot/data/unit/tools/palette/extension/My.ecore new file mode 100644 index 0000000000..efd42a9be5 --- /dev/null +++ b/plugins/org.eclipse.sirius.tests.swtbot/data/unit/tools/palette/extension/My.ecore @@ -0,0 +1,3 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ecore:EPackage xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" + name=""/> diff --git a/plugins/org.eclipse.sirius.tests.swtbot/data/unit/tools/palette/extension/extended.odesign b/plugins/org.eclipse.sirius.tests.swtbot/data/unit/tools/palette/extension/extended.odesign new file mode 100644 index 0000000000..a9a2f08435 --- /dev/null +++ b/plugins/org.eclipse.sirius.tests.swtbot/data/unit/tools/palette/extension/extended.odesign @@ -0,0 +1,43 @@ +<?xml version="1.0" encoding="UTF-8"?> +<description:Group xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:description="http://www.eclipse.org/sirius/description/1.1.0" xmlns:description_1="http://www.eclipse.org/sirius/diagram/description/1.1.0" xmlns:style="http://www.eclipse.org/sirius/diagram/description/style/1.1.0" xmlns:tool="http://www.eclipse.org/sirius/diagram/description/tool/1.1.0" xmlns:tool_1="http://www.eclipse.org/sirius/description/tool/1.1.0" name="extended" version="10.1.0.201507101000"> + <ownedViewpoints name="others"> + <ownedRepresentationExtensions xsi:type="description_1:DiagramExtensionDescription" name="others" viewpointURI="viewpoint:/DesignerTestProject/classes" representationName="classDiagram"> + <layers name="Others_Layer_1"> + <nodeMappings name="EEnumNode" semanticCandidatesExpression="feature:eClassifiers" domainClass="ecore.EEnum"> + <style xsi:type="style:SquareDescription" labelExpression="[name/]" resizeKind="NSEW"> + <borderColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/> + <labelColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/> + <color xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='purple']"/> + </style> + </nodeMappings> + <toolSections name="OtherTools"> + <ownedTools xsi:type="tool:NodeCreationDescription" name="createEEnum_1" nodeMappings="//@ownedViewpoints[name='others']/@ownedRepresentationExtensions[name='others']/@layers[name='Others_Layer_1']/@nodeMappings[name='EEnumNode']"> + <variable name="container"/> + <viewVariable name="containerView"/> + <initialOperation> + <firstModelOperations xsi:type="tool_1:ChangeContext" browseExpression="var:container"/> + </initialOperation> + </ownedTools> + </toolSections> + </layers> + <layers name="Others_Layer_2"> + <nodeMappings name="EEnumNode2" semanticCandidatesExpression="feature:eClassifiers" domainClass="ecore.EEnum"> + <style xsi:type="style:SquareDescription" labelExpression="[name/]" resizeKind="NSEW"> + <borderColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/> + <labelColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/> + <color xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='purple']"/> + </style> + </nodeMappings> + <toolSections name="Tools"> + <ownedTools xsi:type="tool:NodeCreationDescription" name="createEEnum_2" nodeMappings="//@ownedViewpoints[name='others']/@ownedRepresentationExtensions[name='others']/@layers[name='Others_Layer_2']/@nodeMappings[name='EEnumNode2']"> + <variable name="container"/> + <viewVariable name="containerView"/> + <initialOperation> + <firstModelOperations xsi:type="tool_1:ChangeContext" browseExpression="var:container"/> + </initialOperation> + </ownedTools> + </toolSections> + </layers> + </ownedRepresentationExtensions> + </ownedViewpoints> +</description:Group> diff --git a/plugins/org.eclipse.sirius.tests.swtbot/data/unit/tools/palette/extension/main.odesign b/plugins/org.eclipse.sirius.tests.swtbot/data/unit/tools/palette/extension/main.odesign new file mode 100644 index 0000000000..8d278a2710 --- /dev/null +++ b/plugins/org.eclipse.sirius.tests.swtbot/data/unit/tools/palette/extension/main.odesign @@ -0,0 +1,46 @@ +<?xml version="1.0" encoding="UTF-8"?> +<description:Group xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:description="http://www.eclipse.org/sirius/description/1.1.0" xmlns:description_1="http://www.eclipse.org/sirius/diagram/description/1.1.0" xmlns:style="http://www.eclipse.org/sirius/diagram/description/style/1.1.0" xmlns:tool="http://www.eclipse.org/sirius/diagram/description/tool/1.1.0" xmlns:tool_1="http://www.eclipse.org/sirius/description/tool/1.1.0" version="10.1.0.201507101000"> + <ownedViewpoints name="classes"> + <ownedRepresentations xsi:type="description_1:DiagramDescription" name="classDiagram" domainClass="ecore.EPackage"> + <defaultLayer name="Default"> + <nodeMappings name="ClassNode" semanticCandidatesExpression="feature:eClassifiers" domainClass="ecore.EClass"> + <style xsi:type="style:SquareDescription" resizeKind="NSEW"> + <borderColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/> + <labelColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/> + <color xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='blue']"/> + </style> + </nodeMappings> + </defaultLayer> + <additionalLayers name="Layer_1" reusedMappings="//@ownedViewpoints[name='classes']/@ownedRepresentations[name='classDiagram']/@defaultLayer/@nodeMappings[name='ClassNode']" activeByDefault="true"> + <toolSections name="Tools"> + <ownedTools xsi:type="tool:NodeCreationDescription" name="createClass_1" nodeMappings="//@ownedViewpoints[name='classes']/@ownedRepresentations[name='classDiagram']/@defaultLayer/@nodeMappings[name='ClassNode']"> + <variable name="container"/> + <viewVariable name="containerView"/> + <initialOperation> + <firstModelOperations xsi:type="tool_1:ChangeContext" browseExpression="var:container"> + <subModelOperations xsi:type="tool_1:CreateInstance" typeName="EClass" referenceName="eClassifiers"> + <subModelOperations xsi:type="tool_1:SetValue" featureName="name" valueExpression="['Class'+container.ownedClassifiers->filter(EClass)->size()/] "/> + </subModelOperations> + </firstModelOperations> + </initialOperation> + </ownedTools> + </toolSections> + </additionalLayers> + <additionalLayers name="Layer_2"> + <toolSections name="Tools"> + <ownedTools xsi:type="tool:NodeCreationDescription" name="createClass_2" nodeMappings="//@ownedViewpoints[name='classes']/@ownedRepresentations[name='classDiagram']/@defaultLayer/@nodeMappings[name='ClassNode']"> + <variable name="container"/> + <viewVariable name="containerView"/> + <initialOperation> + <firstModelOperations xsi:type="tool_1:ChangeContext" browseExpression="var:container"> + <subModelOperations xsi:type="tool_1:CreateInstance" typeName="EClass" referenceName="eClassifiers"> + <subModelOperations xsi:type="tool_1:SetValue" featureName="name" valueExpression="['Class'+container.ownedClassifiers->filter(EClass)->size()/] "/> + </subModelOperations> + </firstModelOperations> + </initialOperation> + </ownedTools> + </toolSections> + </additionalLayers> + </ownedRepresentations> + </ownedViewpoints> +</description:Group> diff --git a/plugins/org.eclipse.sirius.tests.swtbot/src/org/eclipse/sirius/tests/swtbot/PaletteManagerAfterVSMSelectionChange.java b/plugins/org.eclipse.sirius.tests.swtbot/src/org/eclipse/sirius/tests/swtbot/PaletteManagerAfterVSMSelectionChange.java new file mode 100644 index 0000000000..ae6a94c55c --- /dev/null +++ b/plugins/org.eclipse.sirius.tests.swtbot/src/org/eclipse/sirius/tests/swtbot/PaletteManagerAfterVSMSelectionChange.java @@ -0,0 +1,122 @@ +/******************************************************************************* + * Copyright (c) 2015 THALES GLOBAL SERVICES and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Obeo - initial API and implementation + *******************************************************************************/ +package org.eclipse.sirius.tests.swtbot; + +import java.util.Arrays; +import java.util.Collections; +import java.util.SortedSet; +import java.util.TreeSet; + +import org.eclipse.gef.palette.PaletteEntry; +import org.eclipse.sirius.diagram.DDiagram; +import org.eclipse.sirius.diagram.ui.tools.internal.palette.SectionPaletteDrawer; +import org.eclipse.sirius.diagram.ui.tools.internal.palette.SiriusPaletteViewer; +import org.eclipse.sirius.tests.swtbot.support.api.AbstractSiriusSwtBotGefTestCase; +import org.eclipse.sirius.tests.swtbot.support.api.business.UIResource; +import org.eclipse.sirius.tests.swtbot.support.api.editor.SWTBotSiriusDiagramEditor; + +import com.google.common.base.Predicate; +import com.google.common.collect.Iterables; +import com.google.common.collect.Sets; + +/** + * Tests palette update after viewpoint selection change. + * + * @author <a href="mailto:belqassim.djafer@obeo.fr">Belqassim Djafer</a> + * + */ +public class PaletteManagerAfterVSMSelectionChange extends AbstractSiriusSwtBotGefTestCase { + + private static final String DATA_UNIT_DIR = "/data/unit/tools/palette/extension/"; + + private static final String FILE_DIR = "/"; + + private static final String MODEL_NAME = "My.ecore"; + + private static final String MODELER_NAME = "main.odesign"; + + private static final String MODELER_EXTENSION_NAME = "extended.odesign"; + + private static final String SESSION_NAME = "My.aird"; + + private static final String REPRESENTATION_DESC_NAME = "classDiagram"; + + private static final String REPRESENTATION_INST_DESC_NAME = "new classDiagram"; + + private static final String EXTENSION_VIEWPOINT_NAME = "others"; + + private static final String LAYER_1 = "Layer_1"; + + private static final String OTHERS_LAYER_1 = "Others_Layer_1"; + + private static final SortedSet<String> EXPECTED_ENTRIES_LAYER_PERSON1_SHOWN = Sets.newTreeSet(Arrays.asList("createClass_1")); + + private static final SortedSet<String> EXPECTED_ENTRIES_LAYER_PERSON1_OTHERS1_SHOWN = Sets.newTreeSet(Arrays.asList("createClass_1", "createEEnum_1")); + + /** + * {@inheritDoc} + */ + @Override + protected void onSetUpAfterOpeningDesignerPerspective() throws Exception { + copyFileToTestProject(Activator.PLUGIN_ID, DATA_UNIT_DIR, MODEL_NAME, SESSION_NAME, MODELER_NAME, MODELER_EXTENSION_NAME); + final UIResource sessionAirdResource = new UIResource(designerProject, FILE_DIR, SESSION_NAME); + localSession = designerPerspective.openSessionFromFile(sessionAirdResource); + } + + /** + * {@inheritDoc} + */ + @Override + protected void tearDown() throws Exception { + localSession = null; + super.tearDown(); + } + + /** + * Ensure that only selected viewpoint tools still available from the + * palette after a viewpoint selection change. + * + * @throws Exception + * Test error. + */ + public void testHideShowLayersAfterDiagramCreation() throws Exception { + editor = (SWTBotSiriusDiagramEditor) openRepresentation(localSession.getOpenedSession(), REPRESENTATION_DESC_NAME, REPRESENTATION_INST_DESC_NAME, DDiagram.class); + editor.changeLayerActivation(LAYER_1); + editor.changeLayerActivation(OTHERS_LAYER_1); + assertEquals("Palette entries content is wrong", EXPECTED_ENTRIES_LAYER_PERSON1_OTHERS1_SHOWN, getVisiblePaletteEntries()); + localSession.changeViewpointSelection(Collections.<String> emptySet(), Collections.singleton(EXTENSION_VIEWPOINT_NAME)); + assertEquals("Palette entries content is wrong", EXPECTED_ENTRIES_LAYER_PERSON1_SHOWN, getVisiblePaletteEntries()); + } + + private TreeSet<String> getVisiblePaletteEntries() { + Iterable<SectionPaletteDrawer> filtered = Iterables.filter(((SiriusPaletteViewer) editor.getSiriusPaletteGroupEditPartBot().part().getViewer()).getPaletteRoot().getChildren(), + SectionPaletteDrawer.class); + TreeSet<String> result = Sets.newTreeSet(); + for (PaletteEntry paletteEntry : filtered) { + Iterable<PaletteEntry> visibleEntries = Iterables.filter(((SectionPaletteDrawer) paletteEntry).getChildren(), VISIBLE_ENTRY); + for (PaletteEntry visiblePaletteEntry : visibleEntries) { + result.add(visiblePaletteEntry.getLabel()); + } + } + return result; + } + + private static final Predicate<PaletteEntry> VISIBLE_ENTRY = new Predicate<PaletteEntry>() { + /** + * {@inheritDoc} + */ + @Override + public boolean apply(PaletteEntry input) { + return input.isVisible(); + } + }; + +} diff --git a/plugins/org.eclipse.sirius.tests.swtbot/src/org/eclipse/sirius/tests/swtbot/PaletteViewManagementTest.java b/plugins/org.eclipse.sirius.tests.swtbot/src/org/eclipse/sirius/tests/swtbot/PaletteViewManagementTest.java index 2ac6654ebd..f0cd551e0f 100644 --- a/plugins/org.eclipse.sirius.tests.swtbot/src/org/eclipse/sirius/tests/swtbot/PaletteViewManagementTest.java +++ b/plugins/org.eclipse.sirius.tests.swtbot/src/org/eclipse/sirius/tests/swtbot/PaletteViewManagementTest.java @@ -14,7 +14,6 @@ import org.eclipse.sirius.diagram.DDiagram; import org.eclipse.sirius.tests.swtbot.support.api.AbstractSiriusSwtBotGefTestCase; import org.eclipse.sirius.tests.swtbot.support.api.business.UIResource; import org.eclipse.sirius.tests.swtbot.support.api.condition.CheckSelectedCondition; -import org.eclipse.sirius.tests.swtbot.support.api.dialog.ExportAsImageHelper; import org.eclipse.sirius.tests.swtbot.support.api.editor.SWTBotSiriusDiagramEditor; import org.eclipse.sirius.tests.swtbot.support.utils.SWTBotUtils; import org.eclipse.swtbot.eclipse.finder.widgets.SWTBotView; @@ -63,7 +62,6 @@ public class PaletteViewManagementTest extends AbstractSiriusSwtBotGefTestCase { protected void tearDown() throws Exception { localSession = null; super.tearDown(); - new ExportAsImageHelper().resetDialogSettings(); } /** diff --git a/plugins/org.eclipse.sirius.tests.swtbot/src/org/eclipse/sirius/tests/swtbot/suite/AllTestSuite.java b/plugins/org.eclipse.sirius.tests.swtbot/src/org/eclipse/sirius/tests/swtbot/suite/AllTestSuite.java index 3444148c93..cbb3b02ee0 100644 --- a/plugins/org.eclipse.sirius.tests.swtbot/src/org/eclipse/sirius/tests/swtbot/suite/AllTestSuite.java +++ b/plugins/org.eclipse.sirius.tests.swtbot/src/org/eclipse/sirius/tests/swtbot/suite/AllTestSuite.java @@ -351,6 +351,7 @@ public class AllTestSuite extends TestCase { suite.addTestSuite(GroupingContentProviderTest.class); suite.addTestSuite(GroupingContentProviderByContainingTest.class); suite.addTestSuite(PaletteViewManagementTest.class); + suite.addTestSuite(PaletteManagerAfterVSMSelectionChange.class); suite.addTestSuite(CreateRepresentationFromSessionTest.class); suite.addTestSuite(ToolCreationPositionTest.class); suite.addTestSuite(LocalSessionViewTest.class); |
