diff options
| author | Benjamin Grouhan | 2015-05-06 15:13:51 +0000 |
|---|---|---|
| committer | Benjamin Grouhan | 2015-05-18 15:05:50 +0000 |
| commit | 1fbed5da54c01c9279bf2e4ff358aa0574613f9f (patch) | |
| tree | 48cd5a1cbeb63cff4774d210a2e43c32eab6f1ed | |
| parent | 5fa2457a8b58d26d02d315f8e5e96bb215257b3e (diff) | |
| download | org.eclipse.sirius-1fbed5da54c01c9279bf2e4ff358aa0574613f9f.tar.gz org.eclipse.sirius-1fbed5da54c01c9279bf2e4ff358aa0574613f9f.tar.xz org.eclipse.sirius-1fbed5da54c01c9279bf2e4ff358aa0574613f9f.zip | |
[441946] Reorder the sub-menus of the contextual menu in the VSM.
Use priorities added in the plugin.properties file of the sirius.ui
plugin to reorder the sub-menus. Currently the values are all set to the
same arbitrary great number (10⁹), so the actual order of sub-menus
should not change.
Also add a helper class (EClassHelper) defining a static method to get
the path of an EClass object. The path returned by this method is used
as a key to retrieve the priority in the plugin.properties file.
Last, add a test checking that all EClass contained in the description
package of each metamodel's dialect have a priority associated in the
plugin.properties file.
Bug: 441946
Change-Id: Ibab27d13faf7f2d83cb249d771e5a4a06ac98fe9
Signed-off-by: Benjamin Grouhan <benjamin.grouhan@obeo.fr>
5 files changed, 437 insertions, 4 deletions
diff --git a/plugins/org.eclipse.sirius.editor/plugin.properties b/plugins/org.eclipse.sirius.editor/plugin.properties index 0e5ec4b68e..5df9c64f1c 100644 --- a/plugins/org.eclipse.sirius.editor/plugin.properties +++ b/plugins/org.eclipse.sirius.editor/plugin.properties @@ -158,4 +158,277 @@ OthersPriority = 2400 InitializePriority = 2500 RefactorPriority = 2600 -#End of user code specific keys
\ No newline at end of file +# Priorities of sub-menus +diagram.description.DiagramDescription = 1000000000 +diagram.description.DiagramImportDescription = 1000000000 +diagram.description.DiagramExtensionDescription = 1000000000 +diagram.description.DiagramElementMapping = 1000000000 +diagram.description.AbstractNodeMapping = 1000000000 +diagram.description.NodeMapping = 1000000000 +diagram.description.ContainerMapping = 1000000000 +diagram.description.NodeMappingImport = 1000000000 +diagram.description.ContainerMappingImport = 1000000000 +diagram.description.EdgeMapping = 1000000000 +diagram.description.IEdgeMapping = 1000000000 +diagram.description.EdgeMappingImport = 1000000000 +diagram.description.ConditionalNodeStyleDescription = 1000000000 +diagram.description.ConditionalEdgeStyleDescription = 1000000000 +diagram.description.ConditionalContainerStyleDescription = 1000000000 +diagram.description.Layout = 1000000000 +diagram.description.OrderedTreeLayout = 1000000000 +diagram.description.CompositeLayout = 1000000000 +diagram.description.MappingBasedDecoration = 1000000000 +diagram.description.Layer = 1000000000 +diagram.description.AdditionalLayer = 1000000000 +diagram.description.DragAndDropTargetDescription = 1000000000 +diagram.description.style.BorderedStyleDescription = 1000000000 +diagram.description.style.NodeStyleDescription = 1000000000 +diagram.description.style.CustomStyleDescription = 1000000000 +diagram.description.style.SquareDescription = 1000000000 +diagram.description.style.LozengeNodeDescription = 1000000000 +diagram.description.style.EllipseNodeDescription = 1000000000 +diagram.description.style.BundledImageDescription = 1000000000 +diagram.description.style.NoteDescription = 1000000000 +diagram.description.style.DotDescription = 1000000000 +diagram.description.style.GaugeCompositeStyleDescription = 1000000000 +diagram.description.style.GaugeSectionDescription = 1000000000 +diagram.description.style.SizeComputationContainerStyleDescription = 1000000000 +diagram.description.style.RoundedCornerStyleDescription = 1000000000 +diagram.description.style.ContainerStyleDescription = 1000000000 +diagram.description.style.FlatContainerStyleDescription = 1000000000 +diagram.description.style.ShapeContainerStyleDescription = 1000000000 +diagram.description.style.WorkspaceImageDescription = 1000000000 +diagram.description.style.EdgeStyleDescription = 1000000000 +diagram.description.style.BeginLabelStyleDescription = 1000000000 +diagram.description.style.CenterLabelStyleDescription = 1000000000 +diagram.description.style.EndLabelStyleDescription = 1000000000 +diagram.description.style.BracketEdgeStyleDescription = 1000000000 +diagram.description.style.HideLabelCapabilityStyleDescription = 1000000000 +diagram.description.tool.ToolSection = 1000000000 +diagram.description.tool.ToolGroup = 1000000000 +diagram.description.tool.ToolGroupExtension = 1000000000 +diagram.description.tool.NodeCreationDescription = 1000000000 +diagram.description.tool.EdgeCreationDescription = 1000000000 +diagram.description.tool.ContainerCreationDescription = 1000000000 +diagram.description.tool.DeleteElementDescription = 1000000000 +diagram.description.tool.DoubleClickDescription = 1000000000 +diagram.description.tool.DeleteHook = 1000000000 +diagram.description.tool.DeleteHookParameter = 1000000000 +diagram.description.tool.ReconnectEdgeDescription = 1000000000 +diagram.description.tool.RequestDescription = 1000000000 +diagram.description.tool.DirectEditLabel = 1000000000 +diagram.description.tool.BehaviorTool = 1000000000 +diagram.description.tool.SourceEdgeCreationVariable = 1000000000 +diagram.description.tool.SourceEdgeViewCreationVariable = 1000000000 +diagram.description.tool.TargetEdgeCreationVariable = 1000000000 +diagram.description.tool.TargetEdgeViewCreationVariable = 1000000000 +diagram.description.tool.ElementDoubleClickVariable = 1000000000 +diagram.description.tool.NodeCreationVariable = 1000000000 +diagram.description.tool.CreateView = 1000000000 +diagram.description.tool.CreateEdgeView = 1000000000 +diagram.description.tool.Navigation = 1000000000 +diagram.description.tool.DiagramCreationDescription = 1000000000 +diagram.description.tool.DiagramNavigationDescription = 1000000000 +diagram.description.tool.ContainerDropDescription = 1000000000 +diagram.description.filter.FilterDescription = 1000000000 +diagram.description.filter.Filter = 1000000000 +diagram.description.filter.MappingFilter = 1000000000 +diagram.description.filter.CompositeFilterDescription = 1000000000 +diagram.description.filter.VariableFilter = 1000000000 +diagram.description.filter.FilterVariable = 1000000000 +diagram.description.concern.ConcernSet = 1000000000 +diagram.description.concern.ConcernDescription = 1000000000 +tree.description.TreeDescription = 1000000000 +tree.description.TreeItemMapping = 1000000000 +tree.description.TreeItemStyleDescription = 1000000000 +tree.description.ConditionalTreeItemStyleDescription = 1000000000 +tree.description.TreeItemTool = 1000000000 +tree.description.TreeItemDragTool = 1000000000 +tree.description.TreeItemContainerDropTool = 1000000000 +tree.description.TreeItemCreationTool = 1000000000 +tree.description.TreeItemEditionTool = 1000000000 +tree.description.TreeItemDeletionTool = 1000000000 +tree.description.TreeCreationDescription = 1000000000 +tree.description.TreeNavigationDescription = 1000000000 +tree.description.TreeMapping = 1000000000 +tree.description.StyleUpdater = 1000000000 +tree.description.TreeVariable = 1000000000 +tree.description.TreeItemUpdater = 1000000000 +tree.description.PrecedingSiblingsVariables = 1000000000 +tree.description.TreeItemMappingContainer = 1000000000 +tree.description.TreePopupMenu = 1000000000 +table.description.TableDescription = 1000000000 +table.description.EditionTableDescription = 1000000000 +table.description.CrossTableDescription = 1000000000 +table.description.TableMapping = 1000000000 +table.description.LineMapping = 1000000000 +table.description.ColumnMapping = 1000000000 +table.description.ElementColumnMapping = 1000000000 +table.description.FeatureColumnMapping = 1000000000 +table.description.CellUpdater = 1000000000 +table.description.StyleUpdater = 1000000000 +table.description.IntersectionMapping = 1000000000 +table.description.TableTool = 1000000000 +table.description.LabelEditTool = 1000000000 +table.description.CreateTool = 1000000000 +table.description.CreateColumnTool = 1000000000 +table.description.CreateCrossColumnTool = 1000000000 +table.description.CreateLineTool = 1000000000 +table.description.CreateCellTool = 1000000000 +table.description.DeleteTool = 1000000000 +table.description.DeleteColumnTool = 1000000000 +table.description.DeleteLineTool = 1000000000 +table.description.ForegroundStyleDescription = 1000000000 +table.description.BackgroundStyleDescription = 1000000000 +table.description.ForegroundConditionalStyle = 1000000000 +table.description.BackgroundConditionalStyle = 1000000000 +table.description.TableVariable = 1000000000 +table.description.TableCreationDescription = 1000000000 +table.description.TableNavigationDescription = 1000000000 +viewpoint.description.Group = 1000000000 +viewpoint.description.Component = 1000000000 +viewpoint.description.Viewpoint = 1000000000 +viewpoint.description.FeatureExtensionDescription = 1000000000 +viewpoint.description.RepresentationDescription = 1000000000 +viewpoint.description.RepresentationTemplate = 1000000000 +viewpoint.description.RepresentationImportDescription = 1000000000 +viewpoint.description.RepresentationExtensionDescription = 1000000000 +viewpoint.description.MetamodelExtensionSetting = 1000000000 +viewpoint.description.JavaExtension = 1000000000 +viewpoint.description.RepresentationElementMapping = 1000000000 +viewpoint.description.AbstractMappingImport = 1000000000 +viewpoint.description.DocumentedElement = 1000000000 +viewpoint.description.DModelElement = 1000000000 +viewpoint.description.DAnnotation = 1000000000 +viewpoint.description.ConditionalStyleDescription = 1000000000 +viewpoint.description.PasteTargetDescription = 1000000000 +viewpoint.description.DecorationDescriptionsSet = 1000000000 +viewpoint.description.DecorationDescription = 1000000000 +viewpoint.description.SemanticBasedDecoration = 1000000000 +viewpoint.description.Customization = 1000000000 +viewpoint.description.IVSMElementCustomization = 1000000000 +viewpoint.description.VSMElementCustomization = 1000000000 +viewpoint.description.VSMElementCustomizationReuse = 1000000000 +viewpoint.description.EStructuralFeatureCustomization = 1000000000 +viewpoint.description.EAttributeCustomization = 1000000000 +viewpoint.description.EReferenceCustomization = 1000000000 +viewpoint.description.SelectionDescription = 1000000000 +viewpoint.description.ColorDescription = 1000000000 +viewpoint.description.SystemColor = 1000000000 +viewpoint.description.InterpolatedColor = 1000000000 +viewpoint.description.ColorStep = 1000000000 +viewpoint.description.FixedColor = 1000000000 +viewpoint.description.UserFixedColor = 1000000000 +viewpoint.description.UserColor = 1000000000 +viewpoint.description.Environment = 1000000000 +viewpoint.description.SytemColorsPalette = 1000000000 +viewpoint.description.UserColorsPalette = 1000000000 +viewpoint.description.AnnotationEntry = 1000000000 +viewpoint.description.EndUserDocumentedElement = 1000000000 +viewpoint.description.IdentifiedElement = 1000000000 +viewpoint.description.ComputedColor = 1000000000 +viewpoint.description.DAnnotationEntry = 1000000000 +viewpoint.description.style.StyleDescription = 1000000000 +viewpoint.description.style.BasicLabelStyleDescription = 1000000000 +viewpoint.description.style.LabelStyleDescription = 1000000000 +viewpoint.description.style.LabelBorderStyles = 1000000000 +viewpoint.description.style.LabelBorderStyleDescription = 1000000000 +viewpoint.description.style.TooltipStyleDescription = 1000000000 +viewpoint.description.tool.ToolEntry = 1000000000 +viewpoint.description.tool.AbstractToolDescription = 1000000000 +viewpoint.description.tool.MappingBasedToolDescription = 1000000000 +viewpoint.description.tool.ToolDescription = 1000000000 +viewpoint.description.tool.PasteDescription = 1000000000 +viewpoint.description.tool.SelectionWizardDescription = 1000000000 +viewpoint.description.tool.PaneBasedSelectionWizardDescription = 1000000000 +viewpoint.description.tool.RepresentationCreationDescription = 1000000000 +viewpoint.description.tool.RepresentationNavigationDescription = 1000000000 +viewpoint.description.tool.MenuItemOrRef = 1000000000 +viewpoint.description.tool.MenuItemDescription = 1000000000 +viewpoint.description.tool.MenuItemDescriptionReference = 1000000000 +viewpoint.description.tool.OperationAction = 1000000000 +viewpoint.description.tool.ExternalJavaAction = 1000000000 +viewpoint.description.tool.ExternalJavaActionCall = 1000000000 +viewpoint.description.tool.PopupMenu = 1000000000 +viewpoint.description.tool.AbstractVariable = 1000000000 +viewpoint.description.tool.VariableContainer = 1000000000 +viewpoint.description.tool.AcceleoVariable = 1000000000 +viewpoint.description.tool.SubVariable = 1000000000 +viewpoint.description.tool.DialogVariable = 1000000000 +viewpoint.description.tool.ElementDropVariable = 1000000000 +viewpoint.description.tool.ElementSelectVariable = 1000000000 +viewpoint.description.tool.ElementVariable = 1000000000 +viewpoint.description.tool.ElementViewVariable = 1000000000 +viewpoint.description.tool.ElementDeleteVariable = 1000000000 +viewpoint.description.tool.DropContainerVariable = 1000000000 +viewpoint.description.tool.SelectContainerVariable = 1000000000 +viewpoint.description.tool.ContainerViewVariable = 1000000000 +viewpoint.description.tool.SelectModelElementVariable = 1000000000 +viewpoint.description.tool.EditMaskVariables = 1000000000 +viewpoint.description.tool.ContainerModelOperation = 1000000000 +viewpoint.description.tool.ModelOperation = 1000000000 +viewpoint.description.tool.InitialNodeCreationOperation = 1000000000 +viewpoint.description.tool.InitialOperation = 1000000000 +viewpoint.description.tool.InitEdgeCreationOperation = 1000000000 +viewpoint.description.tool.InitialContainerDropOperation = 1000000000 +viewpoint.description.tool.CreateInstance = 1000000000 +viewpoint.description.tool.ChangeContext = 1000000000 +viewpoint.description.tool.SetValue = 1000000000 +viewpoint.description.tool.SetObject = 1000000000 +viewpoint.description.tool.Unset = 1000000000 +viewpoint.description.tool.MoveElement = 1000000000 +viewpoint.description.tool.RemoveElement = 1000000000 +viewpoint.description.tool.For = 1000000000 +viewpoint.description.tool.If = 1000000000 +viewpoint.description.tool.DeleteView = 1000000000 +viewpoint.description.tool.NameVariable = 1000000000 +viewpoint.description.tool.ExternalJavaActionParameter = 1000000000 +viewpoint.description.tool.ToolFilterDescription = 1000000000 +viewpoint.description.tool.FeatureChangeListener = 1000000000 +viewpoint.description.tool.Case = 1000000000 +viewpoint.description.tool.SwitchChild = 1000000000 +viewpoint.description.tool.Default = 1000000000 +viewpoint.description.tool.Switch = 1000000000 +viewpoint.description.validation.ValidationSet = 1000000000 +viewpoint.description.validation.ValidationRule = 1000000000 +viewpoint.description.validation.SemanticValidationRule = 1000000000 +viewpoint.description.validation.ViewValidationRule = 1000000000 +viewpoint.description.validation.RuleAudit = 1000000000 +viewpoint.description.validation.ValidationFix = 1000000000 +viewpoint.description.audit.InformationSection = 1000000000 +viewpoint.description.audit.TemplateInformationSection = 1000000000 +sequence.description.SequenceDiagramDescription = 1000000000 +sequence.description.InstanceRoleMapping = 1000000000 +sequence.description.EventMapping = 1000000000 +sequence.description.DelimitedEventMapping = 1000000000 +sequence.description.ExecutionMapping = 1000000000 +sequence.description.StateMapping = 1000000000 +sequence.description.EndOfLifeMapping = 1000000000 +sequence.description.MessageMapping = 1000000000 +sequence.description.BasicMessageMapping = 1000000000 +sequence.description.ReturnMessageMapping = 1000000000 +sequence.description.CreationMessageMapping = 1000000000 +sequence.description.DestructionMessageMapping = 1000000000 +sequence.description.MessageEndVariable = 1000000000 +sequence.description.CoveredLifelinesVariable = 1000000000 +sequence.description.FrameMapping = 1000000000 +sequence.description.InteractionUseMapping = 1000000000 +sequence.description.CombinedFragmentMapping = 1000000000 +sequence.description.OperandMapping = 1000000000 +sequence.description.ObservationPointMapping = 1000000000 +sequence.description.tool.SequenceDiagramToolDescription = 1000000000 +sequence.description.tool.OrderedElementCreationTool = 1000000000 +sequence.description.tool.CoveringElementCreationTool = 1000000000 +sequence.description.tool.InstanceRoleCreationTool = 1000000000 +sequence.description.tool.LifelineCreationTool = 1000000000 +sequence.description.tool.MessageCreationTool = 1000000000 +sequence.description.tool.ExecutionCreationTool = 1000000000 +sequence.description.tool.StateCreationTool = 1000000000 +sequence.description.tool.InteractionUseCreationTool = 1000000000 +sequence.description.tool.CombinedFragmentCreationTool = 1000000000 +sequence.description.tool.OperandCreationTool = 1000000000 +sequence.description.tool.ObservationPointCreationTool = 1000000000 +sequence.description.tool.ReorderTool = 1000000000 +sequence.description.tool.InstanceRoleReorderTool = 1000000000 + +#End of user code specific keys diff --git a/plugins/org.eclipse.sirius.editor/src/org/eclipse/sirius/editor/tools/api/menu/AbstractMenuBuilder.java b/plugins/org.eclipse.sirius.editor/src/org/eclipse/sirius/editor/tools/api/menu/AbstractMenuBuilder.java index ff3a7e9bce..c4c0c8eefb 100644 --- a/plugins/org.eclipse.sirius.editor/src/org/eclipse/sirius/editor/tools/api/menu/AbstractMenuBuilder.java +++ b/plugins/org.eclipse.sirius.editor/src/org/eclipse/sirius/editor/tools/api/menu/AbstractMenuBuilder.java @@ -15,8 +15,10 @@ import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.Comparator; +import java.util.HashMap; import java.util.LinkedHashSet; import java.util.List; +import java.util.Map; import java.util.MissingResourceException; import org.eclipse.emf.common.util.ResourceLocator; @@ -33,6 +35,7 @@ import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.action.SubContributionItem; import org.eclipse.jface.viewers.ISelection; +import org.eclipse.sirius.business.internal.metamodel.helper.EClassHelper; import org.eclipse.sirius.editor.editorPlugin.SiriusEditorPlugin; import org.eclipse.sirius.editor.tools.internal.editor.EditorCustomizationManager; import org.eclipse.sirius.ext.base.Option; @@ -228,6 +231,12 @@ public abstract class AbstractMenuBuilder { protected IMenuManager myMenuManager; /** + * Map associating CreateChildAction objects with the priority of their + * corresponding CommandParameter object. + */ + private Map<CreateChildAction, Integer> priorityMap = new HashMap<CreateChildAction, Integer>(); + + /** * Create a new builder. */ public AbstractMenuBuilder() { @@ -412,8 +421,21 @@ public abstract class AbstractMenuBuilder { protected Collection generateCreateChildActions(final Collection actionDescriptors, final ISelection selection, final IEditorPart editor) { final Collection actions = new ArrayList(); if (actionDescriptors != null) { + ResourceLocator rl = SiriusEditorPlugin.INSTANCE; for (final Object actionDescriptor : actionDescriptors) { - actions.add(new CreateChildAction(editor, selection, actionDescriptor)); + CreateChildAction cca = new CreateChildAction(editor, selection, actionDescriptor); + if (actionDescriptor instanceof CommandParameter) { + Object value = ((CommandParameter) actionDescriptor).getValue(); + String key = EClassHelper.getPath(((EObject) value).eClass()); + int priority = 1000000000; + try { + priority = Integer.parseInt(rl.getString(key)); + } catch (MissingResourceException mre) { + } catch (NumberFormatException nfe) { + } + priorityMap.put(cca, priority); + } + actions.add(cca); } } return actions; @@ -429,7 +451,7 @@ public abstract class AbstractMenuBuilder { } /** - * depopulate the menu. + * Depopulate the menu. */ public void depopulateMenu() { if (getMenu().some()) { @@ -453,10 +475,26 @@ public abstract class AbstractMenuBuilder { Comparator<IAction> comparator = new Comparator<IAction>() { @Override public int compare(IAction a1, IAction a2) { - return Collator.getInstance().compare(a1.getText(), a2.getText()); + int returnedInt; + if (!priorityMap.containsKey(a1) && !priorityMap.containsKey(a2)) { + returnedInt = 0; + } else if (!priorityMap.containsKey(a1)) { + returnedInt = 1; + } else if (!priorityMap.containsKey(a2)) { + returnedInt = -1; + } else { + returnedInt = priorityMap.get(a1) - priorityMap.get(a2); + } + if (returnedInt == 0) { + // if both actions have no priority associated, or if + // they have the same priority, we compare the text + returnedInt = Collator.getInstance().compare(a1.getText(), a2.getText()); + } + return returnedInt; } }; Collections.sort(sortedActions, comparator); + priorityMap.clear(); for (final IAction action : sortedActions) { if (contributionID != null) { diff --git a/plugins/org.eclipse.sirius.tests.junit/src/org/eclipse/sirius/tests/suite/common/AllCommonPluginTests.java b/plugins/org.eclipse.sirius.tests.junit/src/org/eclipse/sirius/tests/suite/common/AllCommonPluginTests.java index dd67cbb7ac..a334440161 100644 --- a/plugins/org.eclipse.sirius.tests.junit/src/org/eclipse/sirius/tests/suite/common/AllCommonPluginTests.java +++ b/plugins/org.eclipse.sirius.tests.junit/src/org/eclipse/sirius/tests/suite/common/AllCommonPluginTests.java @@ -64,6 +64,7 @@ import org.eclipse.sirius.tests.unit.common.RefreshEditorsPrecommitListenerTests import org.eclipse.sirius.tests.unit.common.RestoreSessionFromEditorInputTests; import org.eclipse.sirius.tests.unit.common.SaverTest; import org.eclipse.sirius.tests.unit.common.SiriusCrossReferenceAdapterTests; +import org.eclipse.sirius.tests.unit.common.SubMenusPrioritiesTest; import org.eclipse.sirius.tests.unit.common.TransientSessionTests; import org.eclipse.sirius.tests.unit.common.WorkspaceResourceSyncTestCase; import org.eclipse.sirius.tests.unit.common.interpreter.CompoundInterpreterTestCase; @@ -274,6 +275,8 @@ public class AllCommonPluginTests extends TestCase { suite.addTestSuite(SiriusControlAndCrossReferenceInMultiSessionTest.class); suite.addTestSuite(ModelsToSemanticResourcesMigrationTest.class); suite.addTestSuite(OpenSessionTest.class); + + suite.addTestSuite(SubMenusPrioritiesTest.class); } /** diff --git a/plugins/org.eclipse.sirius.tests.junit/src/org/eclipse/sirius/tests/unit/common/SubMenusPrioritiesTest.java b/plugins/org.eclipse.sirius.tests.junit/src/org/eclipse/sirius/tests/unit/common/SubMenusPrioritiesTest.java new file mode 100644 index 0000000000..6bbeb3c80f --- /dev/null +++ b/plugins/org.eclipse.sirius.tests.junit/src/org/eclipse/sirius/tests/unit/common/SubMenusPrioritiesTest.java @@ -0,0 +1,68 @@ +/******************************************************************************* + * Copyright (c) 2015 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 + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Obeo - initial API and implementation + *******************************************************************************/ +package org.eclipse.sirius.tests.unit.common; + +import java.util.ArrayList; +import java.util.List; +import java.util.MissingResourceException; + +import junit.framework.TestCase; + +import org.eclipse.emf.common.util.TreeIterator; +import org.eclipse.emf.ecore.EClass; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.ecore.EPackage; +import org.eclipse.sirius.business.internal.metamodel.helper.EClassHelper; +import org.eclipse.sirius.editor.editorPlugin.SiriusEditorPlugin; + +public class SubMenusPrioritiesTest extends TestCase { + public void testViewpointDescriptions() { + validateChildrenHavePriority(org.eclipse.sirius.viewpoint.description.DescriptionPackage.eINSTANCE); + } + + public void testDiagramDescriptions() { + validateChildrenHavePriority(org.eclipse.sirius.diagram.description.DescriptionPackage.eINSTANCE); + } + + public void testTreeDescriptions() { + validateChildrenHavePriority(org.eclipse.sirius.tree.description.DescriptionPackage.eINSTANCE); + } + + public void testTableDescriptions() { + validateChildrenHavePriority(org.eclipse.sirius.table.metamodel.table.description.DescriptionPackage.eINSTANCE); + } + + public void testSequenceDescriptions() { + validateChildrenHavePriority(org.eclipse.sirius.diagram.sequence.description.DescriptionPackage.eINSTANCE); + } + + private void validateChildrenHavePriority(EPackage ePackage) { + List<EClass> list = new ArrayList<EClass>(); + TreeIterator<EObject> iterator = ePackage.eAllContents(); + while (iterator.hasNext()) { + EObject eObj = iterator.next(); + if (eObj instanceof EClass) { + list.add((EClass) eObj); + } + } + for (EClass eClass : list) { + String key = EClassHelper.getPath(eClass); + try { + Integer.parseInt(SiriusEditorPlugin.INSTANCE.getString(key)); + } catch (MissingResourceException mre) { + fail("The sub-menu priority key '" + key + "' is missing in the plugin.properties file of the sirius.editor plugin"); + } catch (NumberFormatException nfe) { + fail("The value associated with the key '" + key + "' in the plugin.properties file of the sirius.editor plugin is not an int"); + } + } + } +} diff --git a/plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/internal/metamodel/helper/EClassHelper.java b/plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/internal/metamodel/helper/EClassHelper.java new file mode 100644 index 0000000000..d5989e5ba7 --- /dev/null +++ b/plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/internal/metamodel/helper/EClassHelper.java @@ -0,0 +1,51 @@ +/******************************************************************************* + * Copyright (c) 2015 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 + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Obeo - initial API and implementation + *******************************************************************************/ +package org.eclipse.sirius.business.internal.metamodel.helper; + +import org.eclipse.emf.ecore.EClass; +import org.eclipse.emf.ecore.ENamedElement; +import org.eclipse.emf.ecore.EObject; + +/** + * Class providing helpers for EClass object from the ecore metamodel. + * + * @author bgrouhan + * + */ +public final class EClassHelper { + + private EClassHelper() { + } + + /** + * Helper to get the path of an EClass from the ecore metamodel. + * + * @param eClass + * the EClass. + * @return the path of the EClass. + */ + public static String getPath(EClass eClass) { + return getParentPath(eClass); + } + + private static String getParentPath(EObject eClass) { + EObject container = eClass.eContainer(); + String name = ""; + if (eClass instanceof ENamedElement) { + name = ((ENamedElement) eClass).getName(); + } + if (container != null) { + return getParentPath(container) + "." + name; + } + return name; + } +} |
