/*******************************************************************************
 * Copyright (c) 2016 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:
 *     Alexandra Buzila - 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.AttributeChange;
import org.eclipse.emf.compare.Diff;
import org.eclipse.emf.compare.rcp.ui.contentmergeviewer.accessor.legacy.ITypedElement;
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.MultiplicityElementChange;
import org.eclipse.emf.compare.uml2.rcp.ui.internal.accessor.MultiplicityElementAttributeChangeAccessor;

/**
 * Custom {@link AbstractAccessorFactory} for {@link MultiplicityElementChange} elements.
 * 
 * @author Alexandra Buzila
 */
@SuppressWarnings("restriction")
public class MultiplicityElementAttributeChangeAccessorFactory extends AbstractAccessorFactory {

	/**
	 * {@inheritDoc}
	 */
	public boolean isFactoryFor(Object target) {
		return target instanceof MultiplicityElementChange && ((MultiplicityElementChange)target)
				.getPrimeRefining() instanceof AttributeChange;
	}

	/**
	 * {@inheritDoc}
	 */
	public ITypedElement createAncestor(AdapterFactory adapterFactory, Object target) {
		return new MultiplicityElementAttributeChangeAccessor(adapterFactory, (Diff)target,
				MergeViewerSide.ANCESTOR);
	}

	/**
	 * {@inheritDoc}
	 */
	public ITypedElement createLeft(AdapterFactory adapterFactory, Object target) {
		return new MultiplicityElementAttributeChangeAccessor(adapterFactory, (Diff)target,
				MergeViewerSide.LEFT);
	}

	/**
	 * {@inheritDoc}
	 */
	public ITypedElement createRight(AdapterFactory adapterFactory, Object target) {
		return new MultiplicityElementAttributeChangeAccessor(adapterFactory, (Diff)target,
				MergeViewerSide.RIGHT);
	}

}
