blob: 17607561d8ca25a59e16a56806d170e73dd2fa16 [file] [log] [blame]
/******************************************************************************
* Copyright (c) 2010, BonitaSoft S.A.
* 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:
* Mickael Istria, BonitaSoft S.A. - Initial implementation (bug 288695)
****************************************************************************/
package org.eclipse.gmf.runtime.diagram.ui.requests;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.gef.requests.CreateRequest;
import org.eclipse.gmf.runtime.notation.View;
/**
* This class implements an IAdaptable to be used with {@link CreateUnspecifiedTypeRequest}.
* It delegates the {@link IAdaptable#getAdapter(Class)} to the {@link CreateRequest} that
* realizes this creation.
*
* @author Mickael Istria, BonitaSoft S.A.
* @since 1.5
*/
public class CreateUnspecifiedAdapter implements IAdaptable {
private List<CreateRequest> requests;
public CreateUnspecifiedAdapter() {
this.requests = new ArrayList<CreateRequest>();
}
/**
* Adapt delegating to the {@link CreateRequest} that was actually executed.
*/
public Object getAdapter(Class adapter) {
for (CreateRequest request : requests) {
Object newObject = request.getNewObject();
if (newObject != null &&
newObject instanceof List<?> &&
! ((List<?>)newObject).isEmpty()) {
IAdaptable adaptable = (IAdaptable) ((List<?>)newObject).get(0);
View view = (View) adaptable.getAdapter(View.class);
if (view != null && view.getElement() != null) {
return adaptable.getAdapter(adapter);
}
}
}
return null;
}
/**
* @param request A new request to add to the list of potentially executed
* requests
*/
public void add(CreateRequest request) {
this.requests.add(request);
}
}