package net.conselldemallorca.helium.jbpm3.spring;
import org.jbpm.configuration.ObjectFactory;
import org.jbpm.configuration.ObjectFactoryParser;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
/**
* Implementation of a jBPM objectfatory.
* First, the Spring container is used to retrieve a certain bean.
* If not found in the Spring container, the default jBPM object factory is consulted.
*
* @author Joram Barrez
*/
@SuppressWarnings("serial")
public class SpringObjectFactory implements ObjectFactory, ApplicationContextAware {
/** Spring container */
private ApplicationContext applicationContext;
/** Default jBPM object factory */
private ObjectFactory jbpmObjectFactory;
public SpringObjectFactory(String jbpmConfigFile) {
this.jbpmObjectFactory = ObjectFactoryParser.parseResource(jbpmConfigFile);
}
public Object createObject(String objectName) {
if (applicationContext.containsBean(objectName)) {
return applicationContext.getBean(objectName);
} else if (jbpmObjectFactory.hasObject(objectName)) {
return jbpmObjectFactory.createObject(objectName);
} else {
return null;
}
}
public boolean hasObject(String objectName) {
return applicationContext.containsBean(objectName) || jbpmObjectFactory.hasObject(objectName);
}
public void setApplicationContext(ApplicationContext applicationContext) {
this.applicationContext = applicationContext;
}
}