/*******************************************************************************
* Copyright (c) 2008 Olivier Moises
*
* 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:
* Olivier Moises- initial API and implementation
*******************************************************************************/
package org.eclipse.wazaabi.engine.edp.executables;
import org.eclipse.emf.common.notify.Adapter;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.wazaabi.engine.edp.Registry;
import org.eclipse.wazaabi.engine.edp.adapters.ActionAdapterImpl;
import org.eclipse.wazaabi.engine.edp.adapters.ConditionAdapter;
import org.eclipse.wazaabi.engine.edp.adapters.ConverterAdapter;
import org.eclipse.wazaabi.engine.edp.adapters.EventDispatcherAdapter;
import org.eclipse.wazaabi.engine.edp.adapters.EventHandlerAdapter;
import org.eclipse.wazaabi.engine.edp.adapters.SequenceAdapterImpl;
import org.eclipse.wazaabi.engine.edp.adapters.ValidatorAdapter;
import org.eclipse.wazaabi.engine.edp.coderesolution.AbstractDeferredAdapter;
import org.eclipse.wazaabi.mm.edp.handlers.EDPHandlersPackage;
import org.eclipse.wazaabi.mm.edp.handlers.Executable;
public class EDPExecutableAdapterFactory implements ExecutableAdapterFactory {
public static final String FACTORY_ID = EDPExecutableAdapterFactory.class
.getName();
public boolean isFactoryFor(Object callingContext, Object model,
Object creationHint) {
if (model instanceof EObject) {
if (((EObject) model).eClass().getEPackage() == EDPHandlersPackage.eINSTANCE) {
// we assume that a sequence is always created by an
// EventHandler
if (((((EObject) model).eClass()
.equals(EDPHandlersPackage.Literals.SEQUENCE))))
return callingContext instanceof EventHandlerAdapter;
else
return model instanceof Executable;
}
}
return false;
}
public String getFactoryID() {
return FACTORY_ID;
}
@Override
public Adapter createAdapter(final Object callingContext, EObject model,
Object creationHint) {
if (model == null)
return null;
Adapter adapter = null;
// Since our Executable is created from within a EventHandler
if (model.eClass().equals(EDPHandlersPackage.Literals.SEQUENCE)
&& callingContext instanceof EventHandlerAdapter)
return new SequenceAdapterImpl() {
@Override
protected EventDispatcherAdapter getEventDispatcherAdapter() {
return ((EventHandlerAdapter) callingContext)
.getEventDispatcherAdapter();
}
};
if (model.eClass() == EDPHandlersPackage.Literals.CONVERTER)
adapter = new ConverterAdapter();
else if (model.eClass() == EDPHandlersPackage.Literals.ACTION)
adapter = new ActionAdapterImpl();
else if (model.eClass() == EDPHandlersPackage.Literals.CONDITION)
adapter = new ConditionAdapter();
else if (model.eClass() == EDPHandlersPackage.Literals.VALIDATOR)
adapter = new ValidatorAdapter();
if (creationHint instanceof Registry
&& adapter instanceof AbstractDeferredAdapter)
((AbstractDeferredAdapter) adapter)
.setRegistry((Registry) creationHint);
return adapter;
}
}