/*****************************************************************************
* Copyright (c) 2011 Atos.
*
*
* 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:
* Arthur Daussy (Atos) - Initial API and implementation
* Arthur Daussy - 371712 : 372745: [ActivityDiagram] Major refactoring group framework
*
*****************************************************************************/
package org.eclipse.papyrus.uml.diagram.activity.activitygroup.request;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EReference;
import org.eclipse.emf.transaction.TransactionalEditingDomain;
import org.eclipse.gmf.runtime.emf.type.core.requests.MoveRequest;
import org.eclipse.gmf.runtime.notation.View;
import org.eclipse.papyrus.uml.diagram.activity.activitygroup.utils.DebugUtils;
import org.eclipse.papyrus.uml.diagram.activity.part.UMLDiagramEditorPlugin;
public class DeferredMoveRequest extends MoveRequest {
/**
* IAdaptable of the container
*/
private IAdaptable targetContainer;
/**
* {@link IAdaptable} of the element to move
*/
private Map<IAdaptable, Object> iAdaptableToMove;
/**
* {@link EObject= to move
*/
private Map<EObject, Object> elementsToMove;
/**
* Class used to adapt the IAdaptable (for example {@link EObject} or {@link View}
*/
private Class<? extends EObject> classToCast;
/**
*
* @param editingDomain
* @param targetContainer
* @param elementsToMove
*/
public DeferredMoveRequest(TransactionalEditingDomain editingDomain, IAdaptable targetContainer, List<? extends IAdaptable> elementsToMove, Class<? extends EObject> classToCast) {
super(editingDomain, null, elementsToMove);
this.targetContainer = targetContainer;
this.iAdaptableToMove = new HashMap<IAdaptable, Object>();
this.classToCast = classToCast;
for(Iterator<? extends IAdaptable> i = elementsToMove.iterator(); i.hasNext();) {
this.iAdaptableToMove.put(i.next(), null);
}
}
public DeferredMoveRequest(TransactionalEditingDomain editingDomain, IAdaptable targetContainer, EReference targetFeature, IAdaptable elementToMove, Class<? extends EObject> classToCast) {
super(editingDomain, null, targetFeature, null);
this.targetContainer = targetContainer;
this.iAdaptableToMove = new HashMap<IAdaptable, Object>();
this.classToCast = classToCast;
iAdaptableToMove.put(elementToMove, targetFeature);
}
public DeferredMoveRequest(TransactionalEditingDomain editingDomain, IAdaptable targetContainer, Map<IAdaptable, Object> elementsToMove, Class<? extends EObject> classToCast) {
super(editingDomain, null, elementsToMove);
this.targetContainer = targetContainer;
this.classToCast = classToCast;
this.iAdaptableToMove = elementsToMove;
}
@Override
public Map getElementsToMove() {
if(elementsToMove == null) {
elementsToMove = new HashMap<EObject, Object>(iAdaptableToMove.size());
for(Entry<IAdaptable, Object> entry : iAdaptableToMove.entrySet()) {
IAdaptable key = entry.getKey();
Object object = key.getAdapter(classToCast);
if(object instanceof EObject) {
elementsToMove.put((EObject)object, entry.getValue());
} else if(UMLDiagramEditorPlugin.getInstance().isDebugging()) {
DebugUtils.getLog().warn("Unable to retrieve the Eobject to move (" + key + ")");
}
}
}
return elementsToMove;
}
@Override
public EObject getTargetContainer() {
Object object = targetContainer.getAdapter(classToCast);
if(object instanceof EObject) {
return (EObject)object;
} else if(UMLDiagramEditorPlugin.getInstance().isDebugging()) {
DebugUtils.getLog().warn("Unable to retrieve the Eobject of the target container (" + targetContainer + ")");
}
return null;
}
}