Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBenjamin Grouhan2015-05-06 15:13:51 +0000
committerBenjamin Grouhan2015-05-18 15:05:50 +0000
commit1fbed5da54c01c9279bf2e4ff358aa0574613f9f (patch)
tree48cd5a1cbeb63cff4774d210a2e43c32eab6f1ed
parent5fa2457a8b58d26d02d315f8e5e96bb215257b3e (diff)
downloadorg.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>
-rw-r--r--plugins/org.eclipse.sirius.editor/plugin.properties275
-rw-r--r--plugins/org.eclipse.sirius.editor/src/org/eclipse/sirius/editor/tools/api/menu/AbstractMenuBuilder.java44
-rw-r--r--plugins/org.eclipse.sirius.tests.junit/src/org/eclipse/sirius/tests/suite/common/AllCommonPluginTests.java3
-rw-r--r--plugins/org.eclipse.sirius.tests.junit/src/org/eclipse/sirius/tests/unit/common/SubMenusPrioritiesTest.java68
-rw-r--r--plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/internal/metamodel/helper/EClassHelper.java51
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;
+ }
+}

Back to the top