/*****************************************************************************
* Copyright (c) 2010 CEA LIST.
*
*
* 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:
* Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
*
*****************************************************************************/
package org.eclipse.papyrus.uml.diagram.profile.custom.requests;
import java.util.ArrayList;
import org.eclipse.core.runtime.Platform;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.transaction.util.TransactionUtil;
import org.eclipse.gmf.runtime.diagram.core.edithelpers.CreateElementRequestAdapter;
import org.eclipse.gmf.runtime.emf.core.util.EMFCoreUtil;
import org.eclipse.gmf.runtime.emf.core.util.PackageUtil;
import org.eclipse.gmf.runtime.emf.type.core.IElementType;
import org.eclipse.gmf.runtime.emf.type.core.requests.CreateElementRequest;
public class CustomCreateElementRequestAdapter extends org.eclipse.gmf.runtime.diagram.core.edithelpers.CreateElementRequestAdapter {
/**
* The request to create a new element.
*/
private final CreateElementRequest createElementRequest;
private ArrayList<CreateElementRequestAdapter> listRequestAdapter;
/**
* Constructs a new adapter.
*
* @param createElementRequest
* the request to create a new element.
*/
public CustomCreateElementRequestAdapter(CreateElementRequest createElementRequest) {
super(createElementRequest);
this.createElementRequest = createElementRequest;
listRequestAdapter = new ArrayList<CreateElementRequestAdapter>();
listRequestAdapter.add(new CreateElementRequestAdapter(createElementRequest));
}
/*
* (non-Javadoc)
*
* @see org.eclipse.core.runtime.IAdaptable#getAdapter(java.lang.Class)
*/
public Object getAdapter(java.lang.Class adapter, int i) {
if(adapter.isInstance(listRequestAdapter.get(i).getAdapter(CreateElementRequest.class))) {
return listRequestAdapter.get(i).getAdapter(CreateElementRequest.class);
}
if(adapter.isInstance(getNewElement(i))) {
return getNewElement(i);
}
if(adapter.isInstance(getElementType(i))) {
return getElementType(i);
}
//Is this correct?
if(adapter.isInstance(this)) {
return this;
}
return Platform.getAdapterManager().getAdapter(listRequestAdapter.get(i).getAdapter(CreateElementRequest.class), adapter);
}
/**
* Gets the new element that has been created in response to this request.
*
* @return the new element
*/
private EObject getNewElement(int i) {
return ((CreateElementRequest)listRequestAdapter.get(i).getAdapter(CreateElementRequest.class)).getNewElement();
}
public CreateElementRequest getRequest(int i) {
return ((CreateElementRequest)listRequestAdapter.get(i).getAdapter(CreateElementRequest.class));
}
/**
* Gets the element type for the new element.
*
* @return the element type
*/
private IElementType getElementType(int i) {
return ((CreateElementRequest)listRequestAdapter.get(i).getAdapter(CreateElementRequest.class)).getElementType();
}
/**
* Sets the new element that has been created in response to this request.
*
* @param newElement
* the new element
*/
@Override
public void setNewElement(EObject newElement) {
if(listRequestAdapter.size() == 1 && ((CreateElementRequest)listRequestAdapter.get(0).getAdapter(CreateElementRequest.class)).getNewElement() == null) {
//the request exists yet!!!
listRequestAdapter.get(0).setNewElement(newElement);
} else {
CreateElementRequest req = new CreateElementRequest(createElementRequest.getEditingDomain(), createElementRequest.getContainer(), createElementRequest.getElementType(), createElementRequest.getContainmentFeature());
req.setNewElement(newElement);
listRequestAdapter.add(new CreateElementRequestAdapter(req));
}
}
/**
* (non-Javadoc)
*
* @see org.eclipse.gmf.runtime.emf.core.internal.util.IProxyEObject#getProxyClassID()
*/
public Object getProxyClassID(int i) {
return getNewElement(i) == null ? null : PackageUtil.getID(EMFCoreUtil.getProxyClass(getNewElement(i)));
}
/**
* (non-Javadoc)
*
* @see org.eclipse.gmf.runtime.emf.core.internal.util.IProxyEObject#resolve()
*/
public EObject resolve(int i) {
return getNewElement(i) == null ? null : EMFCoreUtil.resolve(TransactionUtil.getEditingDomain(((CreateElementRequest)listRequestAdapter.get(i).getAdapter(CreateElementRequest.class)).getContainer()), getNewElement(i));
}
/**
*
* @param i
* @return the request adapter or null
*/
public CreateElementRequestAdapter getRequestAdapterDUMMY(int index) {
CreateElementRequestAdapter reqAdapter = null;
try {
reqAdapter = listRequestAdapter.get(index);
} catch (IndexOutOfBoundsException e) {
e.printStackTrace();
throw (e);
}
return reqAdapter;
}
/**
*
* @return the list of the requestAdapter
*/
public ArrayList<CreateElementRequestAdapter> getRequestAdapters() {
return listRequestAdapter;
}
}