Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPhilip Langer2017-11-22 11:15:10 +0000
committerLaurent Goubet2018-05-01 10:48:51 +0000
commit404852297a41653eaf830e5993b7dd8b0c7b3bda (patch)
tree184e163f0d35fbea1ed039d178c16feabe398219
parent3db650c128b5b9ff8d840b8f2a98fd679cecee39 (diff)
downloadorg.eclipse.emf.compare-404852297a41653eaf830e5993b7dd8b0c7b3bda.tar.gz
org.eclipse.emf.compare-404852297a41653eaf830e5993b7dd8b0c7b3bda.tar.xz
org.eclipse.emf.compare-404852297a41653eaf830e5993b7dd8b0c7b3bda.zip
[527567] DiagramCompareItemProviderAdapterFactory should be a decorator
It shouldn't just extend NotationItemProviderAdapterFactory but then not properly implement adapters for the whole model. Instead, it should be a decorator adapter factory and the specialized item providers should be decorators. Without this, we won't be able to show properties for the notation model model because many adapters will be missing or won't be using the property subclass that knows about all the properties. We also remove a couple of warnings in the changed classes. Bug: 527567 Change-Id: I121b09ebc2136d3b237387326f7cfc5cce342931 Signed-off-by: Philip Langer <planger@eclipsesource.com>
-rw-r--r--plugins/org.eclipse.emf.compare.diagram.edit/src/org/eclipse/emf/compare/diagram/internal/matchs/provider/spec/BaseItemProviderDecorator.java91
-rw-r--r--plugins/org.eclipse.emf.compare.diagram.edit/src/org/eclipse/emf/compare/diagram/internal/matchs/provider/spec/DiagramCompareItemProviderAdapterFactorySpec.java88
-rw-r--r--plugins/org.eclipse.emf.compare.diagram.edit/src/org/eclipse/emf/compare/diagram/internal/matchs/provider/spec/StyleItemProviderSpec.java14
-rw-r--r--plugins/org.eclipse.emf.compare.diagram.edit/src/org/eclipse/emf/compare/diagram/internal/matchs/provider/spec/ViewItemProviderSpec.java20
4 files changed, 128 insertions, 85 deletions
diff --git a/plugins/org.eclipse.emf.compare.diagram.edit/src/org/eclipse/emf/compare/diagram/internal/matchs/provider/spec/BaseItemProviderDecorator.java b/plugins/org.eclipse.emf.compare.diagram.edit/src/org/eclipse/emf/compare/diagram/internal/matchs/provider/spec/BaseItemProviderDecorator.java
new file mode 100644
index 000000000..78e43809a
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.diagram.edit/src/org/eclipse/emf/compare/diagram/internal/matchs/provider/spec/BaseItemProviderDecorator.java
@@ -0,0 +1,91 @@
+/*******************************************************************************
+ * Copyright (c) 2012, 2017 Obeo and others.
+ * 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
+ * Philip Langer - bug 527567
+ *******************************************************************************/
+package org.eclipse.emf.compare.diagram.internal.matchs.provider.spec;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notifier;
+import org.eclipse.emf.edit.EMFEditPlugin;
+import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.ComposedImage;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemProviderDecorator;
+
+/**
+ * This is the base item provider decorator.
+ *
+ * @author <a href="mailto:cedric.notot@obeo.fr">Cedric Notot</a>
+ */
+public class BaseItemProviderDecorator extends ItemProviderDecorator implements IEditingDomainItemProvider, ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource, Adapter {
+
+ /**
+ * This constructs an instance from a factory and a notifier.
+ *
+ * @param adapterFactory
+ * The adapter factory.
+ */
+ public BaseItemProviderDecorator(AdapterFactory adapterFactory) {
+ super(adapterFactory);
+ }
+
+ /**
+ * This adds an overlay to the given image if the object is controlled.
+ *
+ * @param object
+ * the object being adapted.
+ * @param image
+ * the base image.
+ * @return the overlayed image.
+ */
+ protected Object overlayImage(Object object, Object image) {
+ if (AdapterFactoryEditingDomain.isControlled(object)) {
+ List<Object> images = new ArrayList<Object>(2);
+ images.add(image);
+ images.add(EMFEditPlugin.INSTANCE.getImage("full/ovr16/ControlledObject")); //$NON-NLS-1$
+ return new ComposedImage(images);
+ }
+ return image;
+ }
+
+ /**
+ * Returns the root factory if this local adapter factory is composed, otherwise just the local one.
+ *
+ * @return the root factory if this local adapter factory is composed, otherwise just the local one.
+ */
+ protected AdapterFactory getRootAdapterFactory() {
+ if (adapterFactory instanceof ComposeableAdapterFactory) {
+ return ((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory();
+ }
+
+ return adapterFactory;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public Notifier getTarget() {
+ return null;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void setTarget(Notifier newTarget) {
+ }
+}
diff --git a/plugins/org.eclipse.emf.compare.diagram.edit/src/org/eclipse/emf/compare/diagram/internal/matchs/provider/spec/DiagramCompareItemProviderAdapterFactorySpec.java b/plugins/org.eclipse.emf.compare.diagram.edit/src/org/eclipse/emf/compare/diagram/internal/matchs/provider/spec/DiagramCompareItemProviderAdapterFactorySpec.java
index 84007df34..66abb3950 100644
--- a/plugins/org.eclipse.emf.compare.diagram.edit/src/org/eclipse/emf/compare/diagram/internal/matchs/provider/spec/DiagramCompareItemProviderAdapterFactorySpec.java
+++ b/plugins/org.eclipse.emf.compare.diagram.edit/src/org/eclipse/emf/compare/diagram/internal/matchs/provider/spec/DiagramCompareItemProviderAdapterFactorySpec.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2013 Obeo.
+ * Copyright (c) 2013, 2017 Obeo and others.
* 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
@@ -7,18 +7,18 @@
*
* Contributors:
* Obeo - initial API and implementation
+ * Philip Langer - bug 527567
*******************************************************************************/
package org.eclipse.emf.compare.diagram.internal.matchs.provider.spec;
-import org.eclipse.emf.common.notify.Adapter;
-import org.eclipse.emf.common.notify.Notifier;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.edit.provider.Disposable;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.DecoratorAdapterFactory;
+import org.eclipse.emf.edit.provider.IItemProviderDecorator;
import org.eclipse.gmf.runtime.notation.Diagram;
import org.eclipse.gmf.runtime.notation.Style;
import org.eclipse.gmf.runtime.notation.View;
import org.eclipse.gmf.runtime.notation.provider.NotationItemProviderAdapterFactory;
-import org.eclipse.gmf.runtime.notation.util.NotationSwitch;
/**
* This is the factory that is used to provide the interfaces needed to support Diagram compare merge viewer,
@@ -26,77 +26,31 @@ import org.eclipse.gmf.runtime.notation.util.NotationSwitch;
*
* @author <a href="mailto:cedric.notot@obeo.fr">Cedric Notot</a>
*/
-public class DiagramCompareItemProviderAdapterFactorySpec extends NotationItemProviderAdapterFactory {
-
- /**
- * This keeps track of all the item providers created, so that they can be {@link #dispose disposed}.
- */
- protected Disposable disposable = new Disposable();
-
- /** The Specific switch to create adapters for ALL views and diagrams. */
- // CHECKSTYLE:OFF
- protected NotationSwitch modelSwitchSpec = new NotationSwitch() {
- // CHECKSTYLE:ON
-
- @Override
- public Object caseView(View object) {
- return new ViewItemProviderSpec(DiagramCompareItemProviderAdapterFactorySpec.this);
- }
-
- @Override
- public Object caseDiagram(Diagram object) {
- return new DiagramItemProviderSpec(DiagramCompareItemProviderAdapterFactorySpec.this);
- }
-
- @Override
- public Object defaultCase(EObject object) {
- if (object instanceof Style) {
- return new StyleItemProviderSpec(DiagramCompareItemProviderAdapterFactorySpec.this);
- }
-
- // delegate to the default notational switch
- return modelSwitch.doSwitch(object);
- }
- };
+public class DiagramCompareItemProviderAdapterFactorySpec extends DecoratorAdapterFactory {
/**
* Constructor calling super {@link #CompareItemProviderAdapterFactory()}.
*/
public DiagramCompareItemProviderAdapterFactorySpec() {
- super();
+ super(new NotationItemProviderAdapterFactory());
}
- /**
- * {@inheritDoc}
- *
- * @see org.eclipse.gmf.runtime.notation.util.NotationAdapterFactory#createAdapter(org.eclipse.emf.common.notify.Notifier)
- */
@Override
- public Adapter createAdapter(Notifier target) {
- return (Adapter)modelSwitchSpec.doSwitch((EObject)target);
- }
-
- /**
- * {@inheritDoc}
- *
- * @see NotationItemProviderAdapterFactory#dispose()
- */
- @Override
- public void dispose() {
- disposable.dispose();
- super.dispose();
+ protected IItemProviderDecorator createItemProviderDecorator(Object target, Object Type) {
+ if (target instanceof Diagram) {
+ return new DiagramItemProviderSpec(this);
+ } else if (target instanceof View) {
+ return new ViewItemProviderSpec(this);
+ } else if (target instanceof Style) {
+ return new StyleItemProviderSpec(this);
+ } else {
+ return new BaseItemProviderDecorator(this);
+ }
}
- /**
- * {@inheritDoc}
- *
- * @see NotationItemProviderAdapterFactory#associate(Adapter adapter, Notifier target)
- */
@Override
- protected void associate(Adapter adapter, Notifier target) {
- super.associate(adapter, target);
- if (adapter != null) {
- disposable.add(adapter);
- }
+ public void setParentAdapterFactory(ComposedAdapterFactory parentAdapterFactory) {
+ super.setParentAdapterFactory(parentAdapterFactory);
+ ((ComposeableAdapterFactory)decoratedAdapterFactory).setParentAdapterFactory(parentAdapterFactory);
}
}
diff --git a/plugins/org.eclipse.emf.compare.diagram.edit/src/org/eclipse/emf/compare/diagram/internal/matchs/provider/spec/StyleItemProviderSpec.java b/plugins/org.eclipse.emf.compare.diagram.edit/src/org/eclipse/emf/compare/diagram/internal/matchs/provider/spec/StyleItemProviderSpec.java
index a1aff104c..ef52a1ed6 100644
--- a/plugins/org.eclipse.emf.compare.diagram.edit/src/org/eclipse/emf/compare/diagram/internal/matchs/provider/spec/StyleItemProviderSpec.java
+++ b/plugins/org.eclipse.emf.compare.diagram.edit/src/org/eclipse/emf/compare/diagram/internal/matchs/provider/spec/StyleItemProviderSpec.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2012, 2013 Obeo.
+ * Copyright (c) 2012, 2017 Obeo and others.
* 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
@@ -7,25 +7,20 @@
*
* Contributors:
* Obeo - initial API and implementation
+ * Philip Langer - bug 527567
*******************************************************************************/
package org.eclipse.emf.compare.diagram.internal.matchs.provider.spec;
import org.eclipse.emf.common.notify.AdapterFactory;
import org.eclipse.emf.compare.diagram.internal.extensions.provider.ExtensionsEditPlugin;
import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
-import org.eclipse.emf.edit.provider.IItemLabelProvider;
-import org.eclipse.emf.edit.provider.IItemPropertySource;
-import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
-import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
-import org.eclipse.emf.edit.provider.ItemProviderAdapter;
/**
* This is the specific item provider adapter for a {@link org.eclipse.gmf.runtime.notation.View} object.
*
* @author <a href="mailto:cedric.notot@obeo.fr">Cedric Notot</a>
*/
-public class StyleItemProviderSpec extends ItemProviderAdapter implements IEditingDomainItemProvider, IStructuredItemContentProvider, ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource {
+public class StyleItemProviderSpec extends BaseItemProviderDecorator {
/**
* This constructs an instance from a factory and a notifier.
@@ -54,7 +49,6 @@ public class StyleItemProviderSpec extends ItemProviderAdapter implements IEditi
*/
@Override
public Object getImage(Object object) {
- return overlayImage(object, ExtensionsEditPlugin.INSTANCE.getImage("full/obj16/Style"));
+ return overlayImage(object, ExtensionsEditPlugin.INSTANCE.getImage("full/obj16/Style")); //$NON-NLS-1$
}
-
}
diff --git a/plugins/org.eclipse.emf.compare.diagram.edit/src/org/eclipse/emf/compare/diagram/internal/matchs/provider/spec/ViewItemProviderSpec.java b/plugins/org.eclipse.emf.compare.diagram.edit/src/org/eclipse/emf/compare/diagram/internal/matchs/provider/spec/ViewItemProviderSpec.java
index 8d9f2958d..5f78f29d0 100644
--- a/plugins/org.eclipse.emf.compare.diagram.edit/src/org/eclipse/emf/compare/diagram/internal/matchs/provider/spec/ViewItemProviderSpec.java
+++ b/plugins/org.eclipse.emf.compare.diagram.edit/src/org/eclipse/emf/compare/diagram/internal/matchs/provider/spec/ViewItemProviderSpec.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2012, 2013 Obeo.
+ * Copyright (c) 2012, 2017 Obeo and others.
* 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
@@ -7,22 +7,25 @@
*
* Contributors:
* Obeo - initial API and implementation
+ * Philip Langer - bug 527567
*******************************************************************************/
package org.eclipse.emf.compare.diagram.internal.matchs.provider.spec;
import org.eclipse.emf.common.notify.AdapterFactory;
import org.eclipse.emf.compare.diagram.internal.extensions.provider.ExtensionsEditPlugin;
-import org.eclipse.emf.compare.provider.AdapterFactoryUtil;
import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.edit.provider.AdapterFactoryItemDelegator;
import org.eclipse.gmf.runtime.notation.View;
-import org.eclipse.gmf.runtime.notation.provider.ViewItemProvider;
/**
* This is the specific item provider adapter for a {@link org.eclipse.gmf.runtime.notation.View} object.
*
* @author <a href="mailto:cedric.notot@obeo.fr">Cedric Notot</a>
*/
-public class ViewItemProviderSpec extends ViewItemProvider {
+public class ViewItemProviderSpec extends BaseItemProviderDecorator {
+
+ /** The adapter factory item delegator for the root adapter factory. */
+ private AdapterFactoryItemDelegator adapterFactoryItemDelegator;
/**
* This constructs an instance from a factory and a notifier.
@@ -32,6 +35,7 @@ public class ViewItemProviderSpec extends ViewItemProvider {
*/
public ViewItemProviderSpec(AdapterFactory adapterFactory) {
super(adapterFactory);
+ adapterFactoryItemDelegator = new AdapterFactoryItemDelegator(getRootAdapterFactory());
}
/**
@@ -42,7 +46,7 @@ public class ViewItemProviderSpec extends ViewItemProvider {
@Override
public String getText(Object object) {
View obj = (View)object;
- return getEClassText(obj) + " " + getElementText(obj);
+ return getEClassText(obj) + " " + getElementText(obj); //$NON-NLS-1$
}
/**
@@ -54,7 +58,7 @@ public class ViewItemProviderSpec extends ViewItemProvider {
public Object getImage(Object object) {
EObject obj = (View)object;
return overlayImage(object,
- ExtensionsEditPlugin.INSTANCE.getImage("full/obj16/" + obj.eClass().getName()));
+ ExtensionsEditPlugin.INSTANCE.getImage("full/obj16/" + obj.eClass().getName())); //$NON-NLS-1$
}
/**
@@ -78,9 +82,9 @@ public class ViewItemProviderSpec extends ViewItemProvider {
protected String getElementText(View obj) {
EObject element = obj.getElement();
if (element != null) {
- return AdapterFactoryUtil.getText(getRootAdapterFactory(), element);
+ return adapterFactoryItemDelegator.getText(element);
}
- return "<null>";
+ return "<null>"; //$NON-NLS-1$
}
}

Back to the top