| /******************************************************************************* |
| * Copyright (c) 2014, 2015 EclipseSource Muenchen GmbH 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: |
| * Philip Langer - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.emf.compare.uml2.rcp.ui.internal.accessor.factory; |
| |
| import org.eclipse.emf.common.notify.AdapterFactory; |
| import org.eclipse.emf.compare.DifferenceKind; |
| import org.eclipse.emf.compare.rcp.ui.contentmergeviewer.accessor.legacy.ITypedElement; |
| import org.eclipse.emf.compare.rcp.ui.internal.contentmergeviewer.IModelUpdateStrategy; |
| import org.eclipse.emf.compare.rcp.ui.internal.contentmergeviewer.IModelUpdateStrategyProvider; |
| import org.eclipse.emf.compare.rcp.ui.internal.contentmergeviewer.accessor.factory.impl.AbstractAccessorFactory; |
| import org.eclipse.emf.compare.rcp.ui.mergeviewer.IMergeViewer.MergeViewerSide; |
| import org.eclipse.emf.compare.uml2.internal.OpaqueElementBodyChange; |
| import org.eclipse.emf.compare.uml2.rcp.ui.internal.accessor.OpaqueElementBodyChangeAccessor; |
| import org.eclipse.emf.compare.uml2.rcp.ui.internal.accessor.OpaqueElementBodyChangeUpdateStrategy; |
| import org.eclipse.emf.compare.uml2.rcp.ui.internal.accessor.OpaqueElementBodyMoveAccessor; |
| |
| /** |
| * An accessor factory for {@link OpaqueElementBodyChange opaque element body changes}. |
| * <p> |
| * Depending on whether the {@link OpaqueElementBodyChange} represents a move or an addition/deletion/change, |
| * this factory returns different accessors, because different content merge viewers are used for moves as |
| * opposed to any other change type. Therefore, for moves, the {@link OpaqueElementBodyMoveAccessor} is |
| * created, which shows the list of language values. For any other change type, the |
| * {@link OpaqueElementBodyChangeAccessor} is created, which shows the changed body values in a textual |
| * content merge viewer. |
| * </p> |
| * |
| * @author Philip Langer <planger@eclipsesource.com> |
| */ |
| public class OpaqueElementBodyChangeAccessorFactory extends AbstractAccessorFactory implements IModelUpdateStrategyProvider { |
| |
| /** |
| * {@inheritDoc} |
| * |
| * @see org.eclipse.emf.compare.rcp.ui.contentmergeviewer.accessor.factory.ide.ui.internal.contentmergeviewer.accessor.IAccessorFactory#isFactoryFor(java.lang.Object) |
| */ |
| public boolean isFactoryFor(Object target) { |
| return target instanceof OpaqueElementBodyChange; |
| } |
| |
| /** |
| * {@inheritDoc} |
| * |
| * @see org.eclipse.emf.compare.rcp.ui.contentmergeviewer.accessor.factory.ide.ui.internal.contentmergeviewer.accessor.IAccessorFactory#createLeft(org.eclipse.emf.common.notify.AdapterFactory, |
| * java.lang.Object) |
| */ |
| public ITypedElement createLeft(AdapterFactory adapterFactory, Object target) { |
| return createOpaqueElementBodyChangeAccessor(adapterFactory, (OpaqueElementBodyChange)target, |
| MergeViewerSide.LEFT); |
| } |
| |
| /** |
| * {@inheritDoc} |
| * |
| * @see org.eclipse.emf.compare.rcp.ui.contentmergeviewer.accessor.factory.ide.ui.internal.contentmergeviewer.accessor.IAccessorFactory#createRight(org.eclipse.emf.common.notify.AdapterFactory, |
| * java.lang.Object) |
| */ |
| public ITypedElement createRight(AdapterFactory adapterFactory, Object target) { |
| return createOpaqueElementBodyChangeAccessor(adapterFactory, (OpaqueElementBodyChange)target, |
| MergeViewerSide.RIGHT); |
| } |
| |
| /** |
| * {@inheritDoc} |
| * |
| * @see org.eclipse.emf.compare.rcp.ui.contentmergeviewer.accessor.factory.ide.ui.internal.contentmergeviewer.accessor.IAccessorFactory#createAncestor(org.eclipse.emf.common.notify.AdapterFactory, |
| * java.lang.Object) |
| */ |
| public ITypedElement createAncestor(AdapterFactory adapterFactory, Object target) { |
| return createOpaqueElementBodyChangeAccessor(adapterFactory, (OpaqueElementBodyChange)target, |
| MergeViewerSide.ANCESTOR); |
| } |
| |
| /** |
| * Depending on whether the {@code bodyChange} represents a move or a addition/deletion/change, we will |
| * return different accessors, because we show different content merger viewers. |
| * |
| * @param adapterFactory |
| * the adapater factory used to create the accessor. |
| * @param bodyChange |
| * The change to be accessed by this accessor. |
| * @param side |
| * The side of this accessor. |
| * @return The respective accessor for the given {@code bodyChange}. |
| */ |
| private ITypedElement createOpaqueElementBodyChangeAccessor(AdapterFactory adapterFactory, |
| OpaqueElementBodyChange bodyChange, final MergeViewerSide side) { |
| if (DifferenceKind.MOVE.equals(bodyChange.getKind())) { |
| return new OpaqueElementBodyMoveAccessor(adapterFactory, bodyChange, side); |
| } else { |
| return new OpaqueElementBodyChangeAccessor(adapterFactory, bodyChange, side); |
| } |
| } |
| |
| /** |
| * {@inheritDoc} |
| * |
| * @see IModelUpdateStrategyProvider#getModelUpdateStrategy() |
| */ |
| public IModelUpdateStrategy getModelUpdateStrategy() { |
| return new OpaqueElementBodyChangeUpdateStrategy(); |
| } |
| } |