Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEsteban Dugueperoux2016-03-25 14:48:30 +0000
committerLaurent Redor2016-04-15 11:57:40 +0000
commitfb6ea09f97dc0da28e8f7fbcf5b075f05fbbe9f4 (patch)
treeef9cdafb1dfb3655d02a033e4204046380d8d54c
parent7df68532a3c67fd588af6be089a9595274a54075 (diff)
downloadorg.eclipse.sirius-fb6ea09f97dc0da28e8f7fbcf5b075f05fbbe9f4.tar.gz
org.eclipse.sirius-fb6ea09f97dc0da28e8f7fbcf5b075f05fbbe9f4.tar.xz
org.eclipse.sirius-fb6ea09f97dc0da28e8f7fbcf5b075f05fbbe9f4.zip
[490384] Add "Reset to default filters" action
- Add "Reset to default filters" action in the drop-down filters menu, visible only when there is a default concern in the corresponding diagram description. This action is enabled only if the set of activated filters is different of the set of filters available in the default concern. - Add ResetToDefaultFiltersActionTests SWTBot tests. Bug: 490384 Change-Id: I8b00ead6d3fe48037153eefd7a68db0c35b6bb97 Signed-off-by: Laurent Redor <laurent.redor@obeo.fr>
-rw-r--r--plugins/org.eclipse.sirius.diagram.ui/plugin.properties4
-rw-r--r--plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/editor/tabbar/FiltersContributionItem.java23
-rw-r--r--plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/editor/tabbar/actions/ResetToDefaultFiltersAction.java80
-rw-r--r--plugins/org.eclipse.sirius.diagram.ui/src/org/eclipse/sirius/diagram/ui/provider/Messages.java8
-rw-r--r--plugins/org.eclipse.sirius.tests.swtbot/data/unit/tabbar/bug490384/bug490384.aird7
-rw-r--r--plugins/org.eclipse.sirius.tests.swtbot/data/unit/tabbar/bug490384/bug490384.ecore9
-rw-r--r--plugins/org.eclipse.sirius.tests.swtbot/data/unit/tabbar/bug490384/bug490384.odesign45
-rw-r--r--plugins/org.eclipse.sirius.tests.swtbot/src/org/eclipse/sirius/tests/swtbot/suite/AllTestSuite.java2
-rw-r--r--plugins/org.eclipse.sirius.tests.swtbot/src/org/eclipse/sirius/tests/swtbot/tabbar/ResetToDefaultFiltersActionTests.java213
9 files changed, 375 insertions, 16 deletions
diff --git a/plugins/org.eclipse.sirius.diagram.ui/plugin.properties b/plugins/org.eclipse.sirius.diagram.ui/plugin.properties
index dfa30f9794..3196c836c9 100644
--- a/plugins/org.eclipse.sirius.diagram.ui/plugin.properties
+++ b/plugins/org.eclipse.sirius.diagram.ui/plugin.properties
@@ -1,5 +1,5 @@
# ====================================================================
-# Copyright (c) 2007, 2015 THALES GLOBAL SERVICES.
+# Copyright (c) 2007, 2016 THALES GLOBAL SERVICES.
# 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
@@ -1169,6 +1169,8 @@ WorkspaceImagePathSelector_dialogMessage = Select the image file:
WorkspaceImagePathSelector_dialogTitle = Background image
WorkspacePathValidator_invalidPahtStatusMessage = NonExistingImageResource
WorkspacePathValidator_invalidPathDecorationDescriptionText = The specified path does not correspond to an image in the workspace or in the runtime
+ResetToDefaultFiltersAction_text = Reset to default filters
+ResetToDefaultFiltersAction_tooltip = Reset diagram to its initial filters
_UI_BundledImage_providedShapeID_feature = Provided Shape ID
_UI_BundledImageShape_providedShape_literal = providedShape
_UI_BundledImageDescription_providedShapeID_feature = Provided Shape ID
diff --git a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/editor/tabbar/FiltersContributionItem.java b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/editor/tabbar/FiltersContributionItem.java
index 2bcb48e776..01693a830f 100644
--- a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/editor/tabbar/FiltersContributionItem.java
+++ b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/editor/tabbar/FiltersContributionItem.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2010, 2015 THALES GLOBAL SERVICES and others.
+ * Copyright (c) 2010, 2016 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
@@ -18,13 +18,16 @@ import org.eclipse.gmf.runtime.notation.Diagram;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.Separator;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.sirius.business.api.query.IdentifiedElementQuery;
import org.eclipse.sirius.diagram.DDiagram;
import org.eclipse.sirius.diagram.description.DiagramDescription;
+import org.eclipse.sirius.diagram.description.concern.ConcernDescription;
import org.eclipse.sirius.diagram.description.filter.FilterDescription;
import org.eclipse.sirius.diagram.ui.provider.DiagramUIPlugin;
import org.eclipse.sirius.diagram.ui.provider.Messages;
+import org.eclipse.sirius.diagram.ui.tools.internal.editor.tabbar.actions.ResetToDefaultFiltersAction;
import org.eclipse.sirius.diagram.ui.tools.internal.handler.ChangeFilterActivation;
import org.eclipse.swt.graphics.Image;
@@ -38,11 +41,6 @@ public class FiltersContributionItem extends AbstractMenuContributionItem {
/** The filters icon descriptor. */
private static final ImageDescriptor DESC_FILTER = DiagramUIPlugin.Implementation.getBundledImageDescriptor("icons/filters.gif"); //$NON-NLS-1$
- /**
- * {@inheritDoc}
- *
- * @see org.eclipse.sirius.diagram.tools.internal.editor.tabbar.AbstractMenuContributionItem#getMenuImage()
- */
@Override
protected Image getMenuImage() {
return getImage();
@@ -65,24 +63,21 @@ public class FiltersContributionItem extends AbstractMenuContributionItem {
return DiagramUIPlugin.getPlugin().getImage(DESC_FILTER);
}
- /**
- * {@inheritDoc}
- */
@Override
protected String getLabel() {
return Messages.FiltersContributionItem_label;
}
- /**
- * {@inheritDoc}
- *
- * @see org.eclipse.sirius.diagram.tools.internal.editor.tabbar.AbstractMenuContributionItem#menuShow(org.eclipse.jface.action.IMenuManager)
- */
@Override
protected void menuShow(IMenuManager manager) {
for (final FilterDescription filter : getFilters()) {
addFilterMenuItem(manager, filter);
}
+ ConcernDescription defaultConcern = diagram.getDescription().getDefaultConcern();
+ if (defaultConcern != null) {
+ manager.add(new Separator());
+ manager.add(new ResetToDefaultFiltersAction(session.getTransactionalEditingDomain(), diagram));
+ }
}
private Collection<FilterDescription> getFilters() {
diff --git a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/editor/tabbar/actions/ResetToDefaultFiltersAction.java b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/editor/tabbar/actions/ResetToDefaultFiltersAction.java
new file mode 100644
index 0000000000..ad0f061792
--- /dev/null
+++ b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/editor/tabbar/actions/ResetToDefaultFiltersAction.java
@@ -0,0 +1,80 @@
+/*******************************************************************************
+ * Copyright (c) 2016 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.diagram.ui.tools.internal.editor.tabbar.actions;
+
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.emf.transaction.TransactionalEditingDomain;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.sirius.diagram.DDiagram;
+import org.eclipse.sirius.diagram.description.DiagramDescription;
+import org.eclipse.sirius.diagram.description.concern.ConcernDescription;
+import org.eclipse.sirius.diagram.ui.provider.DiagramUIPlugin;
+import org.eclipse.sirius.diagram.ui.provider.Messages;
+import org.eclipse.sirius.diagram.ui.tools.api.image.DiagramImagesPath;
+import org.eclipse.sirius.diagram.ui.tools.internal.commands.SetDefaultConcernCommand;
+import org.eclipse.swt.SWT;
+
+/**
+ * An {@link Action} to set filters to default concern.
+ *
+ * @author <a href="mailto:esteban.dugueperoux@obeo.fr">Esteban Dugueperoux</a>
+ */
+public class ResetToDefaultFiltersAction extends Action {
+
+ /** The ID of this action. */
+ public static final String ID = ResetToDefaultFiltersAction.class.getName();
+
+ private TransactionalEditingDomain domain;
+
+ private DDiagram dDiagram;
+
+ /**
+ * Default constructor.
+ *
+ * @param domain
+ * the {@link TransactionalEditingDomain} on which set filters to
+ * default concern
+ * @param dDiagram
+ * the {@link DDiagram} on which set filters to default concern
+ */
+ public ResetToDefaultFiltersAction(TransactionalEditingDomain domain, DDiagram dDiagram) {
+ super(Messages.ResetToDefaultFiltersAction_text, IAction.AS_PUSH_BUTTON);
+ setId(ID);
+ setToolTipText(Messages.ResetToDefaultFiltersAction_tooltip);
+ ImageDescriptor enabledImage = DiagramUIPlugin.Implementation.getBundledImageDescriptor(DiagramImagesPath.UNDO_ICON);
+ ImageDescriptor disabledImage = ImageDescriptor.createWithFlags(enabledImage, SWT.IMAGE_DISABLE);
+ setImageDescriptor(enabledImage);
+ setDisabledImageDescriptor(disabledImage);
+ this.domain = domain;
+ this.dDiagram = dDiagram;
+ }
+
+ @Override
+ public boolean isEnabled() {
+ boolean isEnabled = true;
+ DiagramDescription description = dDiagram.getDescription();
+ if (description != null) {
+ ConcernDescription defaultConcern = description.getDefaultConcern();
+ if (defaultConcern != null) {
+ isEnabled = !EcoreUtil.equals(defaultConcern.getFilters(), dDiagram.getActivatedFilters());
+ }
+ }
+ return isEnabled;
+ }
+
+ @Override
+ public void run() {
+ domain.getCommandStack().execute(new SetDefaultConcernCommand(domain, dDiagram));
+ }
+
+}
diff --git a/plugins/org.eclipse.sirius.diagram.ui/src/org/eclipse/sirius/diagram/ui/provider/Messages.java b/plugins/org.eclipse.sirius.diagram.ui/src/org/eclipse/sirius/diagram/ui/provider/Messages.java
index f7754a1cbe..fe740b9f5f 100644
--- a/plugins/org.eclipse.sirius.diagram.ui/src/org/eclipse/sirius/diagram/ui/provider/Messages.java
+++ b/plugins/org.eclipse.sirius.diagram.ui/src/org/eclipse/sirius/diagram/ui/provider/Messages.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2015 Obeo.
+ * Copyright (c) 2015, 2016 Obeo.
* 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
@@ -1292,6 +1292,12 @@ public final class Messages {
@TranslatableMessage
public static String WorkspacePathValidator_invalidPathDecorationDescriptionText;
+ @TranslatableMessage
+ public static String ResetToDefaultFiltersAction_text;
+
+ @TranslatableMessage
+ public static String ResetToDefaultFiltersAction_tooltip;
+
// CHECKSTYLE:ON
private Messages() {
diff --git a/plugins/org.eclipse.sirius.tests.swtbot/data/unit/tabbar/bug490384/bug490384.aird b/plugins/org.eclipse.sirius.tests.swtbot/data/unit/tabbar/bug490384/bug490384.aird
new file mode 100644
index 0000000000..43c80884b2
--- /dev/null
+++ b/plugins/org.eclipse.sirius.tests.swtbot/data/unit/tabbar/bug490384/bug490384.aird
@@ -0,0 +1,7 @@
+<?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: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" xmi:id="_dIyp8PJxEeWDzI4EtU3PBg" selectedViews="_dgTyEPJxEeWDzI4EtU3PBg" version="10.1.0.201509162000">
+ <semanticResources>bug490384.ecore</semanticResources>
+ <ownedViews xmi:type="viewpoint:DRepresentationContainer" xmi:id="_dgTyEPJxEeWDzI4EtU3PBg">
+ <viewpoint xmi:type="description:Viewpoint" href="bug490384.odesign#//@ownedViewpoints[name='Bug490384_Viewpoint']"/>
+ </ownedViews>
+</viewpoint:DAnalysis>
diff --git a/plugins/org.eclipse.sirius.tests.swtbot/data/unit/tabbar/bug490384/bug490384.ecore b/plugins/org.eclipse.sirius.tests.swtbot/data/unit/tabbar/bug490384/bug490384.ecore
new file mode 100644
index 0000000000..aaaf612c57
--- /dev/null
+++ b/plugins/org.eclipse.sirius.tests.swtbot/data/unit/tabbar/bug490384/bug490384.ecore
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ecore:EPackage xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="root">
+ <eClassifiers xsi:type="ecore:EClass" name="A1"/>
+ <eClassifiers xsi:type="ecore:EClass" name="B1"/>
+ <eClassifiers xsi:type="ecore:EClass" name="A2"/>
+ <eClassifiers xsi:type="ecore:EClass" name="B2"/>
+ <eClassifiers xsi:type="ecore:EClass" name="A3"/>
+</ecore:EPackage>
diff --git a/plugins/org.eclipse.sirius.tests.swtbot/data/unit/tabbar/bug490384/bug490384.odesign b/plugins/org.eclipse.sirius.tests.swtbot/data/unit/tabbar/bug490384/bug490384.odesign
new file mode 100644
index 0000000000..bf73e2d722
--- /dev/null
+++ b/plugins/org.eclipse.sirius.tests.swtbot/data/unit/tabbar/bug490384/bug490384.odesign
@@ -0,0 +1,45 @@
+<?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:filter="http://www.eclipse.org/sirius/diagram/description/filter/1.1.0" xmlns:style="http://www.eclipse.org/sirius/diagram/description/style/1.1.0" name="490384" version="11.0.0.201601261200">
+ <ownedViewpoints name="Bug490384_Viewpoint" modelFileExtension="ecore">
+ <ownedRepresentations xsi:type="description_1:DiagramDescription" name="Bug490384_DiagWithConcern" domainClass="ecore.EPackage" defaultConcern="//@ownedViewpoints[name='Bug490384_Viewpoint']/@ownedRepresentations[name='Bug490384_DiagWithConcern']/@concerns/@ownedConcernDescriptions.0" enablePopupBars="true">
+ <metamodel href="http://www.eclipse.org/emf/2002/Ecore#/"/>
+ <filters xsi:type="filter:CompositeFilterDescription" name="CompositeFilter1" label="Filter A classes">
+ <filters xsi:type="filter:VariableFilter" semanticConditionExpression="aql:not self.name.startsWith('A')"/>
+ </filters>
+ <filters xsi:type="filter:CompositeFilterDescription" name="CompositeFilter2" label="Filter B classes">
+ <filters xsi:type="filter:VariableFilter" semanticConditionExpression="aql:not self.name.startsWith('B')"/>
+ </filters>
+ <concerns>
+ <ownedConcernDescriptions name="Concern1" filters="//@ownedViewpoints[name='Bug490384_Viewpoint']/@ownedRepresentations[name='Bug490384_DiagWithConcern']/@filters[name='CompositeFilter1']"/>
+ <ownedConcernDescriptions name="Concern2" filters="//@ownedViewpoints[name='Bug490384_Viewpoint']/@ownedRepresentations[name='Bug490384_DiagWithConcern']/@filters[name='CompositeFilter2']"/>
+ </concerns>
+ <defaultLayer name="Default">
+ <nodeMappings name="ClassNode" domainClass="ecore.EClass">
+ <style xsi:type="style:BundledImageDescription" sizeComputationExpression="10" labelPosition="node" 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>
+ </ownedRepresentations>
+ <ownedRepresentations xsi:type="description_1:DiagramDescription" name="Bug490384_DiagWithoutConcern" domainClass="ecore.EPackage" enablePopupBars="true">
+ <metamodel href="http://www.eclipse.org/emf/2002/Ecore#/"/>
+ <filters xsi:type="filter:CompositeFilterDescription" name="CompositeFilter1" label="Filter A classes">
+ <filters xsi:type="filter:VariableFilter" semanticConditionExpression="aql:not self.name.startsWith('A')"/>
+ </filters>
+ <filters xsi:type="filter:CompositeFilterDescription" name="CompositeFilter2" label="Filter B classes">
+ <filters xsi:type="filter:VariableFilter" semanticConditionExpression="aql:not self.name.startsWith('B')"/>
+ </filters>
+ <defaultLayer name="Default">
+ <nodeMappings name="ClassNode" domainClass="ecore.EClass">
+ <style xsi:type="style:BundledImageDescription" sizeComputationExpression="10" labelPosition="node" 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>
+ </ownedRepresentations>
+ </ownedViewpoints>
+</description:Group>
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 0e279ddb71..5e68569690 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
@@ -55,6 +55,7 @@ import org.eclipse.sirius.tests.swtbot.modelexplorer.PropertyViewOnModelExplorer
import org.eclipse.sirius.tests.swtbot.modelexplorer.RepresentationVisibilityAfterSessionReloadTest;
import org.eclipse.sirius.tests.swtbot.tabbar.LockedTabBarTest;
import org.eclipse.sirius.tests.swtbot.tabbar.NotInvisibleTabBarTest;
+import org.eclipse.sirius.tests.swtbot.tabbar.ResetToDefaultFiltersActionTests;
import org.eclipse.sirius.tests.swtbot.tabbar.TabBarTest;
import org.eclipse.sirius.tests.swtbot.tabbar.TabbarContributorExtensionTest;
import org.eclipse.sirius.tests.swtbot.table.SetPropertyOfTableTreeByPropertiesViewTest;
@@ -328,6 +329,7 @@ public class AllTestSuite extends TestCase {
suite.addTestSuite(ExportDiagramsAsImagesAndHtmlTest.class);
suite.addTestSuite(TabBarTest.class);
suite.addTestSuite(NotInvisibleTabBarTest.class);
+ suite.addTestSuite(ResetToDefaultFiltersActionTests.class);
suite.addTestSuite(LockedTabBarTest.class);
suite.addTestSuite(LockedRepresentationContainerTest.class);
suite.addTestSuite(ArrangeSelectionOnBreakdownDiagramTest.class);
diff --git a/plugins/org.eclipse.sirius.tests.swtbot/src/org/eclipse/sirius/tests/swtbot/tabbar/ResetToDefaultFiltersActionTests.java b/plugins/org.eclipse.sirius.tests.swtbot/src/org/eclipse/sirius/tests/swtbot/tabbar/ResetToDefaultFiltersActionTests.java
new file mode 100644
index 0000000000..668ce419e9
--- /dev/null
+++ b/plugins/org.eclipse.sirius.tests.swtbot/src/org/eclipse/sirius/tests/swtbot/tabbar/ResetToDefaultFiltersActionTests.java
@@ -0,0 +1,213 @@
+/*******************************************************************************
+ * Copyright (c) 2016 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.tabbar;
+
+import java.util.List;
+
+import org.eclipse.emf.transaction.TransactionalEditingDomain;
+import org.eclipse.jface.bindings.keys.IKeyLookup;
+import org.eclipse.jface.bindings.keys.KeyStroke;
+import org.eclipse.jface.bindings.keys.ParseException;
+import org.eclipse.sirius.business.api.query.IdentifiedElementQuery;
+import org.eclipse.sirius.business.api.session.Session;
+import org.eclipse.sirius.diagram.DDiagram;
+import org.eclipse.sirius.diagram.DDiagramElement;
+import org.eclipse.sirius.diagram.description.filter.FilterDescription;
+import org.eclipse.sirius.diagram.ui.provider.Messages;
+import org.eclipse.sirius.diagram.ui.tools.internal.commands.SetCurrentConcernCommand;
+import org.eclipse.sirius.tests.swtbot.Activator;
+import org.eclipse.sirius.tests.swtbot.support.api.AbstractSiriusSwtBotGefTestCase;
+import org.eclipse.sirius.tests.swtbot.support.api.business.UIDiagramRepresentation;
+import org.eclipse.sirius.tests.swtbot.support.api.business.UIResource;
+import org.eclipse.sirius.tests.swtbot.support.api.editor.SWTBotSiriusDiagramEditor;
+import org.eclipse.sirius.tests.swtbot.support.utils.SWTBotUtils;
+import org.eclipse.sirius.viewpoint.DRepresentation;
+import org.eclipse.swt.widgets.MenuItem;
+import org.eclipse.swtbot.eclipse.finder.matchers.WidgetMatcherFactory;
+import org.eclipse.swtbot.swt.finder.widgets.SWTBotMenu;
+import org.eclipse.swtbot.swt.finder.widgets.SWTBotToolbarDropDownButton;
+import org.eclipse.swtbot.swt.finder.widgets.SWTBotTreeItem;
+
+import com.google.common.base.Predicate;
+import com.google.common.collect.Iterables;
+
+/**
+ * Bug 490384 : Have a "Reset to default filters" action in tabbar.
+ *
+ * <ol>
+ * <li>test action availability of action when there is a default concern.</li>
+ * <li>the non availability when there is no default concern.</li>
+ * <li>test the result of the action on activated filters.</li>
+ * </ol>
+ *
+ * @author <a href="mailto:esteban.dugueperoux@obeo.fr">Esteban Dugueperoux</a>
+ */
+public class ResetToDefaultFiltersActionTests extends AbstractSiriusSwtBotGefTestCase {
+
+ private static final String PATH = "data/unit/tabbar/bug490384/";
+
+ private static final String MODELER_RESOURCE_NAME = "bug490384.odesign";
+
+ private static final String SEMANTIC_RESOURCE_NAME = "bug490384.ecore";
+
+ private static final String SESSION_RESOURCE_NAME = "bug490384.aird";
+
+ private static final String DIAGRAM_DESCRIPTION_WITH_CONCERN = "Bug490384_DiagWithConcern";
+
+ private static final String DIAGRAM_DESCRIPTION_WITHOUT_CONCERN = "Bug490384_DiagWithoutConcern";
+
+ private SWTBotTreeItem modelElementItem;
+
+ private SWTBotSiriusDiagramEditor editor;
+
+ @Override
+ protected void onSetUpBeforeClosingWelcomePage() throws Exception {
+ copyFileToTestProject(Activator.PLUGIN_ID, PATH, SEMANTIC_RESOURCE_NAME, SESSION_RESOURCE_NAME, MODELER_RESOURCE_NAME);
+ }
+
+ @Override
+ protected void onSetUpAfterOpeningDesignerPerspective() throws Exception {
+ sessionAirdResource = new UIResource(designerProject, "/", SESSION_RESOURCE_NAME);
+ localSession = designerPerspective.openSessionFromFile(sessionAirdResource);
+ modelElementItem = localSession.getLocalSessionBrowser().perSemantic().getItems()[0];
+ }
+
+ /**
+ * Test the non visibility of "Reset to default filters" action as there is
+ * not default concern.
+ */
+ public void testResetToDefaultFiltersActionUnavailability() {
+ UIDiagramRepresentation newDiagramRepresentation = localSession.newDiagramRepresentation("new " + DIAGRAM_DESCRIPTION_WITHOUT_CONCERN, DIAGRAM_DESCRIPTION_WITHOUT_CONCERN).on(modelElementItem)
+ .withDefaultName().ok();;
+ editor = newDiagramRepresentation.getEditor();
+ DRepresentation dRepresentation = editor.getDRepresentation();
+ assertTrue(dRepresentation instanceof DDiagram);
+ DDiagram dDiagram = (DDiagram) dRepresentation;
+ List<FilterDescription> filters = dDiagram.getDescription().getFilters();
+ SWTBotToolbarDropDownButton button = editor.bot().toolbarDropDownButtonWithTooltip("Filters");
+ List<? extends SWTBotMenu> menuItems = button.menuItems(WidgetMatcherFactory.widgetOfType(MenuItem.class));
+ assertEquals(filters.size(), menuItems.size());
+ for (int i = 0; i < menuItems.size(); i++) {
+ SWTBotMenu menuItem = menuItems.get(i);
+ assertEquals(new IdentifiedElementQuery(filters.get(i)).getLabel(), menuItem.getText());
+ }
+ assertEquals("Any filter is activated, all classes must be visible.", 5, getNbOfVisibleDiagramElements(dDiagram));
+ try {
+ // The drop down menu is not closed, so use the Escape key as
+ // workaround.
+ button.pressShortcut(KeyStroke.getInstance(IKeyLookup.ESC_NAME));
+ SWTBotUtils.waitAllUiEvents();
+ } catch (ParseException e) {
+ }
+ }
+
+ /**
+ * Test the visibility of "Reset to default filters" action as there is a
+ * default concern.
+ */
+ public void testResetToDefaultFiltersActionAvailability() {
+ UIDiagramRepresentation newDiagramRepresentation = localSession.newDiagramRepresentation("new " + DIAGRAM_DESCRIPTION_WITH_CONCERN, DIAGRAM_DESCRIPTION_WITH_CONCERN).on(modelElementItem)
+ .withDefaultName().ok();;
+ editor = newDiagramRepresentation.getEditor();
+ DRepresentation dRepresentation = editor.getDRepresentation();
+ assertTrue(dRepresentation instanceof DDiagram);
+ DDiagram dDiagram = (DDiagram) dRepresentation;
+ List<FilterDescription> filters = dDiagram.getDescription().getFilters();
+ final SWTBotToolbarDropDownButton filtersButton = editor.bot().toolbarDropDownButtonWithTooltip("Filters");
+ List<? extends SWTBotMenu> menuItems = filtersButton.menuItems(WidgetMatcherFactory.widgetOfType(MenuItem.class));
+ assertEquals(filters.size() + 1, menuItems.size());
+ for (int i = 0; i < menuItems.size() - 1; i++) {
+ SWTBotMenu menuItem = menuItems.get(i);
+ assertEquals(new IdentifiedElementQuery(filters.get(i)).getLabel(), menuItem.getText());
+ }
+ SWTBotMenu menuItem = menuItems.get(menuItems.size() - 1);
+ assertEquals(Messages.ResetToDefaultFiltersAction_text, menuItem.getText());
+ assertFalse(menuItem.isEnabled());
+ assertEquals("By default A filter is activated, only B classes must be visible.", 2, getNbOfVisibleDiagramElements(dDiagram));
+
+ // Change default filters selection
+ menuItems.get(0).click();
+ try {
+ // The drop down menu is not closed, so use the Escape key as
+ // workaround.
+ filtersButton.pressShortcut(KeyStroke.getInstance(IKeyLookup.ESC_NAME));
+ SWTBotUtils.waitAllUiEvents();
+ } catch (ParseException e) {
+ }
+ assertEquals(0, dDiagram.getActivatedFilters().size());
+ assertEquals("Any filter is activated, all classes must be visible.", 5, getNbOfVisibleDiagramElements(dDiagram));
+
+ // Test that "Reset to default filters" action is enabled
+ menuItems = filtersButton.menuItems(WidgetMatcherFactory.widgetOfType(MenuItem.class));
+ menuItem = menuItems.get(menuItems.size() - 1);
+ assertEquals(Messages.ResetToDefaultFiltersAction_text, menuItem.getText());
+ assertTrue(menuItem.isEnabled());
+
+ // Test result of a reset
+ menuItem.click();
+ try {
+ // The drop down menu is not closed, so use the Escape key as
+ // workaround.
+ filtersButton.pressShortcut(KeyStroke.getInstance(IKeyLookup.ESC_NAME));
+ SWTBotUtils.waitAllUiEvents();
+ } catch (ParseException e) {
+ }
+ assertEquals(dDiagram.getDescription().getDefaultConcern().getFilters(), dDiagram.getActivatedFilters());
+ assertEquals(dDiagram.getDescription().getDefaultConcern(), dDiagram.getCurrentConcern());
+ assertEquals("By default A filter is activated, only B classes must be visible.", 2, getNbOfVisibleDiagramElements(dDiagram));
+
+ // Test that "Reset to default filters" action is disabled now
+ menuItems = filtersButton.menuItems(WidgetMatcherFactory.widgetOfType(MenuItem.class));
+ menuItem = menuItems.get(menuItems.size() - 1);
+ assertEquals(Messages.ResetToDefaultFiltersAction_text, menuItem.getText());
+ assertFalse(menuItem.isEnabled());
+ assertEquals("By default A filter is activated, only B classes must be visible.", 2, getNbOfVisibleDiagramElements(dDiagram));
+ try {
+ // The drop down menu is not closed, so use the Escape key as
+ // workaround.
+ filtersButton.pressShortcut(KeyStroke.getInstance(IKeyLookup.ESC_NAME));
+ SWTBotUtils.waitAllUiEvents();
+ } catch (ParseException e) {
+ }
+
+ // Test "Reset to default filters" action on concern change
+ Session session = localSession.getOpenedSession();
+ TransactionalEditingDomain domain = session.getTransactionalEditingDomain();
+ domain.getCommandStack().execute(new SetCurrentConcernCommand(domain, dDiagram, dDiagram.getDescription().getConcerns().getOwnedConcernDescriptions().get(1)));
+ menuItems = filtersButton.menuItems(WidgetMatcherFactory.widgetOfType(MenuItem.class));
+ menuItem = menuItems.get(menuItems.size() - 1);
+ assertEquals(Messages.ResetToDefaultFiltersAction_text, menuItem.getText());
+ assertTrue(menuItem.isEnabled());
+ assertEquals("With second concern, B filter is activated, only A classes must be visible.", 3, getNbOfVisibleDiagramElements(dDiagram));
+
+ // Test result of a reset
+ menuItem.click();
+ try {
+ // The drop down menu is not closed, so use the Escape key as
+ // workaround.
+ filtersButton.pressShortcut(KeyStroke.getInstance(IKeyLookup.ESC_NAME));
+ SWTBotUtils.waitAllUiEvents();
+ } catch (ParseException e) {
+ }
+ assertEquals(dDiagram.getDescription().getDefaultConcern().getFilters(), dDiagram.getActivatedFilters());
+ assertEquals(dDiagram.getDescription().getDefaultConcern(), dDiagram.getCurrentConcern());
+
+ }
+
+ private int getNbOfVisibleDiagramElements(DDiagram dDiagram) {
+ return Iterables.size(Iterables.filter(dDiagram.getOwnedDiagramElements(), new Predicate<DDiagramElement>() {
+ @Override
+ public boolean apply(DDiagramElement input) {
+ return input.isVisible();
+ }
+ }));
+ }
+}

Back to the top