diff options
| author | Esteban Dugueperoux | 2016-03-25 14:48:30 +0000 |
|---|---|---|
| committer | Laurent Redor | 2016-04-15 11:57:40 +0000 |
| commit | fb6ea09f97dc0da28e8f7fbcf5b075f05fbbe9f4 (patch) | |
| tree | ef9cdafb1dfb3655d02a033e4204046380d8d54c | |
| parent | 7df68532a3c67fd588af6be089a9595274a54075 (diff) | |
| download | org.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>
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(); + } + })); + } +} |
