Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArthur Daussy2014-03-10 13:20:24 +0000
committerArthur Daussy2014-03-13 11:51:14 +0000
commit8538ce3ddd29ad2248400e18734649e84e8da7f6 (patch)
tree8a5f192dd7a3142ab7d482d9483dd4a41cd09950
parent56582547fa8979f9b28442498267b9d1e3d3cd60 (diff)
downloadorg.eclipse.emf.compare-8538ce3ddd29ad2248400e18734649e84e8da7f6.tar.gz
org.eclipse.emf.compare-8538ce3ddd29ad2248400e18734649e84e8da7f6.tar.xz
org.eclipse.emf.compare-8538ce3ddd29ad2248400e18734649e84e8da7f6.zip
[429636] Refactoring of IDifferenceGroupProvider
Replace "defaultSelected" by a rank mechanism. Move description attribute to IDifferenceGroupProvider.Descriptor Bug: 429636 Change-Id: I5daab85c14a9c0bfc4856f84af2ac2b336481ac0 Signed-off-by: Arthur Daussy <arthur.daussy@obeo.fr>
-rw-r--r--plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/configuration/EMFCompareConfiguration.java16
-rw-r--r--plugins/org.eclipse.emf.compare.rcp.ui/plugin.properties4
-rw-r--r--plugins/org.eclipse.emf.compare.rcp.ui/plugin.xml17
-rw-r--r--plugins/org.eclipse.emf.compare.rcp.ui/schema/groups.exsd49
-rw-r--r--plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/EMFCompareRCPUIPlugin.java26
-rw-r--r--plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/emfcomparercpuimessages.properties2
-rw-r--r--plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/actions/GroupAction.java4
-rw-r--r--plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/actions/GroupActionMenu.java13
-rw-r--r--plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/groups/impl/ByResourceGroupProvider.java39
-rw-r--r--plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/groups/impl/DefaultGroupProvider.java37
-rw-r--r--plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/groups/impl/DifferenceGroupDescriptorWrapper.java88
-rw-r--r--plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/groups/impl/DifferenceGroupProviderDescriptorImpl.java60
-rw-r--r--plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/groups/impl/DifferenceGroupProviderExtensionRegistryListener.java72
-rw-r--r--plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/groups/impl/DifferenceGroupRegistryImpl.java164
-rw-r--r--plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/groups/impl/EmptyDifferenceGroupProvider.java157
-rw-r--r--plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/groups/impl/KindGroupProvider.java42
-rw-r--r--plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/groups/impl/ThreeWayComparisonGroupProvider.java42
-rw-r--r--plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/structuremergeviewer/groups/IDifferenceGroupProvider.java84
-rw-r--r--plugins/org.eclipse.emf.compare.rcp/src/org/eclipse/emf/compare/rcp/internal/extension/impl/AbstractItemDescriptor.java5
-rw-r--r--plugins/org.eclipse.emf.compare.rcp/src/org/eclipse/emf/compare/rcp/internal/extension/impl/ItemUtil.java52
-rw-r--r--plugins/org.eclipse.emf.compare.rcp/src/org/eclipse/emf/compare/rcp/internal/preferences/EMFComparePreferences.java21
21 files changed, 562 insertions, 432 deletions
diff --git a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/configuration/EMFCompareConfiguration.java b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/configuration/EMFCompareConfiguration.java
index 212331d6f..7b188adbf 100644
--- a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/configuration/EMFCompareConfiguration.java
+++ b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/configuration/EMFCompareConfiguration.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2013 Obeo.
+ * Copyright (c) 2013, 2014 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
@@ -31,8 +31,10 @@ import org.eclipse.emf.compare.rcp.ui.internal.configuration.impl.EMFComparatorC
import org.eclipse.emf.compare.rcp.ui.internal.configuration.impl.MergePreviewModeChange;
import org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.filters.StructureMergeViewerFilter;
import org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.groups.StructureMergeViewerGrouper;
+import org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.groups.impl.DefaultGroupProvider;
import org.eclipse.emf.compare.rcp.ui.structuremergeviewer.filters.IDifferenceFilter;
import org.eclipse.emf.compare.rcp.ui.structuremergeviewer.groups.IDifferenceGroupProvider;
+import org.eclipse.emf.compare.rcp.ui.structuremergeviewer.groups.IDifferenceGroupProvider.Descriptor;
import org.eclipse.emf.compare.scope.IComparisonScope;
import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.jface.util.PropertyChangeEvent;
@@ -200,8 +202,16 @@ public class EMFCompareConfiguration extends ForwardingCompareConfiguration impl
EMFCompareRCPUIPlugin plugin = EMFCompareRCPUIPlugin.getDefault();
IDifferenceGroupProvider.Descriptor.Registry groupProviderRegistry = plugin
.getDifferenceGroupProviderRegistry();
- getStructureMergeViewerGrouper().setProvider(
- groupProviderRegistry.getDefaultGroupProvider(comparisonScope, comparison));
+ Descriptor defaultGroupProvider = groupProviderRegistry.getDefaultGroupProvider(comparisonScope,
+ comparison);
+ IDifferenceGroupProvider defaultGroup = null;
+ if (defaultGroupProvider != null) {
+ defaultGroup = defaultGroupProvider.createGroupProvider();
+ }
+ if (defaultGroup == null) {
+ defaultGroup = new DefaultGroupProvider();
+ }
+ getStructureMergeViewerGrouper().setProvider(defaultGroup);
}
protected void initStructureMergeViewerFilter(Comparison comparison, IComparisonScope comparisonScope) {
diff --git a/plugins/org.eclipse.emf.compare.rcp.ui/plugin.properties b/plugins/org.eclipse.emf.compare.rcp.ui/plugin.properties
index e20a38042..969954641 100644
--- a/plugins/org.eclipse.emf.compare.rcp.ui/plugin.properties
+++ b/plugins/org.eclipse.emf.compare.rcp.ui/plugin.properties
@@ -1,5 +1,5 @@
################################################################################
-# Copyright (c) 2012, 2013 Obeo.
+# Copyright (c) 2012, 2014 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
@@ -10,7 +10,7 @@
################################################################################
pluginName = EMF Compare RCP UI
providerName = Eclipse Modeling Project
-emf.compare.no.group = No Group
+emf.compare.default = Default
emf.compare.kind.groups = By Kind
emf.compare.side.groups = By Side
emf.compare.resource.group = By Resource
diff --git a/plugins/org.eclipse.emf.compare.rcp.ui/plugin.xml b/plugins/org.eclipse.emf.compare.rcp.ui/plugin.xml
index 4d522fe50..550e39a9d 100644
--- a/plugins/org.eclipse.emf.compare.rcp.ui/plugin.xml
+++ b/plugins/org.eclipse.emf.compare.rcp.ui/plugin.xml
@@ -21,24 +21,25 @@
<extension
point="org.eclipse.emf.compare.rcp.ui.groups">
<group
- activeByDefault="true"
class="org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.groups.impl.DefaultGroupProvider"
- label="%emf.compare.no.group">
+ label="%emf.compare.default"
+ rank="100">
</group>
<group
- activeByDefault="false"
class="org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.groups.impl.KindGroupProvider"
- label="%emf.compare.kind.groups">
+ label="%emf.compare.kind.groups"
+ rank="80">
</group>
<group
- activeByDefault="true"
class="org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.groups.impl.ThreeWayComparisonGroupProvider"
- label="%emf.compare.side.groups">
+ label="%emf.compare.side.groups"
+ rank="120"
+ type="THREE_WAY">
</group>
<group
- activeByDefault="false"
class="org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.groups.impl.ByResourceGroupProvider"
- label="%emf.compare.resource.group">
+ label="%emf.compare.resource.group"
+ rank="60">
</group>
</extension>
<extension
diff --git a/plugins/org.eclipse.emf.compare.rcp.ui/schema/groups.exsd b/plugins/org.eclipse.emf.compare.rcp.ui/schema/groups.exsd
index 6bfbe2f84..0928bbf9b 100644
--- a/plugins/org.eclipse.emf.compare.rcp.ui/schema/groups.exsd
+++ b/plugins/org.eclipse.emf.compare.rcp.ui/schema/groups.exsd
@@ -57,7 +57,7 @@ You can provide your own groups by adding an extension of type &lt;samp&gt;org.e
A class that implements &lt;samp&gt;org.eclipse.emf.compare.rcp.ui.structuremergeviewer.groups.IDifferenceGroupProvider&lt;/samp&gt;.
</documentation>
<appinfo>
- <meta.attribute kind="java" basedOn=":org.eclipse.emf.compare.rcp.ui.structuremergeviewer.groups.IDifferenceGroupProvider"/>
+ <meta.attribute kind="java" basedOn=":org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.groups.IDifferenceGroupProvider"/>
</appinfo>
</annotation>
</attribute>
@@ -68,12 +68,53 @@ You can provide your own groups by adding an extension of type &lt;samp&gt;org.e
</documentation>
</annotation>
</attribute>
- <attribute name="activeByDefault" type="boolean" use="required">
+ <attribute name="activeByDefault" type="boolean">
<annotation>
<documentation>
- The initial activation state of the filter.
+ The initial activation state of the group. (Deprecated use rank instead)
+ </documentation>
+ <appinfo>
+ <meta.attribute deprecated="true"/>
+ </appinfo>
+ </annotation>
+ </attribute>
+ <attribute name="description" type="string">
+ <annotation>
+ <documentation>
+ A description of the group. (Used in interface)
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="rank" type="string">
+ <annotation>
+ <documentation>
+ The rank of the group. The highest rank enabled for a comparison is used.
+
+ Default value : 0
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="type">
+ <annotation>
+ <documentation>
+ Type of comparison this group can handle.
+ THREE_WAY: This group can only handle three way comparison.
+ TWO_WAY: This group can handle two way comparison
+ BOTH: This group can handle two and three way comparison.
+
+ Default value: BOTH
</documentation>
</annotation>
+ <simpleType>
+ <restriction base="string">
+ <enumeration value="THREE_WAY">
+ </enumeration>
+ <enumeration value="TWO_WAY">
+ </enumeration>
+ <enumeration value="BOTH">
+ </enumeration>
+ </restriction>
+ </simpleType>
</attribute>
</complexType>
</element>
@@ -83,7 +124,7 @@ You can provide your own groups by adding an extension of type &lt;samp&gt;org.e
<meta.section type="since"/>
</appinfo>
<documentation>
- 4.0
+ 3.0.0
</documentation>
</annotation>
diff --git a/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/EMFCompareRCPUIPlugin.java b/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/EMFCompareRCPUIPlugin.java
index dbf92b78a..84fba16c9 100644
--- a/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/EMFCompareRCPUIPlugin.java
+++ b/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/EMFCompareRCPUIPlugin.java
@@ -19,8 +19,12 @@ import org.eclipse.core.runtime.IExtensionRegistry;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.preferences.InstanceScope;
import org.eclipse.emf.compare.rcp.EMFCompareRCPPlugin;
import org.eclipse.emf.compare.rcp.extension.AbstractRegistryEventListener;
+import org.eclipse.emf.compare.rcp.internal.extension.IItemRegistry;
+import org.eclipse.emf.compare.rcp.internal.extension.impl.ItemRegistry;
+import org.eclipse.emf.compare.rcp.internal.preferences.EMFComparePreferences;
import org.eclipse.emf.compare.rcp.ui.contentmergeviewer.accessor.factory.IAccessorFactory;
import org.eclipse.emf.compare.rcp.ui.internal.configuration.ui.ConfigurationUIRegistryEventListener;
import org.eclipse.emf.compare.rcp.ui.internal.configuration.ui.IConfigurationUIFactory;
@@ -78,6 +82,8 @@ public class EMFCompareRCPUIPlugin extends AbstractUIPlugin {
private AbstractRegistryEventListener groupProviderRegistryListener;
+ private IItemRegistry<IDifferenceGroupProvider.Descriptor> groupItemRegistry;
+
private IDifferenceGroupProvider.Descriptor.Registry groupProviderRegistry;
private AbstractRegistryEventListener filterRegistryListener;
@@ -97,6 +103,17 @@ public class EMFCompareRCPUIPlugin extends AbstractUIPlugin {
private ConfigurationUIRegistryEventListener matchEngineConfiguratorRegistryListener;
/**
+ * Instance scope for preferences.
+ * <p>
+ * Do not use singleton to respect Helios compatibility
+ * </p>
+ *
+ * @see org.eclipse.core.runtime.preferences.InstanceScope#INSTANCE
+ */
+ @SuppressWarnings("deprecation")
+ private InstanceScope instanceScope = new InstanceScope();
+
+ /**
* The constructor.
*/
public EMFCompareRCPUIPlugin() {
@@ -114,9 +131,13 @@ public class EMFCompareRCPUIPlugin extends AbstractUIPlugin {
IExtensionRegistry extensionRegistry = Platform.getExtensionRegistry();
- groupProviderRegistry = new DifferenceGroupRegistryImpl();
+ groupItemRegistry = new ItemRegistry<IDifferenceGroupProvider.Descriptor>();
+ groupProviderRegistry = new DifferenceGroupRegistryImpl(groupItemRegistry, instanceScope
+ .getNode(PLUGIN_ID), EMFComparePreferences.TWO_WAY_GROUP_RANKING,
+ EMFComparePreferences.THREE_WAY_GROUP_RANKING);
groupProviderRegistryListener = new DifferenceGroupProviderExtensionRegistryListener(PLUGIN_ID,
- GROUP_PROVIDER_PPID, getLog(), groupProviderRegistry);
+ GROUP_PROVIDER_PPID, getLog(), groupItemRegistry);
+
extensionRegistry.addListener(groupProviderRegistryListener, PLUGIN_ID + "." + GROUP_PROVIDER_PPID); //$NON-NLS-1$
groupProviderRegistryListener.readRegistry(extensionRegistry);
@@ -176,6 +197,7 @@ public class EMFCompareRCPUIPlugin extends AbstractUIPlugin {
extensionRegistry.removeListener(groupProviderRegistryListener);
groupProviderRegistryListener = null;
+ groupItemRegistry = null;
groupProviderRegistry = null;
plugin = null;
diff --git a/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/emfcomparercpuimessages.properties b/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/emfcomparercpuimessages.properties
index a825559f3..5445147ca 100644
--- a/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/emfcomparercpuimessages.properties
+++ b/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/emfcomparercpuimessages.properties
@@ -17,8 +17,6 @@ FilterActionMenu.tooltip = Filters
GroupActionMenu.tooltip = Groups
-DefaultGroupProvider.label = Default
-
KindGroupProvider.addition.label = Additions
KindGroupProvider.deletion.label = Deletions
KindGroupProvider.change.label = Changes
diff --git a/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/actions/GroupAction.java b/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/actions/GroupAction.java
index 041887e5d..b96e54282 100644
--- a/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/actions/GroupAction.java
+++ b/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/actions/GroupAction.java
@@ -40,8 +40,8 @@ public class GroupAction extends Action {
* The group provider associated with this action.
*/
public GroupAction(StructureMergeViewerGrouper structureMergeViewerGrouper,
- IDifferenceGroupProvider provider) {
- super(provider.getLabel(), IAction.AS_RADIO_BUTTON);
+ IDifferenceGroupProvider provider, String label) {
+ super(label, IAction.AS_RADIO_BUTTON);
this.structureMergeViewerGrouper = structureMergeViewerGrouper;
this.provider = provider;
}
diff --git a/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/actions/GroupActionMenu.java b/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/actions/GroupActionMenu.java
index 06562ac20..4f80b46be 100644
--- a/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/actions/GroupActionMenu.java
+++ b/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/actions/GroupActionMenu.java
@@ -71,11 +71,14 @@ public class GroupActionMenu extends Action implements IMenuCreator {
public void updateMenu(IComparisonScope scope, Comparison comparison) {
menuManager.removeAll();
- for (IDifferenceGroupProvider dgp : registry.getGroupProviders(scope, comparison)) {
- IAction action = new GroupAction(structureMergeViewerGrouper, dgp);
- menuManager.add(action);
- if (dgp == structureMergeViewerGrouper.getProvider()) {
- action.setChecked(true);
+ for (IDifferenceGroupProvider.Descriptor dgp : registry.getGroupProviders(scope, comparison)) {
+ IDifferenceGroupProvider gp = dgp.createGroupProvider();
+ if (gp != null) {
+ IAction action = new GroupAction(structureMergeViewerGrouper, gp, dgp.getLabel());
+ menuManager.add(action);
+ if (dgp == structureMergeViewerGrouper.getProvider()) {
+ action.setChecked(true);
+ }
}
}
}
diff --git a/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/groups/impl/ByResourceGroupProvider.java b/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/groups/impl/ByResourceGroupProvider.java
index 91c3c6233..e54974b82 100644
--- a/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/groups/impl/ByResourceGroupProvider.java
+++ b/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/groups/impl/ByResourceGroupProvider.java
@@ -47,9 +47,6 @@ import org.eclipse.emf.edit.tree.TreeNode;
*/
public class ByResourceGroupProvider extends AbstractDifferenceGroupProvider {
- /** A human-readable label for this group provider. This will be displayed in the EMF Compare UI. */
- private String label;
-
/** The initial activation state of the group provider. */
private boolean activeByDefault;
@@ -76,42 +73,6 @@ public class ByResourceGroupProvider extends AbstractDifferenceGroupProvider {
/**
* {@inheritDoc}
*
- * @see org.eclipse.emf.compare.rcp.ui.structuremergeviewer.groups.IDifferenceGroupProvider#getLabel()
- */
- public String getLabel() {
- return label;
- }
-
- /**
- * {@inheritDoc}
- *
- * @see org.eclipse.emf.compare.rcp.ui.structuremergeviewer.groups.IDifferenceGroupProvider#setLabel(java.lang.String)
- */
- public void setLabel(String label) {
- this.label = label;
- }
-
- /**
- * {@inheritDoc}
- *
- * @see org.eclipse.emf.compare.rcp.ui.structuremergeviewer.groups.IDifferenceGroupProvider#defaultSelected()
- */
- public boolean defaultSelected() {
- return activeByDefault;
- }
-
- /**
- * {@inheritDoc}
- *
- * @see org.eclipse.emf.compare.rcp.ui.structuremergeviewer.groups.IDifferenceGroupProvider#setDefaultSelected(boolean)
- */
- public void setDefaultSelected(boolean active) {
- this.activeByDefault = active;
- }
-
- /**
- * {@inheritDoc}
- *
* @see org.eclipse.emf.compare.rcp.ui.structuremergeviewer.groups.IDifferenceGroupProvider#isEnabled(org
* .eclipse.emf.compare.scope.IComparisonScope, org.eclipse.emf.compare.Comparison)
*/
diff --git a/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/groups/impl/DefaultGroupProvider.java b/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/groups/impl/DefaultGroupProvider.java
index af34926aa..efa6d0bff 100644
--- a/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/groups/impl/DefaultGroupProvider.java
+++ b/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/groups/impl/DefaultGroupProvider.java
@@ -17,7 +17,6 @@ import com.google.common.collect.ImmutableList;
import java.util.Collection;
import org.eclipse.emf.compare.Comparison;
-import org.eclipse.emf.compare.rcp.ui.internal.EMFCompareRCPUIMessages;
import org.eclipse.emf.compare.rcp.ui.structuremergeviewer.groups.AbstractDifferenceGroupProvider;
import org.eclipse.emf.compare.rcp.ui.structuremergeviewer.groups.IDifferenceGroup;
import org.eclipse.emf.compare.scope.IComparisonScope;
@@ -55,42 +54,6 @@ public class DefaultGroupProvider extends AbstractDifferenceGroupProvider {
/**
* {@inheritDoc}
*
- * @see org.eclipse.emf.compare.rcp.ui.structuremergeviewer.groups.IDifferenceGroupProvider#getLabel()
- */
- public String getLabel() {
- return EMFCompareRCPUIMessages.getString("DefaultGroupProvider.label"); //$NON-NLS-1$
- }
-
- /**
- * {@inheritDoc}
- *
- * @see org.eclipse.emf.compare.rcp.ui.structuremergeviewer.groups.IDifferenceGroupProvider#setLabel(java.lang.String)
- */
- public void setLabel(String label) {
-
- }
-
- /**
- * {@inheritDoc}
- *
- * @see org.eclipse.emf.compare.rcp.ui.structuremergeviewer.groups.IDifferenceGroupProvider#defaultSelected()
- */
- public boolean defaultSelected() {
- return true;
- }
-
- /**
- * {@inheritDoc}
- *
- * @see org.eclipse.emf.compare.rcp.ui.structuremergeviewer.groups.IDifferenceGroupProvider#setDefaultSelected(boolean)
- */
- public void setDefaultSelected(boolean defaultSelected) {
-
- }
-
- /**
- * {@inheritDoc}
- *
* @see org.eclipse.emf.compare.rcp.ui.structuremergeviewer.groups.IDifferenceGroupProvider#isEnabled(org
* .eclipse.emf.compare.scope.IComparisonScope, org.eclipse.emf.compare.Comparison)
*/
diff --git a/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/groups/impl/DifferenceGroupDescriptorWrapper.java b/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/groups/impl/DifferenceGroupDescriptorWrapper.java
new file mode 100644
index 000000000..3ea376952
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/groups/impl/DifferenceGroupDescriptorWrapper.java
@@ -0,0 +1,88 @@
+/******************************************************************************
+ * Copyright (c) 2014 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.emf.compare.rcp.ui.internal.structuremergeviewer.groups.impl;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.emf.compare.rcp.internal.extension.impl.AbstractItemDescriptor;
+import org.eclipse.emf.compare.rcp.ui.EMFCompareRCPUIPlugin;
+import org.eclipse.emf.compare.rcp.ui.structuremergeviewer.groups.IDifferenceGroupProvider;
+import org.eclipse.emf.compare.rcp.ui.structuremergeviewer.groups.IDifferenceGroupProvider.ComparisonType;
+import org.eclipse.emf.compare.rcp.ui.structuremergeviewer.groups.IDifferenceGroupProvider.Descriptor;
+
+/**
+ * Implementation of {@link IDifferenceGroupProvider.Descriptor}.
+ *
+ * @author <a href="mailto:arthur.daussy@obeo.fr">Arthur Daussy</a>
+ */
+public class DifferenceGroupDescriptorWrapper extends AbstractItemDescriptor<IDifferenceGroupProvider.Descriptor> implements IDifferenceGroupProvider.Descriptor {
+
+ /** {@link IConfigurationElement} used to instantiate the {@link IDifferenceGroupProvider} */
+ private final IConfigurationElement element;
+
+ /** Type of comparison the {@link IDifferenceGroupProvider} can handle. */
+ private final ComparisonType type;
+
+ /**
+ * Constructor.
+ *
+ * @param label
+ * Human-readable label of the underlying group provider.
+ * @param description
+ * A more detailed description that can be displayed to the user for this group.
+ * @param elem
+ * {@link IConfigurationElement} used to instantiate the {@link IDifferenceGroupProvider}
+ * @param rank
+ * Rank of the descriptor
+ * @param comparisonType
+ * Type of comparison the wrapped {@link IDifferenceGroupProvider} can handle.
+ */
+ public DifferenceGroupDescriptorWrapper(String label, String description, IConfigurationElement elem,
+ int rank, ComparisonType comparisonType) {
+ super(label, description, rank, elem
+ .getAttribute(DifferenceGroupProviderExtensionRegistryListener.ATT_CLASS));
+ this.element = elem;
+ this.type = comparisonType;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public Descriptor getItem() {
+ return this;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public ComparisonType getType() {
+ return type;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public IDifferenceGroupProvider createGroupProvider() {
+ Object instance;
+ try {
+ instance = element
+ .createExecutableExtension(DifferenceGroupProviderExtensionRegistryListener.ATT_CLASS);
+ if (instance instanceof IDifferenceGroupProvider) {
+ IDifferenceGroupProvider groupProvider = (IDifferenceGroupProvider)instance;
+ return groupProvider;
+ }
+ } catch (CoreException e) {
+ EMFCompareRCPUIPlugin.getDefault().log(e);
+ }
+ return null;
+ }
+
+}
diff --git a/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/groups/impl/DifferenceGroupProviderDescriptorImpl.java b/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/groups/impl/DifferenceGroupProviderDescriptorImpl.java
deleted file mode 100644
index 6387f947c..000000000
--- a/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/groups/impl/DifferenceGroupProviderDescriptorImpl.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2013, 2014 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.emf.compare.rcp.ui.internal.structuremergeviewer.groups.impl;
-
-import org.eclipse.core.runtime.IConfigurationElement;
-import org.eclipse.emf.compare.rcp.extension.PluginClassDescriptor;
-import org.eclipse.emf.compare.rcp.ui.structuremergeviewer.groups.IDifferenceGroupProvider;
-
-/**
- * Default implementation of {@link IDifferenceGroupProvider.Descriptor}.
- *
- * @author <a href="mailto:axel.richard@obeo.fr">Axel Richard</a>
- * @since 4.0
- */
-public class DifferenceGroupProviderDescriptorImpl extends PluginClassDescriptor<IDifferenceGroupProvider> implements IDifferenceGroupProvider.Descriptor {
-
- /** The label of the group provider. */
- private String label;
-
- /** The state of the default selection of the group provider. */
- private boolean defaultSelected;
-
- /**
- * Creates a descriptor corresponding to the information of the given <em>element</em>.
- *
- * @param element
- * Configuration element from which to create this descriptor.
- * @param label
- * The label of the group provider.
- * @param defaultSelected
- * The state of the default selection of the group provider.
- */
- public DifferenceGroupProviderDescriptorImpl(IConfigurationElement element, String label,
- boolean defaultSelected) {
- super(element, DifferenceGroupProviderExtensionRegistryListener.ATT_CLASS);
- this.label = label;
- this.defaultSelected = defaultSelected;
- }
-
- /**
- * {@inheritDoc}
- *
- * @see IDifferenceGroupProvider.Descriptor#createGroupProvider()
- */
- public IDifferenceGroupProvider createGroupProvider() {
- IDifferenceGroupProvider differenceGroupProvider = this.createInstance();
- differenceGroupProvider.setLabel(label);
- differenceGroupProvider.setDefaultSelected(defaultSelected);
- return differenceGroupProvider;
- }
-
-}
diff --git a/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/groups/impl/DifferenceGroupProviderExtensionRegistryListener.java b/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/groups/impl/DifferenceGroupProviderExtensionRegistryListener.java
index 8c96449bd..b50f8afa9 100644
--- a/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/groups/impl/DifferenceGroupProviderExtensionRegistryListener.java
+++ b/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/groups/impl/DifferenceGroupProviderExtensionRegistryListener.java
@@ -14,7 +14,11 @@ import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.ILog;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.emf.compare.rcp.extension.AbstractRegistryEventListener;
+import org.eclipse.emf.compare.rcp.internal.extension.IItemDescriptor;
+import org.eclipse.emf.compare.rcp.internal.extension.IItemRegistry;
import org.eclipse.emf.compare.rcp.ui.structuremergeviewer.groups.IDifferenceGroupProvider;
+import org.eclipse.emf.compare.rcp.ui.structuremergeviewer.groups.IDifferenceGroupProvider.ComparisonType;
+import org.eclipse.emf.compare.rcp.ui.structuremergeviewer.groups.IDifferenceGroupProvider.Descriptor;
/**
* Utility class to listen to the {@link IDifferenceGroupProvider.Descriptor.Registry}.
@@ -24,20 +28,29 @@ import org.eclipse.emf.compare.rcp.ui.structuremergeviewer.groups.IDifferenceGro
*/
public class DifferenceGroupProviderExtensionRegistryListener extends AbstractRegistryEventListener {
+ /** Default value for the rank attribute if not specified. */
+ private static final int DEFAULT_RANK_VALUE = 0;
+
/** TAG_GROUP_PROVIDER. */
static final String TAG_GROUP_PROVIDER = "group"; //$NON-NLS-1$
- /** ATT_CLASS. */
- static final String ATT_CLASS = "class"; //$NON-NLS-1$
-
/** ATT_LABEL. */
static final String ATT_LABEL = "label"; //$NON-NLS-1$
- /** ATT_ACTIVE. */
- static final String ATT_ACTIVE = "activeByDefault"; //$NON-NLS-1$
+ /** ATT_DESCRIPTION. */
+ static final String ATT_DESCRIPTION = "description"; //$NON-NLS-1$
+
+ /** ATT_COMPARISON_TYPE. */
+ static final String ATT_COMPARISON_TYPE = "type"; //$NON-NLS-1$
+
+ /** ATT_RANK. */
+ static final String ATT_RANK = "rank"; //$NON-NLS-1$
+
+ /** ATT_CLASS. */
+ static final String ATT_CLASS = "class"; //$NON-NLS-1$
/** The IDifferenceGroupProvider.Descriptor.Registry to listen. */
- private final IDifferenceGroupProvider.Descriptor.Registry groupProviderRegistry;
+ private final IItemRegistry<IDifferenceGroupProvider.Descriptor> groupProviderRegistry;
/**
* Default constructor.
@@ -52,7 +65,7 @@ public class DifferenceGroupProviderExtensionRegistryListener extends AbstractRe
* The {@link IDifferenceGroupProvider.Descriptor.Registry} to listen.
*/
public DifferenceGroupProviderExtensionRegistryListener(String pluginID, String extensionPointID,
- ILog log, IDifferenceGroupProvider.Descriptor.Registry registry) {
+ ILog log, IItemRegistry<IDifferenceGroupProvider.Descriptor> registry) {
super(pluginID, extensionPointID, log);
this.groupProviderRegistry = registry;
}
@@ -65,7 +78,6 @@ public class DifferenceGroupProviderExtensionRegistryListener extends AbstractRe
@Override
protected boolean validateExtensionElement(IConfigurationElement element) {
final boolean valid;
-
if (element.getName().equals(TAG_GROUP_PROVIDER)) {
if (element.getAttribute(ATT_CLASS) == null) {
logMissingAttribute(element, ATT_CLASS);
@@ -73,9 +85,22 @@ public class DifferenceGroupProviderExtensionRegistryListener extends AbstractRe
} else if (element.getAttribute(ATT_LABEL) == null) {
logMissingAttribute(element, ATT_LABEL);
valid = false;
- } else if (element.getAttribute(ATT_ACTIVE) == null) {
- logMissingAttribute(element, ATT_ACTIVE);
- valid = false;
+ } else if (element.getAttribute(ATT_RANK) != null) {
+ try {
+ Integer.valueOf(element.getAttribute(ATT_RANK));
+ } catch (NumberFormatException e) {
+ log(element, e);
+ return false;
+ }
+ valid = true;
+ } else if (element.getAttribute(ATT_COMPARISON_TYPE) != null) {
+ try {
+ ComparisonType.valueOf(element.getAttribute(ATT_COMPARISON_TYPE));
+ valid = true;
+ } catch (IllegalArgumentException e) {
+ log(element, e);
+ return false;
+ }
} else {
valid = true;
}
@@ -92,11 +117,26 @@ public class DifferenceGroupProviderExtensionRegistryListener extends AbstractRe
*/
@Override
protected boolean addedValid(IConfigurationElement element) {
- IDifferenceGroupProvider.Descriptor providerDescriptor = new DifferenceGroupProviderDescriptorImpl(
- element, element.getAttribute(ATT_LABEL), Boolean.valueOf(element.getAttribute(ATT_ACTIVE))
- .booleanValue());
- IDifferenceGroupProvider.Descriptor previous = groupProviderRegistry.add(providerDescriptor, element
- .getAttribute(ATT_CLASS));
+ String rankValue = element.getAttribute(ATT_RANK);
+ final int rank;
+ if (rankValue == null) {
+ rank = DEFAULT_RANK_VALUE;
+ } else {
+ rank = Integer.valueOf(rankValue).intValue();
+ }
+ String typeAttribute = element.getAttribute(ATT_COMPARISON_TYPE);
+ final ComparisonType type;
+ if (typeAttribute != null) {
+ type = ComparisonType.valueOf(typeAttribute);
+ } else {
+ type = ComparisonType.BOTH;
+ }
+ String label = element.getAttribute(ATT_LABEL);
+ String description = element.getAttribute(ATT_DESCRIPTION);
+ DifferenceGroupDescriptorWrapper itemDescriptor = new DifferenceGroupDescriptorWrapper(label, description,
+ element, rank, type);
+
+ IItemDescriptor<Descriptor> previous = groupProviderRegistry.add(itemDescriptor);
if (previous != null) {
log(IStatus.WARNING, element, "The group provider descriptor'" + element.getAttribute(ATT_CLASS) //$NON-NLS-1$
+ "' is registered twice."); //$NON-NLS-1$
diff --git a/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/groups/impl/DifferenceGroupRegistryImpl.java b/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/groups/impl/DifferenceGroupRegistryImpl.java
index 3875a8d39..ad757210d 100644
--- a/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/groups/impl/DifferenceGroupRegistryImpl.java
+++ b/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/groups/impl/DifferenceGroupRegistryImpl.java
@@ -10,23 +10,32 @@
*******************************************************************************/
package org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.groups.impl;
-import static com.google.common.base.Predicates.instanceOf;
-import static com.google.common.collect.Iterables.indexOf;
import static com.google.common.collect.Lists.newArrayList;
import com.google.common.base.Preconditions;
+import com.google.common.base.Predicate;
import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Iterables;
+import com.google.common.collect.Lists;
+import java.util.Collections;
import java.util.List;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
+import java.util.ListIterator;
import org.eclipse.emf.compare.Comparison;
+import org.eclipse.emf.compare.rcp.internal.extension.IItemDescriptor;
+import org.eclipse.emf.compare.rcp.internal.extension.IItemRegistry;
+import org.eclipse.emf.compare.rcp.internal.extension.impl.ItemUtil;
+import org.eclipse.emf.compare.rcp.internal.extension.impl.WrapperItemDescriptor;
import org.eclipse.emf.compare.rcp.ui.structuremergeviewer.groups.IDifferenceGroupProvider;
+import org.eclipse.emf.compare.rcp.ui.structuremergeviewer.groups.IDifferenceGroupProvider.ComparisonType;
+import org.eclipse.emf.compare.rcp.ui.structuremergeviewer.groups.IDifferenceGroupProvider.Descriptor;
import org.eclipse.emf.compare.scope.IComparisonScope;
+import org.osgi.service.prefs.Preferences;
/**
- * The default implementation of the {@link IDifferenceGroupProvider.Descriptor.Registry}.
+ * Implementation of the {@link IDifferenceGroupProvider.Descriptor.Registry}. This implementation allow user
+ * to override ranking of each group using preferences.
*
* @author <a href="mailto:axel.richard@obeo.fr">Axel Richard</a>
* @since 4.0
@@ -34,13 +43,46 @@ import org.eclipse.emf.compare.scope.IComparisonScope;
public class DifferenceGroupRegistryImpl implements IDifferenceGroupProvider.Descriptor.Registry {
/** A map that associates the class name to theirs {@link IDifferenceGroupProvider.Descriptor}s. */
- private final Map<String, IDifferenceGroupProvider.Descriptor> map;
+ private final IItemRegistry<IDifferenceGroupProvider.Descriptor> registry;
+
+ /** Preference key for two way comparison group ranking. */
+ private final String twoWayPreferenceKey;
+
+ /** Preference key for three way comparison group ranking. */
+ private final String threeWayPrefenceKey;
+
+ /** Preferences holding ranked descriptors. */
+ private Preferences preferences;
/**
* Constructs the registry.
+ *
+ * @param twoWaygroupProviderDescriptors
+ */
+ public DifferenceGroupRegistryImpl(IItemRegistry<IDifferenceGroupProvider.Descriptor> registry,
+ Preferences preferences, String twoWayPreferenceKey, String threeWayPrefenceKey) {
+ this.registry = registry;
+ this.twoWayPreferenceKey = twoWayPreferenceKey;
+ this.threeWayPrefenceKey = threeWayPrefenceKey;
+ this.preferences = preferences;
+ }
+
+ /**
+ * Return an ordered list of IItemDescriptor<IDifferenceGroupProvider.Descriptor>.
+ *
+ * @return Ordered list of IItemDescriptor<IDifferenceGroupProvider.Descriptor>.
*/
- public DifferenceGroupRegistryImpl() {
- map = new ConcurrentHashMap<String, IDifferenceGroupProvider.Descriptor>();
+ private List<IItemDescriptor<IDifferenceGroupProvider.Descriptor>> getOrderedGroupProviderDescriptors(
+ final Comparison comparison) {
+ final List<IItemDescriptor<Descriptor>> items;
+ if (comparison.isThreeWay()) {
+ items = ItemUtil.getOrderedItems(getDefaultThreeWayDescriptors(), registry, threeWayPrefenceKey,
+ preferences);
+ } else {
+ items = ItemUtil.getOrderedItems(getDefaultTwoWayDescriptors(), registry, twoWayPreferenceKey,
+ preferences);
+ }
+ return items;
}
/**
@@ -49,20 +91,23 @@ public class DifferenceGroupRegistryImpl implements IDifferenceGroupProvider.Des
* @see org.eclipse.emf.compare.rcp.ui.structuremergeviewer.groups.IDifferenceGroupProvider.Descriptor.Registry#getGroupProviders(IComparisonScope,
* Comparison)
*/
- public List<IDifferenceGroupProvider> getGroupProviders(IComparisonScope scope, Comparison comparison) {
- List<IDifferenceGroupProvider> providers = newArrayList();
- for (IDifferenceGroupProvider.Descriptor desc : map.values()) {
- IDifferenceGroupProvider groupProvider = desc.createGroupProvider();
- if (isGroupProviderActivable(groupProvider, scope, comparison)) {
- providers.add(groupProvider);
+ public List<IDifferenceGroupProvider.Descriptor> getGroupProviders(IComparisonScope scope,
+ Comparison comparison) {
+ if (comparison != null) {
+ List<IDifferenceGroupProvider.Descriptor> providers = newArrayList();
+ List<IItemDescriptor<Descriptor>> groupProviderDescriptors = getOrderedGroupProviderDescriptors(comparison);
+ ListIterator<IItemDescriptor<Descriptor>> groupIterator = groupProviderDescriptors.listIterator();
+ while (groupIterator.hasNext()) {
+ IItemDescriptor<Descriptor> desc = groupIterator.next();
+ IDifferenceGroupProvider.Descriptor groupProviderDescriptor = desc.getItem();
+ IDifferenceGroupProvider gp = groupProviderDescriptor.createGroupProvider();
+ if (gp != null && isGroupProviderActivable(gp, scope, comparison)) {
+ providers.add(groupProviderDescriptor);
+ }
}
+ return ImmutableList.copyOf(providers);
}
- int indexOfDefault = indexOf(providers, instanceOf(DefaultGroupProvider.class));
- if (indexOfDefault >= 0) {
- IDifferenceGroupProvider defaultGroupProvider = providers.remove(indexOfDefault);
- providers.add(0, defaultGroupProvider);
- }
- return ImmutableList.copyOf(providers);
+ return Collections.emptyList();
}
/**
@@ -71,16 +116,13 @@ public class DifferenceGroupRegistryImpl implements IDifferenceGroupProvider.Des
* @see org.eclipse.emf.compare.rcp.ui.structuremergeviewer.groups.IDifferenceGroupProvider.Descriptor.Registry#getDefaultGroupProvider(org.eclipse.emf.compare.scope.IComparisonScope,
* org.eclipse.emf.compare.Comparison)
*/
- public IDifferenceGroupProvider getDefaultGroupProvider(IComparisonScope scope, Comparison comparison) {
- IDifferenceGroupProvider selectedGroupProvider = null;
- for (IDifferenceGroupProvider dgp : getGroupProviders(scope, comparison)) {
- if (dgp.defaultSelected()) {
- if (selectedGroupProvider == null || !(dgp instanceof DefaultGroupProvider)) {
- selectedGroupProvider = dgp;
- }
- }
+ public IDifferenceGroupProvider.Descriptor getDefaultGroupProvider(IComparisonScope scope,
+ Comparison comparison) {
+ List<IDifferenceGroupProvider.Descriptor> descriptors = getGroupProviders(scope, comparison);
+ if (!descriptors.isEmpty()) {
+ return descriptors.get(0);
}
- return selectedGroupProvider;
+ return null;
}
/**
@@ -108,7 +150,16 @@ public class DifferenceGroupRegistryImpl implements IDifferenceGroupProvider.Des
public IDifferenceGroupProvider.Descriptor add(IDifferenceGroupProvider.Descriptor providerDescriptor,
String className) {
Preconditions.checkNotNull(providerDescriptor);
- return map.put(className, providerDescriptor);
+ IDifferenceGroupProvider groupProvider = providerDescriptor.createGroupProvider();
+ WrapperItemDescriptor<IDifferenceGroupProvider.Descriptor> descriptor = new WrapperItemDescriptor<IDifferenceGroupProvider.Descriptor>(
+ providerDescriptor.getLabel(), providerDescriptor.getDescription(), providerDescriptor
+ .getRank(), groupProvider.getClass().getName(), providerDescriptor);
+
+ IItemDescriptor<Descriptor> oldValue = registry.add(descriptor);
+ if (oldValue != null) {
+ return oldValue.getItem();
+ }
+ return null;
}
/**
@@ -117,7 +168,11 @@ public class DifferenceGroupRegistryImpl implements IDifferenceGroupProvider.Des
* @see org.eclipse.emf.compare.rcp.ui.structuremergeviewer.groups.IDifferenceGroupProvider.Descriptor.Registry#remove(java.lang.String)
*/
public IDifferenceGroupProvider.Descriptor remove(String className) {
- return map.remove(className);
+ IItemDescriptor<IDifferenceGroupProvider.Descriptor> oldValue = registry.remove(className);
+ if (oldValue != null) {
+ return oldValue.getItem();
+ }
+ return null;
}
/**
@@ -126,6 +181,51 @@ public class DifferenceGroupRegistryImpl implements IDifferenceGroupProvider.Des
* @see org.eclipse.emf.compare.rcp.ui.structuremergeviewer.groups.IDifferenceGroupProvider.Descriptor.Registry#clear()
*/
public void clear() {
- map.clear();
+ registry.clear();
+ }
+
+ /**
+ * Get an ordered list of default descriptors for a three way comparison.
+ *
+ * @return
+ */
+ private List<IItemDescriptor<Descriptor>> getDefaultTwoWayDescriptors() {
+ Iterable<IItemDescriptor<Descriptor>> threeWayGroups = Iterables.filter(
+ registry.getItemDescriptors(), new Predicate<IItemDescriptor<Descriptor>>() {
+
+ public boolean apply(IItemDescriptor<Descriptor> descriptor) {
+ if (descriptor == null) {
+ return false;
+ }
+ ComparisonType type = descriptor.getItem().getType();
+ return type == ComparisonType.BOTH || type == ComparisonType.TWO_WAY;
+ }
+ });
+ List<IItemDescriptor<Descriptor>> result = Lists.newArrayList(threeWayGroups);
+ Collections.sort(result, Collections.reverseOrder());
+ return result;
+ }
+
+ /**
+ * Get an ordered list of default descriptors for a three way comparison.
+ *
+ * @return
+ */
+ private List<IItemDescriptor<Descriptor>> getDefaultThreeWayDescriptors() {
+ Iterable<IItemDescriptor<Descriptor>> twoWayComparison = Iterables.filter(registry
+ .getItemDescriptors(), new Predicate<IItemDescriptor<Descriptor>>() {
+
+ public boolean apply(IItemDescriptor<Descriptor> descriptor) {
+ if (descriptor == null) {
+ return false;
+ }
+ ComparisonType type = descriptor.getItem().getType();
+ return type == ComparisonType.BOTH || type == ComparisonType.THREE_WAY;
+ }
+ });
+ List<IItemDescriptor<Descriptor>> result = Lists.newArrayList(twoWayComparison);
+ Collections.sort(result, Collections.reverseOrder());
+ return result;
}
+
}
diff --git a/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/groups/impl/EmptyDifferenceGroupProvider.java b/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/groups/impl/EmptyDifferenceGroupProvider.java
index 45af3a00d..d7516675c 100644
--- a/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/groups/impl/EmptyDifferenceGroupProvider.java
+++ b/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/groups/impl/EmptyDifferenceGroupProvider.java
@@ -1,98 +1,59 @@
-/*******************************************************************************
- * Copyright (c) 2014 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.emf.compare.rcp.ui.internal.structuremergeviewer.groups.impl;
-
-import com.google.common.collect.ImmutableList;
-
-import java.util.Collection;
-
-import org.eclipse.emf.compare.Comparison;
-import org.eclipse.emf.compare.rcp.ui.structuremergeviewer.groups.AbstractDifferenceGroupProvider;
-import org.eclipse.emf.compare.rcp.ui.structuremergeviewer.groups.IDifferenceGroup;
-import org.eclipse.emf.compare.rcp.ui.structuremergeviewer.groups.IDifferenceGroupProvider;
-import org.eclipse.emf.compare.scope.IComparisonScope;
-
-/**
- * An empty difference group provider.
- *
- * @author <a href="mailto:axel.richard@obeo.fr">Axel Richard</a>
- * @since 4.0
- */
-public class EmptyDifferenceGroupProvider extends AbstractDifferenceGroupProvider {
-
- /**
- * {@inheritDoc}
- *
- * @see org.eclipse.emf.compare.rcp.ui.structuremergeviewer.groups.IDifferenceGroupProvider#getGroups(org.eclipse.emf.compare.Comparison)
- */
- public Collection<? extends IDifferenceGroup> getGroups(Comparison comparison) {
- return ImmutableList.of();
- }
-
- /**
- * {@inheritDoc}
- *
- * @see org.eclipse.emf.compare.rcp.ui.structuremergeviewer.groups.IDifferenceGroupProvider#getLabel()
- */
- public String getLabel() {
- return IDifferenceGroupProvider.class.getName() + ".EMPTY"; //$NON-NLS-1$
- }
-
- /**
- * {@inheritDoc}
- *
- * @see org.eclipse.emf.compare.rcp.ui.structuremergeviewer.groups.IDifferenceGroupProvider#setLabel(java.lang.String)
- */
- public void setLabel(String label) {
- // do nothing
-
- }
-
- /**
- * {@inheritDoc}
- *
- * @see org.eclipse.emf.compare.rcp.ui.structuremergeviewer.groups.IDifferenceGroupProvider#defaultSelected()
- */
- public boolean defaultSelected() {
- return true;
- }
-
- /**
- * {@inheritDoc}
- *
- * @see org.eclipse.emf.compare.rcp.ui.structuremergeviewer.groups.IDifferenceGroupProvider#setDefaultSelected(boolean)
- */
- public void setDefaultSelected(boolean defaultSelected) {
- // do nothing;
-
- }
-
- /**
- * {@inheritDoc}
- *
- * @see org.eclipse.emf.compare.rcp.ui.structuremergeviewer.groups.IDifferenceGroupProvider#isEnabled(Open
- * Declaration org.eclipse.emf.compare.scope.IComparisonScope, org.eclipse.emf.compare.Comparison)
- */
- public boolean isEnabled(IComparisonScope scope, Comparison comparison) {
- return true;
- }
-
- /**
- * {@inheritDoc}
- *
- * @see org.eclipse.emf.compare.rcp.ui.structuremergeviewer.groups.IDifferenceGroupProvider#dispose()
- */
- public void dispose() {
- // do nothing;
-
- }
-
-}
+/*******************************************************************************
+ * Copyright (c) 2014 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.emf.compare.rcp.ui.internal.structuremergeviewer.groups.impl;
+
+import com.google.common.collect.ImmutableList;
+
+import java.util.Collection;
+
+import org.eclipse.emf.compare.Comparison;
+import org.eclipse.emf.compare.rcp.ui.structuremergeviewer.groups.AbstractDifferenceGroupProvider;
+import org.eclipse.emf.compare.rcp.ui.structuremergeviewer.groups.IDifferenceGroup;
+import org.eclipse.emf.compare.scope.IComparisonScope;
+
+/**
+ * An empty difference group provider.
+ *
+ * @author <a href="mailto:axel.richard@obeo.fr">Axel Richard</a>
+ * @since 4.0
+ */
+public class EmptyDifferenceGroupProvider extends AbstractDifferenceGroupProvider {
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.emf.compare.rcp.ui.structuremergeviewer.groups.IDifferenceGroupProvider#getGroups(org.eclipse.emf.compare.Comparison)
+ */
+ public Collection<? extends IDifferenceGroup> getGroups(Comparison comparison) {
+ return ImmutableList.of();
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.emf.compare.rcp.ui.structuremergeviewer.groups.IDifferenceGroupProvider#isEnabled(Open
+ * Declaration org.eclipse.emf.compare.scope.IComparisonScope, org.eclipse.emf.compare.Comparison)
+ */
+ public boolean isEnabled(IComparisonScope scope, Comparison comparison) {
+ return true;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.emf.compare.rcp.ui.structuremergeviewer.groups.IDifferenceGroupProvider#dispose()
+ */
+ public void dispose() {
+ // do nothing;
+
+ }
+
+}
diff --git a/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/groups/impl/KindGroupProvider.java b/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/groups/impl/KindGroupProvider.java
index 500ad626d..e3c4d84d0 100644
--- a/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/groups/impl/KindGroupProvider.java
+++ b/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/groups/impl/KindGroupProvider.java
@@ -34,12 +34,6 @@ import org.eclipse.emf.compare.scope.IComparisonScope;
*/
public class KindGroupProvider extends AbstractDifferenceGroupProvider {
- /** A human-readable label for this group provider. This will be displayed in the EMF Compare UI. */
- private String label;
-
- /** The initial activation state of the group provider. */
- private boolean activeByDefault;
-
/** The groups provided by this provider. */
private ImmutableList<IDifferenceGroup> differenceGroups;
@@ -88,42 +82,6 @@ public class KindGroupProvider extends AbstractDifferenceGroupProvider {
/**
* {@inheritDoc}
*
- * @see org.eclipse.emf.compare.rcp.ui.structuremergeviewer.groups.IDifferenceGroupProvider#getLabel()
- */
- public String getLabel() {
- return label;
- }
-
- /**
- * {@inheritDoc}
- *
- * @see org.eclipse.emf.compare.rcp.ui.structuremergeviewer.groups.IDifferenceGroupProvider#setLabel(java.lang.String)
- */
- public void setLabel(String label) {
- this.label = label;
- }
-
- /**
- * {@inheritDoc}
- *
- * @see org.eclipse.emf.compare.rcp.ui.structuremergeviewer.groups.IDifferenceGroupProvider#defaultSelected()
- */
- public boolean defaultSelected() {
- return activeByDefault;
- }
-
- /**
- * {@inheritDoc}
- *
- * @see org.eclipse.emf.compare.rcp.ui.structuremergeviewer.groups.IDifferenceGroupProvider#setDefaultSelected(boolean)
- */
- public void setDefaultSelected(boolean active) {
- this.activeByDefault = active;
- }
-
- /**
- * {@inheritDoc}
- *
* @see org.eclipse.emf.compare.rcp.ui.structuremergeviewer.groups.IDifferenceGroupProvider#isEnabled(org
* .eclipse.emf.compare.scope.IComparisonScope, org.eclipse.emf.compare.Comparison)
*/
diff --git a/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/groups/impl/ThreeWayComparisonGroupProvider.java b/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/groups/impl/ThreeWayComparisonGroupProvider.java
index 8f106dda7..efb1e7f5d 100644
--- a/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/groups/impl/ThreeWayComparisonGroupProvider.java
+++ b/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/groups/impl/ThreeWayComparisonGroupProvider.java
@@ -61,12 +61,6 @@ import org.eclipse.emf.edit.tree.TreeNode;
*/
public class ThreeWayComparisonGroupProvider extends AbstractDifferenceGroupProvider {
- /** A human-readable label for this group provider. This will be displayed in the EMF Compare UI. */
- private String label;
-
- /** The initial activation state of the group provider. */
- private boolean activeByDefault;
-
/** The groups provided by this provider. */
private ImmutableList<IDifferenceGroup> differenceGroups;
@@ -102,42 +96,6 @@ public class ThreeWayComparisonGroupProvider extends AbstractDifferenceGroupProv
/**
* {@inheritDoc}
*
- * @see org.eclipse.emf.compare.rcp.ui.structuremergeviewer.groups.IDifferenceGroupProvider#getLabel()
- */
- public String getLabel() {
- return label;
- }
-
- /**
- * {@inheritDoc}
- *
- * @see org.eclipse.emf.compare.rcp.ui.structuremergeviewer.groups.IDifferenceGroupProvider#setLabel(java.lang.String)
- */
- public void setLabel(String label) {
- this.label = label;
- }
-
- /**
- * {@inheritDoc}
- *
- * @see org.eclipse.emf.compare.rcp.ui.structuremergeviewer.groups.IDifferenceGroupProvider#defaultSelected()
- */
- public boolean defaultSelected() {
- return activeByDefault;
- }
-
- /**
- * {@inheritDoc}
- *
- * @see org.eclipse.emf.compare.rcp.ui.structuremergeviewer.groups.IDifferenceGroupProvider#setDefaultSelected(boolean)
- */
- public void setDefaultSelected(boolean active) {
- this.activeByDefault = active;
- }
-
- /**
- * {@inheritDoc}
- *
* @see org.eclipse.emf.compare.rcp.ui.structuremergeviewer.groups.IDifferenceGroupProvider#isEnabled(org
* .eclipse.emf.compare.scope.IComparisonScope, org.eclipse.emf.compare.Comparison)
*/
diff --git a/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/structuremergeviewer/groups/IDifferenceGroupProvider.java b/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/structuremergeviewer/groups/IDifferenceGroupProvider.java
index 019b2f3dd..1c9ccf429 100644
--- a/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/structuremergeviewer/groups/IDifferenceGroupProvider.java
+++ b/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/structuremergeviewer/groups/IDifferenceGroupProvider.java
@@ -41,37 +41,6 @@ public interface IDifferenceGroupProvider extends Adapter {
Collection<? extends IDifferenceGroup> getGroups(Comparison comparison);
/**
- * A human-readable label for this group. This will be displayed in the EMF Compare UI.
- *
- * @return The label for this group.
- */
- String getLabel();
-
- /**
- * Set the label for this group. This will be displayed in the EMF Compare UI.
- *
- * @param label
- * A human-readable label for this group.
- */
- void setLabel(String label);
-
- /**
- * Returns the initial activation state that the group should have.
- *
- * @return The initial activation state that the group should have.
- */
- boolean defaultSelected();
-
- /**
- * Set the initial activation state that the group should have.
- *
- * @param defaultSelected
- * The initial activation state that the group should have (true if the group should be active
- * by default).
- */
- void setDefaultSelected(boolean defaultSelected);
-
- /**
* Returns the activation condition based on the scope and comparison objects.
*
* @param scope
@@ -109,15 +78,43 @@ public interface IDifferenceGroupProvider extends Adapter {
/**
* Creates a group provider.
*
- * @return the newly created group provider.
+ * @return the newly created group provider or null if error.
*/
IDifferenceGroupProvider createGroupProvider();
/**
+ * A human-readable label for this group. This will be displayed in the EMF Compare UI.
+ *
+ * @return The label for this group.
+ */
+ public String getLabel();
+
+ /**
+ * A human-readable description for this group. This will be displayed in EMF Compare UI.
+ *
+ * @return
+ */
+ public String getDescription();
+
+ /**
+ * Rank of this group. The highest rank enabled {@link IDifferenceGroupProvider} will be used as
+ * default group provider.
+ *
+ * @return the rank.
+ */
+ public int getRank();
+
+ /**
+ * Return the type of Comparison this group provider can handle.
+ *
+ * @return {@link ComparisonType}
+ */
+ public ComparisonType getType();
+
+ /**
* A registry of {@link IDifferenceGroupProvider}.
*/
interface Registry {
-
/**
* Returns the list of {@link IDifferenceGroupProvider} contained in the registry.
*
@@ -127,7 +124,7 @@ public interface IDifferenceGroupProvider extends Adapter {
* The comparison which is to be displayed in the structural view.
* @return The list of {@link IDifferenceGroupProvider} contained in the registry.
*/
- Collection<IDifferenceGroupProvider> getGroupProviders(IComparisonScope scope,
+ Collection<IDifferenceGroupProvider.Descriptor> getGroupProviders(IComparisonScope scope,
Comparison comparison);
/**
@@ -137,9 +134,10 @@ public interface IDifferenceGroupProvider extends Adapter {
* The scope on which the group providers will be applied.
* @param comparison
* The comparison which is to be displayed in the structural view.
- * @return the default group provider.
+ * @return the default group provider or null if none.
*/
- IDifferenceGroupProvider getDefaultGroupProvider(IComparisonScope scope, Comparison comparison);
+ IDifferenceGroupProvider.Descriptor getDefaultGroupProvider(IComparisonScope scope,
+ Comparison comparison);
/**
* Add to the registry the given {@link IDifferenceGroupProvider}.
@@ -171,4 +169,18 @@ public interface IDifferenceGroupProvider extends Adapter {
void clear();
}
}
+
+ /**
+ * Type of comparison a {@link IDifferenceGroupProvider} can handle.
+ *
+ * @author <a href="mailto:arthur.daussy@obeo.fr">Arthur Daussy</a>
+ */
+ public static enum ComparisonType {
+ /** Only three way comparison. */
+ THREE_WAY, //
+ /** Only two way comparison. */
+ TWO_WAY, // Two way comparison
+ /** Can handle both comparison type. */
+ BOTH
+ }
}
diff --git a/plugins/org.eclipse.emf.compare.rcp/src/org/eclipse/emf/compare/rcp/internal/extension/impl/AbstractItemDescriptor.java b/plugins/org.eclipse.emf.compare.rcp/src/org/eclipse/emf/compare/rcp/internal/extension/impl/AbstractItemDescriptor.java
index 03a226137..013537e65 100644
--- a/plugins/org.eclipse.emf.compare.rcp/src/org/eclipse/emf/compare/rcp/internal/extension/impl/AbstractItemDescriptor.java
+++ b/plugins/org.eclipse.emf.compare.rcp/src/org/eclipse/emf/compare/rcp/internal/extension/impl/AbstractItemDescriptor.java
@@ -128,4 +128,9 @@ public abstract class AbstractItemDescriptor<T> implements IItemDescriptor<T> {
};
}
+ @Override
+ public String toString() {
+ return "StaticItemDescriptor [Label=" + getLabel() + ", Description=" + getDescription() + ", rank=" //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$
+ + getRank() + ", id=" + getID() + "]"; //$NON-NLS-1$ //$NON-NLS-2$
+ }
}
diff --git a/plugins/org.eclipse.emf.compare.rcp/src/org/eclipse/emf/compare/rcp/internal/extension/impl/ItemUtil.java b/plugins/org.eclipse.emf.compare.rcp/src/org/eclipse/emf/compare/rcp/internal/extension/impl/ItemUtil.java
index 63c7493d8..2497c746d 100644
--- a/plugins/org.eclipse.emf.compare.rcp/src/org/eclipse/emf/compare/rcp/internal/extension/impl/ItemUtil.java
+++ b/plugins/org.eclipse.emf.compare.rcp/src/org/eclipse/emf/compare/rcp/internal/extension/impl/ItemUtil.java
@@ -10,9 +10,12 @@
*******************************************************************************/
package org.eclipse.emf.compare.rcp.internal.extension.impl;
+import com.google.common.collect.Iterables;
import com.google.common.collect.Sets;
+import com.google.common.collect.Sets.SetView;
import java.util.ArrayList;
+import java.util.HashSet;
import java.util.List;
import java.util.Set;
@@ -121,13 +124,13 @@ public final class ItemUtil {
* @param preferenceKey
* Key for this {@link IItemDescriptor} in preferences
* @param itemPreferences
- * {@link IEclipsePreferences} where are stored {@link IItemDescriptor} values
+ * {@link Preferences} where are stored {@link IItemDescriptor} values
* @param <T>
* Type of {@link IItemDescriptor}
* @return List of {@link IItemDescriptor} or null if nothing in preferences
*/
public static <T> List<IItemDescriptor<T>> getItemsDescriptor(IItemRegistry<T> registry,
- String preferenceKey, IEclipsePreferences itemPreferences) {
+ String preferenceKey, Preferences itemPreferences) {
String diffEngineKey = itemPreferences.get(preferenceKey, null);
List<IItemDescriptor<T>> result = null;
if (diffEngineKey != null) {
@@ -188,4 +191,49 @@ public final class ItemUtil {
return activeFactory;
}
+
+ /**
+ * Return an ordered list of {@link IItemDescriptor}. The order in the list is either define by the rank
+ * in the registry or from preference is the rank has been overloaded. If any descriptor has been added or
+ * removed from last modification in the preference. This method will merge the modification.
+ *
+ * @param orderedDefaultDescriptor
+ * List of ordered default {@link IItemDescriptor}.
+ * @param descriptorRegistry
+ * Registry of descriptor.
+ * @param orderedItemPreferenceKey
+ * Key in preferences where are stored the new order of descriptor
+ * @param preferences
+ * holding user preferences.
+ * @return Ordered list of descriptor.
+ * @param <T>
+ * Descriptor type.
+ */
+ public static <T> List<IItemDescriptor<T>> getOrderedItems(
+ List<IItemDescriptor<T>> orderedDefaultDescriptor, IItemRegistry<T> descriptorRegistry,
+ String orderedItemPreferenceKey, Preferences preferences) {
+ List<IItemDescriptor<T>> itemsDescriptor = ItemUtil.getItemsDescriptor(descriptorRegistry,
+ orderedItemPreferenceKey, preferences);
+
+ if (itemsDescriptor == null) {
+ itemsDescriptor = orderedDefaultDescriptor;
+ } else {
+ HashSet<IItemDescriptor<T>> descriptorFromPrefSet = Sets.newLinkedHashSet(itemsDescriptor);
+ HashSet<IItemDescriptor<T>> defaultDescriptorSet = Sets
+ .newLinkedHashSet(orderedDefaultDescriptor);
+
+ // Remove descriptor
+ SetView<IItemDescriptor<T>> descriptorToRemove = Sets.difference(descriptorFromPrefSet,
+ defaultDescriptorSet);
+ Iterables.removeAll(itemsDescriptor, descriptorToRemove);
+
+ // Add new descriptor
+ SetView<IItemDescriptor<T>> descriptorToAdd = Sets.difference(defaultDescriptorSet,
+ descriptorFromPrefSet);
+ Iterables.addAll(itemsDescriptor, descriptorToAdd);
+
+ }
+ return itemsDescriptor;
+ }
+
}
diff --git a/plugins/org.eclipse.emf.compare.rcp/src/org/eclipse/emf/compare/rcp/internal/preferences/EMFComparePreferences.java b/plugins/org.eclipse.emf.compare.rcp/src/org/eclipse/emf/compare/rcp/internal/preferences/EMFComparePreferences.java
index b3a82e1ef..49ad5463d 100644
--- a/plugins/org.eclipse.emf.compare.rcp/src/org/eclipse/emf/compare/rcp/internal/preferences/EMFComparePreferences.java
+++ b/plugins/org.eclipse.emf.compare.rcp/src/org/eclipse/emf/compare/rcp/internal/preferences/EMFComparePreferences.java
@@ -35,6 +35,12 @@ public final class EMFComparePreferences {
/** Disabled post processors preference. */
public static final String DISABLED_POST_PROCESSOR = "org.eclipse.emf.compare.preference.postprocessor.disabled"; //$NON-NLS-1$
+ /** Ordered list of groups for two way comparison. */
+ public static final String TWO_WAY_GROUP_RANKING = "org.eclipse.emf.compare.preference.groups.2way"; //$NON-NLS-1$
+
+ /** Ordered list of groups for three way comparison. */
+ public static final String THREE_WAY_GROUP_RANKING = "org.eclipse.emf.compare.preference.groups.3way"; //$NON-NLS-1$
+
/**
* Private constructor. Not to be called.
*/
@@ -42,4 +48,19 @@ public final class EMFComparePreferences {
// Hide default constructor.
}
+ /**
+ * Value of {@link EMFComparePreferences#THREE_WAY_COMPARISON_AUTOMATIC_BEHAVIOR} and
+ * {@link EMFComparePreferences#TWO_WAY_COMPARISON_AUTOMATIC_BEHAVIOR}.
+ *
+ * @author <a href="mailto:arthur.daussy@obeo.fr">Arthur Daussy</a>
+ */
+ public static enum GroupAutomaticBehavior {
+ /** Never synchronize current selected group with preferences. */
+ NEVER,
+ /** Always synchronize current selected group with preferences. */
+ ALWAYS,
+ /** Ask each time the user if he want to synchronize. */
+ ASK_EACH_TIME
+ }
+
}

Back to the top