Skip to main content
summaryrefslogblamecommitdiffstats
blob: 90cfd28391ed822053c2a1617c3c349e0a692f26 (plain) (tree)












































































                                                                                        
/*******************************************************************************
 * Copyright (c) 2006, 2007 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.diff.generic.merge.impl;

import org.eclipse.emf.compare.EMFComparePlugin;
import org.eclipse.emf.compare.diff.metamodel.MoveModelElement;
import org.eclipse.emf.compare.util.EFactory;
import org.eclipse.emf.compare.util.FactoryException;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EReference;
import org.eclipse.emf.ecore.util.EcoreUtil;

/**
 * Merger for a {@link MoveModelElement} operation.
 * 
 * @author Cedric Brun <a href="mailto:cedric.brun@obeo.fr">cedric.brun@obeo.fr</a>
 */
public class MoveModelElementMerger extends DefaultMerger {
	/**
	 * {@inheritDoc}
	 * 
	 * @see org.eclipse.emf.compare.merge.api.AbstractMerger#applyInOrigin()
	 */
	@SuppressWarnings("unchecked")
	@Override
	public void applyInOrigin() {
		final MoveModelElement aDiff = (MoveModelElement)this.diff;
		final EObject leftTarget = aDiff.getLeftTarget();
		final EObject leftElement = aDiff.getLeftElement();
		final EReference ref = aDiff.getRightElement().eContainmentFeature();
		if (ref != null) {
			try {
				EcoreUtil.remove(leftElement);
				EFactory.eAdd(leftTarget, ref.getName(), leftElement);
			} catch (FactoryException e) {
				EMFComparePlugin.getDefault().log(e, true);
			}
		} else {
			// shouldn't be here
			assert false;
		}
		super.applyInOrigin();
	}

	/**
	 * {@inheritDoc}
	 *
	 * @see org.eclipse.emf.compare.merge.api.AbstractMerger#undoInTarget()
	 */
	@Override
	public void undoInTarget() {
		final MoveModelElement aDiff = (MoveModelElement)this.diff;
		final EObject rightTarget = aDiff.getRightTarget();
		final EObject rightElement = aDiff.getRightElement();
		final EReference ref = aDiff.getLeftElement().eContainmentFeature();
		if (ref != null) {
			try {
				EcoreUtil.remove(rightElement);
				EFactory.eAdd(rightTarget, ref.getName(), rightElement);
			} catch (FactoryException e) {
				EMFComparePlugin.getDefault().log(e, true);
			}
		} else {
			// shouldn't be here
			assert false;
		}
		super.applyInOrigin();
	}
}

Back to the top