As we transition to the new Hyland Community, some post links may be temporarily disrupted as we finalize redirects. We apologize for the inconvenience and are working to resolve this as quickly as possible. Details.
<br>package org.activiti.osgi.blueprint;<br><br>import java.beans.FeatureDescriptor;<br>import java.util.HashMap;<br>import java.util.Iterator;<br>import java.util.Map;<br><br>import org.activiti.engine.delegate.JavaDelegate;<br>import org.activiti.engine.delegate.TaskListener;<br>import org.activiti.engine.impl.javax.el.ELContext;<br>import org.activiti.engine.impl.javax.el.ELResolver;<br>import org.activiti.engine.impl.pvm.delegate.ActivityBehavior;<br>import org.slf4j.Logger;<br>import org.slf4j.LoggerFactory;<br><br>/**<br> * @see org.activiti.spring.ApplicationContextElResolver<br> */<br>public class BlueprintELResolver extends ELResolver {<br> <br> private static final Logger LOGGER = LoggerFactory.getLogger(BlueprintELResolver.class);<br> private Map<String, JavaDelegate> delegateMap = new HashMap<String, JavaDelegate>();<br> private Map<String, TaskListener> taskListenerMap = new HashMap<String, TaskListener>();<br> private Map<String, ActivityBehavior> activityBehaviourMap = new HashMap<String, ActivityBehavior>();<br><br> public Object getValue(ELContext context, Object base, Object property) {<br> if (base == null) {<br> // according to javadoc, can only be a String<br> String key = (String) property;<br> for (String name : delegateMap.keySet()) {<br> if (name.equalsIgnoreCase(key)) {<br> context.setPropertyResolved(true);<br> return delegateMap.get(name);<br> }<br> }<br> for (String name : taskListenerMap.keySet()) {<br> if (name.equalsIgnoreCase(key)) {<br> context.setPropertyResolved(true);<br> return taskListenerMap.get(name);<br> }<br> }<br> for (String name : activityBehaviourMap.keySet()) {<br> if (name.equalsIgnoreCase(key)) {<br> context.setPropertyResolved(true);<br> return activityBehaviourMap.get(name);<br> }<br> }<br> }<br><br> return null;<br> }<br> <br> @SuppressWarnings("rawtypes")<br> public void bindService(JavaDelegate delegate, Map props) {<br> String name = (String) props.get("osgi.service.blueprint.compname");<br> delegateMap.put(name, delegate);<br> LOGGER.info("added Activiti service to delegate cache {}", name);<br> }<br><br> @SuppressWarnings("rawtypes")<br> public void unbindService(JavaDelegate delegate, Map props) {<br> String name = (String) props.get("osgi.service.blueprint.compname");<br> if(delegateMap.containsKey(name)) {<br> delegateMap.remove(name);<br> }<br> LOGGER.info("removed Activiti service from delegate cache {}", name);<br> }<br><br> <br> @SuppressWarnings("rawtypes")<br> public void bindTaskListenerService(TaskListener delegate, Map props) {<br> String name = (String) props.get("osgi.service.blueprint.compname");<br> taskListenerMap.put(name, delegate);<br> LOGGER.info("added Activiti service to delegate cache {}", name);<br> }<br> <br> @SuppressWarnings("rawtypes")<br> public void unbindTaskListenerService(TaskListener delegate, Map props) {<br> String name = (String) props.get("osgi.service.blueprint.compname");<br> if(taskListenerMap.containsKey(name)) {<br> taskListenerMap.remove(name);<br> }<br> LOGGER.info("removed Activiti service from delegate cache {}", name);<br> }<br> <br> @SuppressWarnings("rawtypes")<br> public void bindActivityBehaviourService(ActivityBehavior delegate, Map props) {<br> String name = (String) props.get("osgi.service.blueprint.compname");<br> activityBehaviourMap.put(name, delegate);<br> LOGGER.info("added Activiti service to activity behaviour cache {}", name);<br> }<br><br> @SuppressWarnings("rawtypes")<br> public void unbindActivityBehaviourService(ActivityBehavior delegate, Map props) {<br> String name = (String) props.get("osgi.service.blueprint.compname");<br> if(activityBehaviourMap.containsKey(name)) {<br> activityBehaviourMap.remove(name);<br> }<br> LOGGER.info("removed Activiti service from activity behaviour cache {}", name);<br> }<br><br> public boolean isReadOnly(ELContext context, Object base, Object property) {<br> return true;<br> }<br><br> public void setValue(ELContext context, Object base, Object property,<br> Object value) {<br> }<br><br> public Class<?> getCommonPropertyType(ELContext context, Object arg) {<br> return Object.class;<br> }<br><br> public Iterator<FeatureDescriptor> getFeatureDescriptors(ELContext context,<br> Object arg) {<br> return null;<br> }<br><br> public Class<?> getType(ELContext context, Object arg1, Object arg2) {<br> return Object.class;<br> }<br>}<br>