diff options
author | Mikaël Barbero | 2012-09-27 14:52:24 +0000 |
---|---|---|
committer | Mikaël Barbero | 2012-09-27 15:00:43 +0000 |
commit | 3102f2af1e70228595e3cd1a7086b27744bd2870 (patch) | |
tree | 94082e9554a424b7426ad61b6c82b40e6cf4171e /plugins | |
parent | 8fe821ef299481720ae316cbffb4af52616e0a07 (diff) | |
download | org.eclipse.emf.compare-3102f2af1e70228595e3cd1a7086b27744bd2870.tar.gz org.eclipse.emf.compare-3102f2af1e70228595e3cd1a7086b27744bd2870.tar.xz org.eclipse.emf.compare-3102f2af1e70228595e3cd1a7086b27744bd2870.zip |
preliminary support of UMLDiff in the IDE UI
Diffstat (limited to 'plugins')
5 files changed, 299 insertions, 23 deletions
diff --git a/plugins/org.eclipse.emf.compare.uml2.ide.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.emf.compare.uml2.ide.ui/META-INF/MANIFEST.MF index de9f9d5ea..1e4351302 100644 --- a/plugins/org.eclipse.emf.compare.uml2.ide.ui/META-INF/MANIFEST.MF +++ b/plugins/org.eclipse.emf.compare.uml2.ide.ui/META-INF/MANIFEST.MF @@ -10,6 +10,7 @@ Require-Bundle: org.eclipse.emf.compare.uml2.edit;bundle-version="2.0.0", org.eclipse.emf.compare.ide.ui;bundle-version="2.0.0", org.eclipse.emf.compare;bundle-version="2.0.0", org.eclipse.swt;bundle-version="3.100.0", - org.eclipse.emf.compare.rcp.ui;bundle-version="2.0.0" + org.eclipse.emf.compare.rcp.ui;bundle-version="2.0.0", + org.eclipse.core.runtime;bundle-version="3.5.0" Import-Package: com.google.common.collect;version="[10.0.0,11.0.0)" Bundle-ActivationPolicy: lazy diff --git a/plugins/org.eclipse.emf.compare.uml2.ide.ui/src/org/eclipse/emf/compare/uml2/ide/ui/internal/accessor/UMLIDEManyStructuralFeatureAccessorImpl.java b/plugins/org.eclipse.emf.compare.uml2.ide.ui/src/org/eclipse/emf/compare/uml2/ide/ui/internal/accessor/UMLIDEManyStructuralFeatureAccessorImpl.java new file mode 100644 index 000000000..93f05a393 --- /dev/null +++ b/plugins/org.eclipse.emf.compare.uml2.ide.ui/src/org/eclipse/emf/compare/uml2/ide/ui/internal/accessor/UMLIDEManyStructuralFeatureAccessorImpl.java @@ -0,0 +1,104 @@ +/*******************************************************************************
+ * Copyright (c) 2012 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.uml2.ide.ui.internal.accessor;
+
+import static com.google.common.collect.Iterables.filter;
+
+import com.google.common.collect.ImmutableList;
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.compare.Diff;
+import org.eclipse.emf.compare.ReferenceChange;
+import org.eclipse.emf.compare.ide.ui.internal.contentmergeviewer.accessor.IDEManyStructuralFeatureAccessorImpl;
+import org.eclipse.emf.compare.rcp.ui.mergeviewer.MergeViewer.MergeViewerSide;
+import org.eclipse.emf.compare.uml2.UMLDiff;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+/**
+ * @author <a href="mailto:mikael.barbero@obeo.fr">Mikael Barbero</a>
+ */
+public class UMLIDEManyStructuralFeatureAccessorImpl extends IDEManyStructuralFeatureAccessorImpl {
+
+ /**
+ * @param diff
+ * @param side
+ */
+ public UMLIDEManyStructuralFeatureAccessorImpl(Diff diff, MergeViewerSide side) {
+ super(diff, side);
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.emf.compare.rcp.ui.mergeviewer.accessor.BasicStructuralFeatureAccessorImpl#getAffectedFeature(org.eclipse.emf.compare.Diff)
+ */
+ @Override
+ protected EStructuralFeature getAffectedFeature(Diff diff) {
+ if (diff instanceof UMLDiff) {
+ return ((UMLDiff)diff).getEReference();
+ }
+ return super.getAffectedFeature(diff);
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.emf.compare.rcp.ui.mergeviewer.accessor.ManyStructuralFeatureAccessorImpl#getDiffValue(org.eclipse.emf.compare.Diff)
+ */
+ @Override
+ protected Object getDiffValue(Diff diff) {
+ if (diff instanceof UMLDiff) {
+ return ((UMLDiff)diff).getDiscriminant();
+ }
+ return super.getDiffValue(diff);
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.emf.compare.rcp.ui.mergeviewer.accessor.BasicStructuralFeatureAccessorImpl#computeDifferences()
+ */
+ @Override
+ protected ImmutableList<Diff> computeDifferences() {
+ return ImmutableList.of(getInitialDiff());
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.emf.compare.rcp.ui.mergeviewer.accessor.ManyStructuralFeatureAccessorImpl#findInsertionIndex(org.eclipse.emf.compare.Diff,
+ * boolean)
+ */
+ @Override
+ protected int findInsertionIndex(Diff diff, boolean rightToLeft) {
+ if (diff instanceof UMLDiff) {
+ return super.findInsertionIndex(getDiffFromUMLDiff((UMLDiff)diff), rightToLeft);
+ }
+ return super.findInsertionIndex(diff, rightToLeft);
+ }
+
+ private static Diff getDiffFromUMLDiff(UMLDiff diff) {
+ Diff ret = null;
+ EObject discriminant = diff.getDiscriminant();
+ EList<Diff> differences = diff.getMatch().getComparison().getDifferences(discriminant);
+ for (ReferenceChange referenceChange : filter(differences, ReferenceChange.class)) {
+ if (referenceChange.getKind() == diff.getKind()) {
+ EReference reference = referenceChange.getReference();
+ if (reference == diff.getEReference() && referenceChange.getValue() == discriminant) {
+ ret = referenceChange;
+ }
+ }
+ }
+ return ret;
+ }
+}
diff --git a/plugins/org.eclipse.emf.compare.uml2.ide.ui/src/org/eclipse/emf/compare/uml2/ide/ui/internal/accessor/UMLIDESingleStructuralFeatureAccessorImpl.java b/plugins/org.eclipse.emf.compare.uml2.ide.ui/src/org/eclipse/emf/compare/uml2/ide/ui/internal/accessor/UMLIDESingleStructuralFeatureAccessorImpl.java new file mode 100644 index 000000000..7cdb2eb20 --- /dev/null +++ b/plugins/org.eclipse.emf.compare.uml2.ide.ui/src/org/eclipse/emf/compare/uml2/ide/ui/internal/accessor/UMLIDESingleStructuralFeatureAccessorImpl.java @@ -0,0 +1,56 @@ +/*******************************************************************************
+ * Copyright (c) 2012 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.uml2.ide.ui.internal.accessor;
+
+import com.google.common.collect.ImmutableList;
+
+import org.eclipse.emf.compare.Diff;
+import org.eclipse.emf.compare.ide.ui.internal.contentmergeviewer.accessor.IDESingleStructuralFeatureAccessorImpl;
+import org.eclipse.emf.compare.rcp.ui.mergeviewer.MergeViewer.MergeViewerSide;
+import org.eclipse.emf.compare.uml2.UMLDiff;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+/**
+ * @author <a href="mailto:mikael.barbero@obeo.fr">Mikael Barbero</a>
+ */
+public class UMLIDESingleStructuralFeatureAccessorImpl extends IDESingleStructuralFeatureAccessorImpl {
+
+ /**
+ * @param diff
+ * @param side
+ */
+ public UMLIDESingleStructuralFeatureAccessorImpl(Diff diff, MergeViewerSide side) {
+ super(diff, side);
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.emf.compare.rcp.ui.mergeviewer.accessor.BasicStructuralFeatureAccessorImpl#getAffectedFeature(org.eclipse.emf.compare.Diff)
+ */
+ @Override
+ protected EStructuralFeature getAffectedFeature(Diff diff) {
+ if (diff instanceof UMLDiff) {
+ return ((UMLDiff)diff).getEReference();
+ }
+ return super.getAffectedFeature(diff);
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.emf.compare.rcp.ui.mergeviewer.accessor.BasicStructuralFeatureAccessorImpl#computeDifferences()
+ */
+ @Override
+ protected ImmutableList<Diff> computeDifferences() {
+ return ImmutableList.of(getInitialDiff());
+ }
+}
diff --git a/plugins/org.eclipse.emf.compare.uml2.ide.ui/src/org/eclipse/emf/compare/uml2/ide/ui/internal/provider/UMLCompareNodeAdapterFactory.java b/plugins/org.eclipse.emf.compare.uml2.ide.ui/src/org/eclipse/emf/compare/uml2/ide/ui/internal/provider/UMLCompareNodeAdapterFactory.java index 1fbb82b71..ffb98df85 100644 --- a/plugins/org.eclipse.emf.compare.uml2.ide.ui/src/org/eclipse/emf/compare/uml2/ide/ui/internal/provider/UMLCompareNodeAdapterFactory.java +++ b/plugins/org.eclipse.emf.compare.uml2.ide.ui/src/org/eclipse/emf/compare/uml2/ide/ui/internal/provider/UMLCompareNodeAdapterFactory.java @@ -149,6 +149,136 @@ public class UMLCompareNodeAdapterFactory extends UMLCompareAdapterFactory imple } /** + * {@inheritDoc} + * + * @see org.eclipse.emf.compare.uml2.util.UMLCompareAdapterFactory#createProfileApplicationChangeAdapter() + */ + @Override + public Adapter createProfileApplicationChangeAdapter() { + return new UMLDiffNode(getRootAdapterFactory()); + } + + /** + * {@inheritDoc} + * + * @see org.eclipse.emf.compare.uml2.util.UMLCompareAdapterFactory#createDependencyChangeAdapter() + */ + @Override + public Adapter createDependencyChangeAdapter() { + return new UMLDiffNode(getRootAdapterFactory()); + } + + /** + * {@inheritDoc} + * + * @see org.eclipse.emf.compare.uml2.util.UMLCompareAdapterFactory#createInterfaceRealizationChangeAdapter() + */ + @Override + public Adapter createInterfaceRealizationChangeAdapter() { + return new UMLDiffNode(getRootAdapterFactory()); + } + + /** + * {@inheritDoc} + * + * @see org.eclipse.emf.compare.uml2.util.UMLCompareAdapterFactory#createSubstitutionChangeAdapter() + */ + @Override + public Adapter createSubstitutionChangeAdapter() { + return new UMLDiffNode(getRootAdapterFactory()); + } + + /** + * {@inheritDoc} + * + * @see org.eclipse.emf.compare.uml2.util.UMLCompareAdapterFactory#createExtendChangeAdapter() + */ + @Override + public Adapter createExtendChangeAdapter() { + return new UMLDiffNode(getRootAdapterFactory()); + } + + /** + * {@inheritDoc} + * + * @see org.eclipse.emf.compare.uml2.util.UMLCompareAdapterFactory#createIncludeChangeAdapter() + */ + @Override + public Adapter createIncludeChangeAdapter() { + return new UMLDiffNode(getRootAdapterFactory()); + } + + /** + * {@inheritDoc} + * + * @see org.eclipse.emf.compare.uml2.util.UMLCompareAdapterFactory#createGeneralizationSetChangeAdapter() + */ + @Override + public Adapter createGeneralizationSetChangeAdapter() { + return new UMLDiffNode(getRootAdapterFactory()); + } + + /** + * {@inheritDoc} + * + * @see org.eclipse.emf.compare.uml2.util.UMLCompareAdapterFactory#createIntervalConstraintChangeAdapter() + */ + @Override + public Adapter createIntervalConstraintChangeAdapter() { + return new UMLDiffNode(getRootAdapterFactory()); + } + + /** + * {@inheritDoc} + * + * @see org.eclipse.emf.compare.uml2.util.UMLCompareAdapterFactory#createMessageChangeAdapter() + */ + @Override + public Adapter createMessageChangeAdapter() { + return new UMLDiffNode(getRootAdapterFactory()); + } + + /** + * {@inheritDoc} + * + * @see org.eclipse.emf.compare.uml2.util.UMLCompareAdapterFactory#createStereotypePropertyChangeAdapter() + */ + @Override + public Adapter createStereotypePropertyChangeAdapter() { + return new UMLDiffNode(getRootAdapterFactory()); + } + + /** + * {@inheritDoc} + * + * @see org.eclipse.emf.compare.uml2.util.UMLCompareAdapterFactory#createStereotypeApplicationChangeAdapter() + */ + @Override + public Adapter createStereotypeApplicationChangeAdapter() { + return new UMLDiffNode(getRootAdapterFactory()); + } + + /** + * {@inheritDoc} + * + * @see org.eclipse.emf.compare.uml2.util.UMLCompareAdapterFactory#createStereotypeReferenceChangeAdapter() + */ + @Override + public Adapter createStereotypeReferenceChangeAdapter() { + return new UMLDiffNode(getRootAdapterFactory()); + } + + /** + * {@inheritDoc} + * + * @see org.eclipse.emf.compare.uml2.util.UMLCompareAdapterFactory#createUMLDiffAdapter() + */ + @Override + public Adapter createUMLDiffAdapter() { + return new UMLDiffNode(getRootAdapterFactory()); + } + + /** * This adds a listener. * * @param notifyChangedListener diff --git a/plugins/org.eclipse.emf.compare.uml2.ide.ui/src/org/eclipse/emf/compare/uml2/ide/ui/internal/provider/UMLDiffNode.java b/plugins/org.eclipse.emf.compare.uml2.ide.ui/src/org/eclipse/emf/compare/uml2/ide/ui/internal/provider/UMLDiffNode.java index cd8d9297f..a0fb27c1f 100644 --- a/plugins/org.eclipse.emf.compare.uml2.ide.ui/src/org/eclipse/emf/compare/uml2/ide/ui/internal/provider/UMLDiffNode.java +++ b/plugins/org.eclipse.emf.compare.uml2.ide.ui/src/org/eclipse/emf/compare/uml2/ide/ui/internal/provider/UMLDiffNode.java @@ -10,19 +10,13 @@ *******************************************************************************/ package org.eclipse.emf.compare.uml2.ide.ui.internal.provider; -import static com.google.common.collect.Iterables.filter; - import org.eclipse.compare.ITypedElement; import org.eclipse.emf.common.notify.AdapterFactory; -import org.eclipse.emf.common.util.EList; -import org.eclipse.emf.compare.Diff; -import org.eclipse.emf.compare.ReferenceChange; -import org.eclipse.emf.compare.ide.ui.internal.contentmergeviewer.accessor.IDEManyStructuralFeatureAccessorImpl; -import org.eclipse.emf.compare.ide.ui.internal.contentmergeviewer.accessor.IDESingleStructuralFeatureAccessorImpl; import org.eclipse.emf.compare.ide.ui.internal.structuremergeviewer.provider.DiffNode; import org.eclipse.emf.compare.rcp.ui.mergeviewer.MergeViewer.MergeViewerSide; import org.eclipse.emf.compare.uml2.UMLDiff; -import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.compare.uml2.ide.ui.internal.accessor.UMLIDEManyStructuralFeatureAccessorImpl; +import org.eclipse.emf.compare.uml2.ide.ui.internal.accessor.UMLIDESingleStructuralFeatureAccessorImpl; import org.eclipse.emf.ecore.EReference; /** @@ -78,20 +72,11 @@ public class UMLDiffNode extends DiffNode { case ADD: case DELETE: case MOVE: - EObject discriminant = diff.getDiscriminant(); - EList<Diff> differences = diff.getMatch().getComparison().getDifferences(discriminant); - for (ReferenceChange referenceChange : filter(differences, ReferenceChange.class)) { - if (referenceChange.getKind() == diff.getKind()) { - EReference reference = referenceChange.getReference(); - if (reference == diff.getEReference() && referenceChange.getValue() == discriminant) { - if (reference.isMany()) { - ret = new IDEManyStructuralFeatureAccessorImpl(referenceChange, side); - } else { - ret = new IDESingleStructuralFeatureAccessorImpl(referenceChange, side); - } - break; - } - } + EReference eReference = diff.getEReference(); + if (eReference.isMany()) { + ret = new UMLIDEManyStructuralFeatureAccessorImpl(diff, side); + } else { + ret = new UMLIDESingleStructuralFeatureAccessorImpl(diff, side); } break; case CHANGE: |