Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/org.eclipse.emf.compare.rcp.ui')
-rw-r--r--plugins/org.eclipse.emf.compare.rcp.ui/icons/full/toolb16/accept_change.gifbin0 -> 76 bytes
-rw-r--r--plugins/org.eclipse.emf.compare.rcp.ui/icons/full/toolb16/reject_change.gifbin0 -> 73 bytes
-rw-r--r--plugins/org.eclipse.emf.compare.rcp.ui/plugin.properties10
-rw-r--r--plugins/org.eclipse.emf.compare.rcp.ui/plugin.xml63
-rw-r--r--plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/handler/AcceptChange.java35
-rw-r--r--plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/handler/AcceptRejectChange.java164
-rw-r--r--plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/handler/AcceptRejectChangePropertyTester.java26
-rw-r--r--plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/handler/RejectChange.java35
8 files changed, 332 insertions, 1 deletions
diff --git a/plugins/org.eclipse.emf.compare.rcp.ui/icons/full/toolb16/accept_change.gif b/plugins/org.eclipse.emf.compare.rcp.ui/icons/full/toolb16/accept_change.gif
new file mode 100644
index 000000000..23c97f09e
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.rcp.ui/icons/full/toolb16/accept_change.gif
Binary files differ
diff --git a/plugins/org.eclipse.emf.compare.rcp.ui/icons/full/toolb16/reject_change.gif b/plugins/org.eclipse.emf.compare.rcp.ui/icons/full/toolb16/reject_change.gif
new file mode 100644
index 000000000..1aca259db
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.rcp.ui/icons/full/toolb16/reject_change.gif
Binary files differ
diff --git a/plugins/org.eclipse.emf.compare.rcp.ui/plugin.properties b/plugins/org.eclipse.emf.compare.rcp.ui/plugin.properties
index f29dc9cca..8dbc9d9dc 100644
--- a/plugins/org.eclipse.emf.compare.rcp.ui/plugin.properties
+++ b/plugins/org.eclipse.emf.compare.rcp.ui/plugin.properties
@@ -13,4 +13,12 @@ providerName = Eclipse Modeling Project
save.model.label = Save Comparison Model
save.model.tooltip = Save Comparison Model
-save.model.command.name = EMF Compare Save Comparison Model \ No newline at end of file
+save.model.command.name = EMF Compare Save Comparison Model
+
+accept.change = Accept Change
+accept.change.tooltip = Accept Change
+accept.change.command.name = EMF Compare Accept Change
+
+reject.change = Reject Change
+reject.change.tooltip = Reject Change
+reject.change.command.name = EMF Compare Reject Change \ No newline at end of file
diff --git a/plugins/org.eclipse.emf.compare.rcp.ui/plugin.xml b/plugins/org.eclipse.emf.compare.rcp.ui/plugin.xml
index 015ea8072..f56288a62 100644
--- a/plugins/org.eclipse.emf.compare.rcp.ui/plugin.xml
+++ b/plugins/org.eclipse.emf.compare.rcp.ui/plugin.xml
@@ -89,6 +89,30 @@
allPopups="false"
locationURI="toolbar:org.eclipse.emf.compare.structuremergeviewer.toolbar">
<command
+ commandId="org.eclipse.emf.compare.rcp.ui.acceptChange"
+ icon="icons/full/toolb16/accept_change.gif"
+ label="%accept.change"
+ style="push"
+ tooltip="%accept.change.tooltip">
+ <visibleWhen
+ checkEnabled="true">
+ </visibleWhen>
+ </command>
+ <command
+ commandId="org.eclipse.emf.compare.rcp.ui.rejectChange"
+ icon="icons/full/toolb16/reject_change.gif"
+ label="%reject.change"
+ style="push"
+ tooltip="%reject.change.tooltip">
+ <visibleWhen
+ checkEnabled="true">
+ </visibleWhen>
+ </command>
+ <separator
+ name="org.eclipse.emf.compare.rcp.ui.separatorSaveModel"
+ visible="true">
+ </separator>
+ <command
commandId="org.eclipse.emf.compare.rcp.ui.saveComparisonModel"
icon="icons/full/toolb16/saveas_edit.gif"
label="%save.model.name"
@@ -100,6 +124,14 @@
<extension
point="org.eclipse.ui.commands">
<command
+ id="org.eclipse.emf.compare.rcp.ui.acceptChange"
+ name="%accept.change.command.name">
+ </command>
+ <command
+ id="org.eclipse.emf.compare.rcp.ui.rejectChange"
+ name="%reject.change.command.name">
+ </command>
+ <command
id="org.eclipse.emf.compare.rcp.ui.saveComparisonModel"
name="%save.model.command.name">
</command>
@@ -107,6 +139,30 @@
<extension
point="org.eclipse.ui.handlers">
<handler
+ class="org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.handler.AcceptChange"
+ commandId="org.eclipse.emf.compare.rcp.ui.acceptChange">
+ <activeWhen>
+ <with
+ variable="activeEditor">
+ <test
+ property="emfcompare.hasReadOnlySide">
+ </test>
+ </with>
+ </activeWhen>
+ </handler>
+ <handler
+ class="org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.handler.RejectChange"
+ commandId="org.eclipse.emf.compare.rcp.ui.rejectChange">
+ <activeWhen>
+ <with
+ variable="activeEditor">
+ <test
+ property="emfcompare.hasReadOnlySide">
+ </test>
+ </with>
+ </activeWhen>
+ </handler>
+ <handler
class="org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.handler.SaveComparisonModel"
commandId="org.eclipse.emf.compare.rcp.ui.saveComparisonModel">
<enabledWhen>
@@ -129,5 +185,12 @@
properties="isSaveable"
type="java.lang.Object">
</propertyTester>
+ <propertyTester
+ class="org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.handler.AcceptRejectChangePropertyTester"
+ id="org.eclipse.emf.compare.rcp.ui.hasReadOnlySide"
+ namespace="emfcompare"
+ properties="hasReadOnlySide"
+ type="java.lang.Object">
+ </propertyTester>
</extension>
</plugin>
diff --git a/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/handler/AcceptChange.java b/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/handler/AcceptChange.java
new file mode 100644
index 000000000..ea87eaa89
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/handler/AcceptChange.java
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright (c) 2013 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.handler;
+
+import static org.eclipse.emf.compare.utils.EMFComparePredicates.fromSide;
+
+import org.eclipse.emf.compare.Diff;
+import org.eclipse.emf.compare.DifferenceSource;
+
+/**
+ * Handler that manages a merge of a difference in case of one side of the comparison is in read-only mode.
+ *
+ * @author <a href="mailto:axel.richard@obeo.fr">Axel Richard</a>
+ * @since 3.0
+ */
+public class AcceptChange extends AcceptRejectChange {
+
+ @Override
+ protected boolean isCopyDiffCase(Diff diff, boolean leftToRight) {
+ if (leftToRight) {
+ return fromSide(DifferenceSource.LEFT).apply(diff);
+ } else {
+ return fromSide(DifferenceSource.RIGHT).apply(diff);
+ }
+ }
+
+}
diff --git a/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/handler/AcceptRejectChange.java b/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/handler/AcceptRejectChange.java
new file mode 100644
index 000000000..cea793d0b
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/handler/AcceptRejectChange.java
@@ -0,0 +1,164 @@
+package org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.handler;
+
+import static com.google.common.collect.Iterables.addAll;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.compare.CompareConfiguration;
+import org.eclipse.compare.CompareEditorInput;
+import org.eclipse.compare.CompareNavigator;
+import org.eclipse.compare.ICompareNavigator;
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.emf.common.command.Command;
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notifier;
+import org.eclipse.emf.compare.Diff;
+import org.eclipse.emf.compare.DifferenceState;
+import org.eclipse.emf.compare.command.ICompareCopyCommand;
+import org.eclipse.emf.compare.domain.ICompareEditingDomain;
+import org.eclipse.emf.compare.internal.merge.IMergeData;
+import org.eclipse.emf.compare.internal.merge.MergeDataAdapter;
+import org.eclipse.emf.compare.rcp.EMFCompareRCPPlugin;
+import org.eclipse.emf.compare.rcp.ui.internal.EMFCompareConstants;
+import org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.filters.IDifferenceFilter;
+import org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.filters.impl.CascadingDifferencesFilter;
+import org.eclipse.emf.compare.utils.DiffUtil;
+import org.eclipse.emf.ecore.change.util.ChangeRecorder;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.emf.edit.command.ChangeCommand;
+import org.eclipse.ui.ISources;
+import org.eclipse.ui.handlers.HandlerUtil;
+
+public abstract class AcceptRejectChange extends AbstractHandler {
+
+ /** The compare configuration object used to get the compare model. */
+ private CompareConfiguration configuration;
+
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+ Object editorInput = HandlerUtil.getVariable(event, ISources.ACTIVE_EDITOR_INPUT_NAME);
+ if (editorInput instanceof CompareEditorInput) {
+ configuration = ((CompareEditorInput)editorInput).getCompareConfiguration();
+ Object diffNode = ((CompareEditorInput)editorInput).getSelectedEdition();
+ if (diffNode instanceof Adapter) {
+ Notifier diff = ((Adapter)diffNode).getTarget();
+ if (diff instanceof Diff) {
+ boolean leftReadOnly = !configuration.isLeftEditable() && configuration.isRightEditable();
+ boolean rightReadOnly = configuration.isLeftEditable()
+ && !configuration.isRightEditable();
+ if (rightReadOnly) {
+ if (isCopyDiffCase((Diff)diff, leftReadOnly)) {
+ copyDiff((Diff)diff, leftReadOnly);
+ } else {
+ changeState((Diff)diff, rightReadOnly);
+ }
+ // Select next diff
+ navigate(true);
+ }
+ }
+ }
+ }
+ return null;
+ }
+
+ protected abstract boolean isCopyDiffCase(Diff diff, boolean leftToRight);
+
+ private void changeState(Diff diffToChangeState, boolean leftToRight) {
+ if (diffToChangeState != null) {
+ ICompareEditingDomain compareEditingDomain = (ICompareEditingDomain)configuration
+ .getProperty(EMFCompareConstants.EDITING_DOMAIN);
+ Command changeStateCommand = new AcceptRejectChangeCommand(compareEditingDomain
+ .getChangeRecorder(), diffToChangeState, leftToRight);
+ compareEditingDomain.getCommandStack().execute(changeStateCommand);
+ }
+ }
+
+ private void copyDiff(Diff diffToCopy, boolean leftToRight) {
+ if (diffToCopy != null) {
+ List<Diff> diffsToCopy = new ArrayList<Diff>();
+ diffsToCopy.add(diffToCopy);
+ if (isSubDiffFilterActive()) {
+ addAll(diffsToCopy, DiffUtil.getSubDiffs(leftToRight).apply(diffToCopy));
+ }
+ ICompareEditingDomain editingDomain = (ICompareEditingDomain)configuration
+ .getProperty(EMFCompareConstants.EDITING_DOMAIN);
+ Command copyCommand = editingDomain.createCopyCommand(diffsToCopy, leftToRight,
+ EMFCompareRCPPlugin.getDefault().getMergerRegistry());
+
+ editingDomain.getCommandStack().execute(copyCommand);
+ // refresh();
+ }
+ }
+
+ protected boolean isSubDiffFilterActive() {
+ Object property = configuration.getProperty(EMFCompareConstants.SELECTED_FILTERS);
+ final Collection<IDifferenceFilter> selectedFilters;
+ if (property == null) {
+ return false;
+ } else {
+ selectedFilters = (Collection<IDifferenceFilter>)property;
+ for (IDifferenceFilter iDifferenceFilter : selectedFilters) {
+ if (iDifferenceFilter instanceof CascadingDifferencesFilter) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Called by the framework to navigate to the next (or previous) difference. This will open the content
+ * viewer for the next (or previous) diff displayed in the structure viewer.
+ *
+ * @param next
+ * <code>true</code> if we are to open the next structure viewer's diff, <code>false</code> if
+ * we should go to the previous instead.
+ */
+ protected void navigate(boolean next) {
+ // final Control control = getControl();
+ // if (control != null && !control.isDisposed()) {
+ final ICompareNavigator navigator = configuration.getContainer().getNavigator();
+ if (navigator instanceof CompareNavigator && ((CompareNavigator)navigator).hasChange(next)) {
+ navigator.selectChange(next);
+ }
+ // }
+ }
+
+ public class AcceptRejectChangeCommand extends ChangeCommand implements ICompareCopyCommand {
+
+ private Diff difference;
+
+ private boolean leftToRight;
+
+ public AcceptRejectChangeCommand(ChangeRecorder changeRecorder, Diff difference, boolean leftToRight) {
+ super(changeRecorder, difference);
+ this.difference = difference;
+ this.leftToRight = leftToRight;
+ }
+
+ @Override
+ public void doExecute() {
+ Adapter adapter = EcoreUtil.getExistingAdapter(difference, IMergeData.class);
+ if (adapter != null) {
+ if (leftToRight) {
+ ((IMergeData)adapter).setMergedToRight();
+ } else {
+ ((IMergeData)adapter).setMergedToLeft();
+ }
+ } else {
+ difference.eAdapters().add(new MergeDataAdapter(leftToRight));
+ }
+ difference.setState(DifferenceState.MERGED);
+
+ }
+
+ public boolean isLeftToRight() {
+ return leftToRight;
+ }
+
+ }
+
+}
diff --git a/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/handler/AcceptRejectChangePropertyTester.java b/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/handler/AcceptRejectChangePropertyTester.java
new file mode 100644
index 000000000..ef704943f
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/handler/AcceptRejectChangePropertyTester.java
@@ -0,0 +1,26 @@
+package org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.handler;
+
+import org.eclipse.compare.CompareConfiguration;
+import org.eclipse.compare.CompareEditorInput;
+import org.eclipse.core.expressions.PropertyTester;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IEditorPart;
+
+public class AcceptRejectChangePropertyTester extends PropertyTester {
+
+ public boolean test(Object receiver, String property, Object[] args, Object expectedValue) {
+ if (receiver instanceof IEditorPart) {
+ IEditorInput i = ((IEditorPart)receiver).getEditorInput();
+ if (i instanceof CompareEditorInput) {
+ CompareConfiguration configuration = ((CompareEditorInput)i).getCompareConfiguration();
+ if (configuration.isLeftEditable() && !configuration.isRightEditable()) {
+ return true;
+ } else if (!configuration.isLeftEditable() && configuration.isRightEditable()) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+}
diff --git a/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/handler/RejectChange.java b/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/handler/RejectChange.java
new file mode 100644
index 000000000..0d0380f37
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/handler/RejectChange.java
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright (c) 2013 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.handler;
+
+import static org.eclipse.emf.compare.utils.EMFComparePredicates.fromSide;
+
+import org.eclipse.emf.compare.Diff;
+import org.eclipse.emf.compare.DifferenceSource;
+
+/**
+ * Handler that manages a reject of a difference in case of one side of the comparison is in read-only mode.
+ *
+ * @author <a href="mailto:axel.richard@obeo.fr">Axel Richard</a>
+ * @since 3.0
+ */
+public class RejectChange extends AcceptRejectChange {
+
+ @Override
+ protected boolean isCopyDiffCase(Diff diff, boolean leftToRight) {
+ if (leftToRight) {
+ return fromSide(DifferenceSource.RIGHT).apply(diff);
+ } else {
+ return fromSide(DifferenceSource.LEFT).apply(diff);
+ }
+ }
+
+}

Back to the top