package org.activiti.osgi.blueprint;
import java.util.ArrayList;
import java.util.List;
import org.activiti.engine.delegate.VariableScope;
import org.activiti.engine.impl.cfg.ProcessEngineConfigurationImpl;
import org.activiti.engine.impl.el.ExpressionManager;
import org.activiti.engine.impl.el.VariableScopeElResolver;
import org.activiti.engine.impl.javax.el.ArrayELResolver;
import org.activiti.engine.impl.javax.el.CompositeELResolver;
import org.activiti.engine.impl.javax.el.ELResolver;
import org.activiti.engine.impl.javax.el.ListELResolver;
import org.activiti.engine.impl.javax.el.MapELResolver;
import org.activiti.engine.impl.scripting.BeansResolverFactory;
import org.activiti.engine.impl.scripting.ResolverFactory;
import org.activiti.engine.impl.scripting.ScriptBindingsFactory;
import org.activiti.engine.impl.scripting.VariableScopeResolverFactory;
import org.activiti.osgi.OsgiScriptingEngines;
public class ProcessEngineFactoryWithELResolver extends ProcessEngineFactory {
private BlueprintELResolver blueprintELResolver;
private BlueprintContextELResolver blueprintContextELResolver;
@Override
public void init() throws Exception {
ProcessEngineConfigurationImpl configImpl = (ProcessEngineConfigurationImpl) getProcessEngineConfiguration();
configImpl.setExpressionManager(new BlueprintExpressionManager());
List<ResolverFactory> resolverFactories = configImpl.getResolverFactories();
if (resolverFactories == null) {
resolverFactories = new ArrayList<ResolverFactory>();
resolverFactories.add(new VariableScopeResolverFactory());
resolverFactories.add(new BeansResolverFactory());
}
configImpl.setScriptingEngines(new OsgiScriptingEngines(
new ScriptBindingsFactory(resolverFactories)));
super.init();
}
public class BlueprintExpressionManager extends ExpressionManager {
@Override
protected ELResolver createElResolver(VariableScope variableScope) {
CompositeELResolver compositeElResolver = new CompositeELResolver();
compositeElResolver.add(new VariableScopeElResolver(variableScope));
if (blueprintContextELResolver != null) {
compositeElResolver.add(blueprintContextELResolver);
}
compositeElResolver.add(blueprintELResolver);
compositeElResolver.add(new ArrayELResolver());
compositeElResolver.add(new ListELResolver());
compositeElResolver.add(new MapELResolver());
return compositeElResolver;
}
}
public void setBlueprintELResolver(BlueprintELResolver blueprintELResolver) {
this.blueprintELResolver = blueprintELResolver;
}
public void setBlueprintContextELResolver(BlueprintContextELResolver blueprintContextELResolver) {
this.blueprintContextELResolver = blueprintContextELResolver;
}
}