diff options
Diffstat (limited to 'sandbox/PapyrusEMFCompareV1/org.eclipse.papyrus.infra.emf.compare/src/org/eclipse/papyrus/infra/emf/compare/merger/ModelElementChangeRightTargetMerger.java')
-rw-r--r-- | sandbox/PapyrusEMFCompareV1/org.eclipse.papyrus.infra.emf.compare/src/org/eclipse/papyrus/infra/emf/compare/merger/ModelElementChangeRightTargetMerger.java | 146 |
1 files changed, 0 insertions, 146 deletions
diff --git a/sandbox/PapyrusEMFCompareV1/org.eclipse.papyrus.infra.emf.compare/src/org/eclipse/papyrus/infra/emf/compare/merger/ModelElementChangeRightTargetMerger.java b/sandbox/PapyrusEMFCompareV1/org.eclipse.papyrus.infra.emf.compare/src/org/eclipse/papyrus/infra/emf/compare/merger/ModelElementChangeRightTargetMerger.java deleted file mode 100644 index ae884c33194..00000000000 --- a/sandbox/PapyrusEMFCompareV1/org.eclipse.papyrus.infra.emf.compare/src/org/eclipse/papyrus/infra/emf/compare/merger/ModelElementChangeRightTargetMerger.java +++ /dev/null @@ -1,146 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006, 2011 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.papyrus.infra.emf.compare.merger; - -import java.util.Iterator; -import java.util.List; -import java.util.ListIterator; - -import org.eclipse.emf.compare.EMFComparePlugin; -import org.eclipse.emf.compare.FactoryException; -import org.eclipse.emf.compare.diff.merge.DefaultMerger; -import org.eclipse.emf.compare.diff.metamodel.DiffElement; -import org.eclipse.emf.compare.diff.metamodel.ModelElementChangeRightTarget; -import org.eclipse.emf.compare.diff.metamodel.ReferenceChangeRightTarget; -import org.eclipse.emf.compare.diff.metamodel.ReferenceOrderChange; -import org.eclipse.emf.compare.util.EFactory; -import org.eclipse.emf.ecore.EObject; -import org.eclipse.emf.ecore.EReference; -import org.eclipse.emf.ecore.InternalEObject; -import org.eclipse.emf.ecore.util.EcoreUtil; - -/** - * Merger for an {@link ModelElementChangeRightTarget} operation.<br/> - * <p> - * Are considered for this merger : - * <ul> - * <li>RemoveModelElement</li> - * <li>RemoteAddModelElement</li> - * </ul> - * </p> - * - * @author <a href="mailto:laurent.goubet@obeo.fr">Laurent Goubet</a> - */ -public class ModelElementChangeRightTargetMerger extends DefaultMerger { - /** - * {@inheritDoc} - * - * @see org.eclipse.emf.compare.diff.merge.api.AbstractMerger#doApplyInOrigin() - */ - @Override - public void doApplyInOrigin() { - final ModelElementChangeRightTarget theDiff = (ModelElementChangeRightTarget)this.diff; - final EObject origin = theDiff.getLeftParent(); - final EObject element = theDiff.getRightElement(); - final EObject newOne = copy(element); - final EReference ref = element.eContainmentFeature(); - if (ref != null) { - try { - int expectedIndex = -1; - if (ref.isMany()) { - final Object containmentRefVal = element.eContainer().eGet(ref); - if (containmentRefVal instanceof List<?>) { - @SuppressWarnings("unchecked") - final List<EObject> listVal = (List<EObject>)containmentRefVal; - expectedIndex = listVal.indexOf(element); - } - } - EFactory.eAdd(origin, ref.getName(), newOne, expectedIndex, true); - setXMIID(newOne, getXMIID(element)); - } catch (final FactoryException e) { - EMFComparePlugin.log(e, true); - } - } else if (origin == null && getDiffModel().getLeftRoots().size() > 0) { - getDiffModel().getLeftRoots().get(0).eResource().getContents().add(newOne); - } else if (origin != null) { - origin.eResource().getContents().add(newOne); - } else { - // FIXME Throw exception : couldn't merge this - } - // we should now have a look for AddReferencesLinks needing this object - final Iterator<EObject> siblings = getDiffModel().eAllContents(); - while (siblings.hasNext()) { - final DiffElement op = (DiffElement)siblings.next(); - if (op instanceof ReferenceChangeRightTarget) { - final ReferenceChangeRightTarget link = (ReferenceChangeRightTarget)op; - // now if I'm in the target References I should put my copy in the origin - if (link.getLeftTarget() != null && link.getLeftTarget() == element) { - link.setRightTarget(newOne); - } - } else if (op instanceof ReferenceOrderChange) { - final ReferenceOrderChange link = (ReferenceOrderChange)op; - if (link.getLeftElement() == origin && link.getReference() == ref) { - final ListIterator<EObject> targetIterator = link.getLeftTarget().listIterator(); - boolean replaced = false; - while (!replaced && targetIterator.hasNext()) { - final EObject target = targetIterator.next(); - if (target.eIsProxy() - && equalProxyURIs(((InternalEObject)target).eProxyURI(), - EcoreUtil.getURI(element))) { - targetIterator.set(newOne); - replaced = true; - } - } - } - } - } - } - - /** - * {@inheritDoc} - * - * @see org.eclipse.emf.compare.diff.merge.api.AbstractMerger#doUndoInTarget() - */ - @Override - public void doUndoInTarget() { - final ModelElementChangeRightTarget theDiff = (ModelElementChangeRightTarget)this.diff; - final EObject element = theDiff.getRightElement(); - final EObject parent = theDiff.getRightElement().eContainer(); - EcoreUtil.remove(element); - // now removes all the dangling references - removeDanglingReferences(parent); - } - - /** - * {@inheritDoc} - * - * @see org.eclipse.emf.compare.diff.merge.DefaultMerger#canUndoInTarget() - */ - @Override - public boolean canUndoInTarget() { - final ModelElementChangeRightTarget theDiff = (ModelElementChangeRightTarget)this.diff; - final boolean isRightElementNotNull = theDiff.getRightElement() != null; - return isRightElementNotNull; - } - - /** - * {@inheritDoc} - * - * @see org.eclipse.emf.compare.diff.merge.DefaultMerger#getDependencies(boolean) - */ - @Override - protected List<DiffElement> getDependencies(boolean applyInOrigin) { - if (applyInOrigin) { - return diff.getRequires(); - } - return super.getDependencies(applyInOrigin); - } -} |