Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/CompareInputAdapter.java')
-rw-r--r--plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/CompareInputAdapter.java266
1 files changed, 266 insertions, 0 deletions
diff --git a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/CompareInputAdapter.java b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/CompareInputAdapter.java
new file mode 100644
index 000000000..6f995bdb2
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/CompareInputAdapter.java
@@ -0,0 +1,266 @@
+/*******************************************************************************
+ * 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.ide.ui.internal.structuremergeviewer;
+
+import org.eclipse.compare.ITypedElement;
+import org.eclipse.compare.structuremergeviewer.Differencer;
+import org.eclipse.compare.structuremergeviewer.ICompareInput;
+import org.eclipse.compare.structuremergeviewer.ICompareInputChangeListener;
+import org.eclipse.core.runtime.ListenerList;
+import org.eclipse.core.runtime.SafeRunner;
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notifier;
+import org.eclipse.emf.common.notify.impl.AdapterImpl;
+import org.eclipse.emf.compare.Conflict;
+import org.eclipse.emf.compare.Diff;
+import org.eclipse.emf.compare.Match;
+import org.eclipse.emf.compare.MatchResource;
+import org.eclipse.emf.compare.ide.ui.internal.contentmergeviewer.accessor.AccessorAdapter;
+import org.eclipse.emf.compare.provider.AdapterFactoryUtil;
+import org.eclipse.emf.compare.rcp.ui.EMFCompareRCPUIPlugin;
+import org.eclipse.emf.compare.rcp.ui.internal.contentmergeviewer.accessor.factory.IAccessorFactory;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.edit.tree.TreeNode;
+import org.eclipse.emf.edit.ui.provider.ExtendedImageRegistry;
+import org.eclipse.jface.util.SafeRunnable;
+import org.eclipse.swt.graphics.Image;
+
+/**
+ * @author <a href="mailto:mikael.barbero@obeo.fr">Mikael Barbero</a>
+ */
+public abstract class CompareInputAdapter extends AdapterImpl implements ICompareInput {
+
+ /**
+ * Store the listeners for notifications.
+ */
+ private final ListenerList fListener;
+
+ /**
+ * The {@link AdapterFactory} used to implement {@link #getName()} and {@link #getImage()}.
+ */
+ private final AdapterFactory fAdapterFactory;
+
+ /**
+ * Simple constructor storing the given {@link AdapterFactory}.
+ *
+ * @param adapterFactory
+ * the factory.
+ */
+ public CompareInputAdapter(AdapterFactory adapterFactory) {
+ fAdapterFactory = adapterFactory;
+ fListener = new ListenerList();
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.emf.common.notify.impl.AdapterImpl#isAdapterForType(java.lang.Object)
+ */
+ @Override
+ public boolean isAdapterForType(Object type) {
+ return type == fAdapterFactory;
+ }
+
+ /**
+ * Final accessor to the {@link AdapterFactory} for sub classses.
+ *
+ * @return the wrapped {@link AdapterFactory}.
+ */
+ protected final AdapterFactory getAdapterFactory() {
+ return fAdapterFactory;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.compare.structuremergeviewer.ICompareInput#addCompareInputChangeListener(org.eclipse.compare.structuremergeviewer.ICompareInputChangeListener)
+ */
+ public void addCompareInputChangeListener(ICompareInputChangeListener listener) {
+ fListener.add(listener);
+ }
+
+ /**
+ * {@inheritDoc}.
+ *
+ * @see org.eclipse.compare.structuremergeviewer.ICompareInput#removeCompareInputChangeListener(org.eclipse.compare.structuremergeviewer.ICompareInputChangeListener)
+ */
+ public void removeCompareInputChangeListener(ICompareInputChangeListener listener) {
+ fListener.remove(listener);
+ }
+
+ /**
+ * Sends out notification that a change has occurred on the <code>ICompareInput</code>.
+ */
+ protected void fireChange() {
+ if (fListener != null) {
+ final Object[] listeners = fListener.getListeners();
+ for (int i = 0; i < listeners.length; i++) {
+ final ICompareInputChangeListener listener = (ICompareInputChangeListener)listeners[i];
+ SafeRunnable runnable = new SafeRunnable() {
+ public void run() throws Exception {
+ listener.compareInputChanged(CompareInputAdapter.this);
+ }
+ };
+ SafeRunner.run(runnable);
+ }
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public EObject getComparisonObject() {
+ return ((TreeNode)getTarget()).getData();
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.compare.structuremergeviewer.ICompareInput#copy(boolean)
+ */
+ public void copy(boolean leftToRight) {
+
+ }
+
+ /**
+ * Returns the appropriate {@link IAccessorFactory} from the accessor factory registry.
+ *
+ * @return the appropriate {@link IAccessorFactory}.
+ */
+ protected IAccessorFactory getAccessorFactoryForTarget() {
+ IAccessorFactory.Registry factoryRegistry = EMFCompareRCPUIPlugin.getDefault()
+ .getAccessorFactoryRegistry();
+ return factoryRegistry.getHighestRankingFactory(getComparisonObject());
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.compare.ITypedElement#getImage()
+ */
+ public Image getImage() {
+ Object imageObject = AdapterFactoryUtil.getImage(getAdapterFactory(), getComparisonObject());
+ return ExtendedImageRegistry.getInstance().getImage(imageObject);
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.compare.structuremergeviewer.ICompareInput#getKind()
+ */
+ public int getKind() {
+ Notifier notifier = getComparisonObject();
+ boolean isThreeWay = false;
+ if (notifier instanceof Diff) {
+ isThreeWay = ((Diff)notifier).getMatch().getComparison().isThreeWay();
+ } else if (notifier instanceof Match) {
+ isThreeWay = ((Match)notifier).getComparison().isThreeWay();
+ } else if (notifier instanceof Conflict) {
+ isThreeWay = true;
+ } else if (notifier instanceof MatchResource) {
+ isThreeWay = ((MatchResource)notifier).getComparison().isThreeWay();
+ }
+ if (isThreeWay) {
+ return Differencer.CONFLICTING;
+ }
+ return Differencer.NO_CHANGE;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.compare.structuremergeviewer.ICompareInput#getName()
+ */
+ public String getName() {
+ return AdapterFactoryUtil.getText(getAdapterFactory(), getComparisonObject());
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.compare.structuremergeviewer.ICompareInput#getAncestor()
+ */
+ public ITypedElement getAncestor() {
+ final ITypedElement ret;
+ Notifier notifier = getComparisonObject();
+ boolean isThreeWay = false;
+ if (notifier instanceof Diff) {
+ isThreeWay = ((Diff)notifier).getMatch().getComparison().isThreeWay();
+ } else if (notifier instanceof Match) {
+ isThreeWay = ((Match)notifier).getComparison().isThreeWay();
+ } else if (notifier instanceof Conflict) {
+ isThreeWay = true;
+ } else if (notifier instanceof MatchResource) {
+ isThreeWay = ((MatchResource)notifier).getComparison().isThreeWay();
+ }
+ if (isThreeWay) {
+ IAccessorFactory accessorFactory = getAccessorFactoryForTarget();
+ if (accessorFactory != null) {
+ org.eclipse.emf.compare.rcp.ui.internal.contentmergeviewer.accessor.legacy.ITypedElement typedElement = accessorFactory
+ .createAncestor(getAdapterFactory(), getComparisonObject());
+ if (typedElement != null) {
+ ret = AccessorAdapter.adapt(typedElement);
+ } else {
+ ret = null;
+ }
+ } else {
+ ret = null;
+ }
+ } else {
+ ret = null;
+ }
+ return ret;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.compare.structuremergeviewer.ICompareInput#getLeft()
+ */
+ public ITypedElement getLeft() {
+ final ITypedElement ret;
+ IAccessorFactory accessorFactory = getAccessorFactoryForTarget();
+ if (accessorFactory != null) {
+ org.eclipse.emf.compare.rcp.ui.internal.contentmergeviewer.accessor.legacy.ITypedElement typedElement = accessorFactory
+ .createLeft(getAdapterFactory(), getComparisonObject());
+ if (typedElement != null) {
+ ret = AccessorAdapter.adapt(typedElement);
+ } else {
+ ret = null;
+ }
+ } else {
+ ret = null;
+ }
+ return ret;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.compare.structuremergeviewer.ICompareInput#getRight()
+ */
+ public ITypedElement getRight() {
+ final ITypedElement ret;
+ IAccessorFactory accessorFactory = getAccessorFactoryForTarget();
+ if (accessorFactory != null) {
+ org.eclipse.emf.compare.rcp.ui.internal.contentmergeviewer.accessor.legacy.ITypedElement typedElement = accessorFactory
+ .createRight(getAdapterFactory(), getComparisonObject());
+ if (typedElement != null) {
+ ret = AccessorAdapter.adapt(typedElement);
+ } else {
+ ret = null;
+ }
+ } else {
+ ret = null;
+ }
+ return ret;
+ }
+}

Back to the top