Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArthur Daussy2014-03-20 13:02:05 +0000
committerAxel Richard2014-03-31 16:53:00 +0000
commitb90eb542179909786520502d6586451fa88dc2a7 (patch)
treef2324f811f31ebf3b082abbb260d84ad381a2236
parent54e2b5480202ca3ba7018648f317064417871835 (diff)
downloadorg.eclipse.emf.compare-b90eb542179909786520502d6586451fa88dc2a7.tar.gz
org.eclipse.emf.compare-b90eb542179909786520502d6586451fa88dc2a7.tar.xz
org.eclipse.emf.compare-b90eb542179909786520502d6586451fa88dc2a7.zip
[430682] Preference page for Model Resolving mechanism
Create preference page for customization of the model resolving mechanism. Bug: 430682 Change-Id: I79b2ceca5f79af917201dbf5b8d3120e94e42992 Signed-off-by: Arthur Daussy <arthur.daussy@obeo.fr>
-rw-r--r--plugins/org.eclipse.emf.compare.ide.ui/plugin.properties2
-rw-r--r--plugins/org.eclipse.emf.compare.ide.ui/plugin.xml9
-rw-r--r--plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/EMFCompareIDEUIPlugin.java9
-rw-r--r--plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/ide_ui_messages.properties9
-rw-r--r--plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/logical/ModelResolverManager.java4
-rw-r--r--plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/logical/ModelResolverRegistryImpl.java2
-rw-r--r--plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/preferences/ModelResolutionPreferencePage.java266
7 files changed, 296 insertions, 5 deletions
diff --git a/plugins/org.eclipse.emf.compare.ide.ui/plugin.properties b/plugins/org.eclipse.emf.compare.ide.ui/plugin.properties
index bc1155304..94666fb46 100644
--- a/plugins/org.eclipse.emf.compare.ide.ui/plugin.properties
+++ b/plugins/org.eclipse.emf.compare.ide.ui/plugin.properties
@@ -24,4 +24,4 @@ compare.with.label = Compare With
resolver.logicalmodelresolver.label = Resolve descendants
resolver.logicalmodelresolver.description = Resolve all resources referenced by the current resource.
resolver.projectresolver.label = Resolve in project
-resolver.projectresolver.description = Resolve resources referenced by the current resource and all resources referencing to the current resource within its containing project. \ No newline at end of file
+resolver.projectresolver.description = Resolve resources referenced by the current resource and all resources referencing the current resource within its containing project.
diff --git a/plugins/org.eclipse.emf.compare.ide.ui/plugin.xml b/plugins/org.eclipse.emf.compare.ide.ui/plugin.xml
index 919590cf3..d9866e5db 100644
--- a/plugins/org.eclipse.emf.compare.ide.ui/plugin.xml
+++ b/plugins/org.eclipse.emf.compare.ide.ui/plugin.xml
@@ -252,4 +252,13 @@
ranking="1">
</resolver>
</extension>
+ <extension
+ point="org.eclipse.ui.preferencePages">
+ <page
+ category="org.eclipse.emf.compare.rcp.ui.preferencePage.global"
+ class="org.eclipse.emf.compare.ide.ui.internal.preferences.ModelResolutionPreferencePage"
+ id="org.eclipse.emf.compare.ide.ui.preferencepage.resolvers"
+ name="Resolution strategy">
+ </page>
+ </extension>
</plugin>
diff --git a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/EMFCompareIDEUIPlugin.java b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/EMFCompareIDEUIPlugin.java
index 5edc7b804..a134c1a27 100644
--- a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/EMFCompareIDEUIPlugin.java
+++ b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/EMFCompareIDEUIPlugin.java
@@ -207,4 +207,13 @@ public class EMFCompareIDEUIPlugin extends AbstractUIPlugin {
getLog().log(new Status(severity, PLUGIN_ID, message));
}
+ /**
+ * Return the model resolver manager.
+ *
+ * @return
+ */
+ public ModelResolverManager getModelResolverManager() {
+ return modelResolverManager;
+ }
+
}
diff --git a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/ide_ui_messages.properties b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/ide_ui_messages.properties
index 2478caf72..d0644276a 100644
--- a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/ide_ui_messages.properties
+++ b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/ide_ui_messages.properties
@@ -42,4 +42,11 @@ redo.menu.item.text = Merge
CompareSelfWithAncestor = Cannot run a comparison between an object and one of its ancestors.
wait.viewer.desc = Please wait for the comparison computation to finish...
-wait.viewer.title = Please wait... \ No newline at end of file
+wait.viewer.title = Please wait...
+
+ModelResolutionPreferencePage.forcedresolver.default.value.label = Default
+ModelResolutionPreferencePage.forcedresolver.default.value.description = Use default resolver.
+ModelResolutionPreferencePage.introduction.label = Choose the default model resolver for EMF Compare:
+ModelResolutionPreferencePage.description.label = Description
+ModelResolutionPreferencePage.enable.resolution.checkbox = Enable model resolution
+
diff --git a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/logical/ModelResolverManager.java b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/logical/ModelResolverManager.java
index 2b2b63e74..b5e14a6e3 100644
--- a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/logical/ModelResolverManager.java
+++ b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/logical/ModelResolverManager.java
@@ -139,7 +139,7 @@ public class ModelResolverManager {
*
* @return True if the resolving mechanism is disabled.
*/
- public boolean isResolvingEnable() {
+ public boolean isResolutionEnable() {
return Boolean.valueOf(preferenceStore.get(DISABLE_RESOLVING_PREF_KEY, Boolean.TRUE.toString()))
.booleanValue();
}
@@ -149,7 +149,7 @@ public class ModelResolverManager {
*
* @param isEnabled
*/
- public void setResolving(boolean isEnabled) {
+ public void setResolution(boolean isEnabled) {
if (isEnabled) {
preferenceStore.remove(DISABLE_RESOLVING_PREF_KEY);
} else {
diff --git a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/logical/ModelResolverRegistryImpl.java b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/logical/ModelResolverRegistryImpl.java
index 79038eb00..38187565b 100644
--- a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/logical/ModelResolverRegistryImpl.java
+++ b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/logical/ModelResolverRegistryImpl.java
@@ -46,7 +46,7 @@ public final class ModelResolverRegistryImpl implements IModelResolverRegistry {
* @see org.eclipse.emf.compare.ide.ui.internal.logical.IModelResolverRegistry#getBestResolverFor(org.eclipse.core.resources.IStorage)
*/
public IModelResolver getBestResolverFor(IStorage sourceStorage) {
- if (!resolverManager.isResolvingEnable()) {
+ if (!resolverManager.isResolutionEnable()) {
return noResolvingResolver;
}
ModelResolverDescriptor resolver = resolverManager.getUserSelectedResolver();
diff --git a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/preferences/ModelResolutionPreferencePage.java b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/preferences/ModelResolutionPreferencePage.java
new file mode 100644
index 000000000..d190f0cef
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/preferences/ModelResolutionPreferencePage.java
@@ -0,0 +1,266 @@
+/*******************************************************************************
+ * 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.ide.ui.internal.preferences;
+
+import com.google.common.collect.Lists;
+
+import java.util.ArrayList;
+import java.util.Collections;
+
+import org.eclipse.emf.compare.ide.ui.internal.EMFCompareIDEUIMessages;
+import org.eclipse.emf.compare.ide.ui.internal.EMFCompareIDEUIPlugin;
+import org.eclipse.emf.compare.ide.ui.internal.logical.ModelResolverDescriptor;
+import org.eclipse.emf.compare.ide.ui.internal.logical.ModelResolverManager;
+import org.eclipse.jface.preference.PreferencePage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPreferencePage;
+
+/**
+ * Preference page for "Model resolution" preference.
+ *
+ * @author <a href="mailto:arthur.daussy@obeo.fr">Arthur Daussy</a>
+ */
+public class ModelResolutionPreferencePage extends PreferencePage implements IWorkbenchPreferencePage {
+
+ /** Label for default value of "forced resolver" preference. */
+ private static final String DEFAULT_LABEL_VALUE = EMFCompareIDEUIMessages
+ .getString("ModelResolutionPreferencePage.forcedresolver.default.value.label"); //$NON-NLS-1$
+
+ /** Description for default value of "forced resolver" preference. */
+ private static final String DEFAULT_DESCRIPTION_VALUE = EMFCompareIDEUIMessages
+ .getString("ModelResolutionPreferencePage.forcedresolver.default.value.description"); //$NON-NLS-1$
+
+ /** Index for default value of "forced resolver" preference. */
+ private static final int DEFAULT_VALUE_INDEX = 0;
+
+ /** {@link ModelResolverManager} */
+ private final ModelResolverManager modelResolverManager = EMFCompareIDEUIPlugin.getDefault()
+ .getModelResolverManager();
+
+ /** User selected resolver. This should be null if the default strategy is chosen. */
+ private ModelResolverDescriptor userSelectedResolver;
+
+ /** Is set to true if the "Model resolution" should be enabled. */
+ private boolean isEnabled;
+
+ private Button enableModelResolutionButton;
+
+ /**
+ * List of element that need to be enabled or disabled depending on state of
+ * {@link ModelResolutionPreferencePage#isEnabled}
+ */
+ private ArrayList<Control> activableElements;
+
+ /** Forced resolver combo chooser. */
+ private Combo resolverCombo;
+
+ /** Label displaying the description of {@link ModelResolutionPreferencePage#userSelectedResolver} */
+ private Label descriptionLabel;
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ protected Control createContents(Composite parent) {
+ activableElements = Lists.newArrayList();
+ // Init data value
+ isEnabled = modelResolverManager.isResolutionEnable();
+ userSelectedResolver = modelResolverManager.getUserSelectedResolver();
+
+ Composite mainContainer = new Composite(parent, SWT.NONE);
+ mainContainer.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+ mainContainer.setLayout(new GridLayout(1, false));
+
+ createEnablementCheckBox(mainContainer);
+
+ Composite resolutionStrategyComposite = createModelResolverComposite(mainContainer);
+
+ createCombo(resolutionStrategyComposite);
+
+ createDescription(resolutionStrategyComposite);
+
+ updateDescription();
+ updateWidgetEnablement();
+
+ return mainContainer;
+ }
+
+ /**
+ * Create main composite for the preferences.
+ *
+ * @param mainContainer
+ * @return {@link Composite}
+ */
+ private Composite createModelResolverComposite(Composite mainContainer) {
+ Composite resolutionStrategyComposite = new Composite(mainContainer, SWT.BORDER);
+ GridLayout groupLayout = new GridLayout(2, false);
+ resolutionStrategyComposite.setLayout(groupLayout);
+ resolutionStrategyComposite.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false));
+
+ Label introductionLabel = new Label(resolutionStrategyComposite, SWT.NONE);
+ GridData introLabelData = new GridData(SWT.BEGINNING, SWT.CENTER, false, false);
+ introLabelData.horizontalSpan = 2;
+ introductionLabel.setLayoutData(introLabelData);
+ introductionLabel.setText(EMFCompareIDEUIMessages
+ .getString("ModelResolutionPreferencePage.introduction.label")); //$NON-NLS-1$
+ activableElements.add(introductionLabel);
+ return resolutionStrategyComposite;
+ }
+
+ /**
+ * Enable/Disable all widget from activableElements depending on the state of isEnabled.
+ */
+ private void updateWidgetEnablement() {
+ enableModelResolutionButton.setSelection(isEnabled);
+ for (Control controlToDisable : activableElements) {
+ if (!controlToDisable.isDisposed()) {
+ controlToDisable.setEnabled(isEnabled);
+ }
+ }
+ }
+
+ /**
+ * Update the description field using {@link ModelResolutionPreferencePage#userSelectedResolver} as input.
+ */
+ private void updateDescription() {
+ if (descriptionLabel != null && !descriptionLabel.isDisposed()) {
+ if (userSelectedResolver != null) {
+ descriptionLabel.setText(userSelectedResolver.getDescription());
+ } else {
+ descriptionLabel.setText(DEFAULT_DESCRIPTION_VALUE);
+ }
+ }
+ }
+
+ /**
+ * Create the description field.
+ *
+ * @param resolutionStrategyComposite
+ */
+ private void createDescription(Composite resolutionStrategyComposite) {
+ Group descriptionGroup = new Group(resolutionStrategyComposite, SWT.NONE);
+ descriptionGroup.setText(EMFCompareIDEUIMessages
+ .getString("ModelResolutionPreferencePage.description.label")); //$NON-NLS-1$
+ GridData groupLayoutData = new GridData(SWT.FILL, SWT.TOP, true, false);
+ descriptionGroup.setLayoutData(groupLayoutData);
+ GridLayout descriptionGroupLayout = new GridLayout(1, false);
+ activableElements.add(descriptionGroup);
+
+ descriptionGroup.setLayout(descriptionGroupLayout);
+ descriptionLabel = new Label(descriptionGroup, SWT.WRAP);
+ GridData descriptionLayoutData = new GridData(SWT.FILL, SWT.TOP, true, true);
+ descriptionLayoutData.minimumHeight = 50;
+ descriptionLayoutData.minimumWidth = 500;
+ descriptionLabel.setLayoutData(descriptionLayoutData);
+ activableElements.add(descriptionLabel);
+
+ }
+
+ /**
+ * Create the checkbox in charge of enabling/disabling the model resolution mechanism.
+ *
+ * @param resolutionStrategyComposite
+ */
+ private void createEnablementCheckBox(Composite resolutionStrategyComposite) {
+ enableModelResolutionButton = new Button(resolutionStrategyComposite, SWT.CHECK);
+ enableModelResolutionButton.setText(EMFCompareIDEUIMessages
+ .getString("ModelResolutionPreferencePage.enable.resolution.checkbox")); //$NON-NLS-1$
+ enableModelResolutionButton.setSelection(isEnabled);
+ GridData checkBoxGridData = new GridData(SWT.FILL, SWT.TOP, true, false);
+ enableModelResolutionButton.setLayoutData(checkBoxGridData);
+ enableModelResolutionButton.addSelectionListener(new SelectionAdapter() {
+
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ isEnabled = enableModelResolutionButton.getSelection();
+ updateWidgetEnablement();
+ }
+
+ });
+ }
+
+ /**
+ * Create the combo used to choose {@link ModelResolutionPreferencePage#userSelectedResolver}
+ *
+ * @param resolutionStrategyComposite
+ */
+ private void createCombo(Composite resolutionStrategyComposite) {
+ ArrayList<ModelResolverDescriptor> resolvers = Lists.newArrayList(modelResolverManager
+ .getAllResolver());
+ Collections.sort(resolvers);
+ String[] comboLabels = new String[resolvers.size() + 1];
+ final ModelResolverDescriptor[] comboValues = new ModelResolverDescriptor[resolvers.size() + 1];
+
+ int forcedResolverInitialValueIndex = 0;
+
+ comboLabels[DEFAULT_VALUE_INDEX] = DEFAULT_LABEL_VALUE;
+ comboValues[DEFAULT_VALUE_INDEX] = null;
+
+ for (int index = 1; index <= resolvers.size(); index++) {
+ ModelResolverDescriptor modelResolverDescriptor = resolvers.get(index - 1);
+ comboLabels[index] = modelResolverDescriptor.getLabel();
+ comboValues[index] = modelResolverDescriptor;
+ if (userSelectedResolver == modelResolverDescriptor) {
+ forcedResolverInitialValueIndex = index;
+ }
+ }
+ resolverCombo = new Combo(resolutionStrategyComposite, SWT.DROP_DOWN);
+ resolverCombo.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false));
+ resolverCombo.setItems(comboLabels);
+ resolverCombo.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+
+ int selectionIndex = resolverCombo.getSelectionIndex();
+ if (DEFAULT_VALUE_INDEX == selectionIndex) {
+ userSelectedResolver = null;
+ } else {
+ String currentValue = comboValues[selectionIndex].getId();
+ userSelectedResolver = modelResolverManager.getDescriptor(currentValue);
+ }
+ updateDescription();
+ }
+ });
+ resolverCombo.select(forcedResolverInitialValueIndex);
+ activableElements.add(resolverCombo);
+ }
+
+ @Override
+ public boolean performOk() {
+ modelResolverManager.setForcedResolver(userSelectedResolver);
+ modelResolverManager.setResolution(isEnabled);
+ return super.performOk();
+ }
+
+ @Override
+ protected void performDefaults() {
+ userSelectedResolver = null;
+ resolverCombo.select(DEFAULT_VALUE_INDEX);
+ isEnabled = true;
+ updateDescription();
+ updateWidgetEnablement();
+ super.performDefaults();
+ }
+
+ public void init(IWorkbench workbench) {
+ }
+}

Back to the top