package org.camunda.bpm.engine.test.function;
import org.camunda.bpm.engine.ProcessEngine;
import org.camunda.bpm.engine.ProcessEngineConfiguration;
import org.camunda.bpm.engine.ProcessEngineDelegate;
import org.camunda.bpm.engine.test.cfg.MostUsefulProcessEngineConfiguration;
import com.google.common.base.Supplier;
/**
* Creates a new ProcessEngineConfiguration based on camunda.cfg.xml. Falls back
* to activiti.cfg.xml for compatibility reasons. If no cfg.xml files can be
* found, a MostUsefulProcessEngineConfiguration is created.
*
* @author Jan Galinski, Holisticon AG
*/
public enum CreateConfigurationFromResource implements Supplier<ProcessEngineConfiguration> {
INSTANCE;
/**
* Creates a new ProcessEngineConfiguration from source. Returns null if
* config can not be created (file does not exist).
*/
private static class ConfigurationSupplier implements Supplier<ProcessEngineConfiguration> {
private final String cfgXmlFilename;
private ConfigurationSupplier(String cfgXmlFilename) {
this.cfgXmlFilename = cfgXmlFilename;
}
@Override
public ProcessEngineConfiguration get() {
try {
return ProcessEngineConfiguration.createProcessEngineConfigurationFromResource(cfgXmlFilename);
} catch (Exception e) {
return null;
}
}
}
private final Supplier<ProcessEngineConfiguration> camundaCfgXmlSupplier = new ConfigurationSupplier("camunda.cfg.xml");
private final Supplier<ProcessEngineConfiguration> activitiCfgXmlSupplier = new ConfigurationSupplier("activiti.cfg.xml");
@Override
public ProcessEngineConfiguration get() {
ProcessEngineConfiguration configuration = camundaCfgXmlSupplier.get();
if (configuration == null) {
configuration = activitiCfgXmlSupplier.get();
}
if (configuration == null) {
configuration = MostUsefulProcessEngineConfiguration.SUPPLIER.get();
}
return configuration;
}
public ProcessEngine buildProcessEngine() {
return get().buildProcessEngine();
}
public ProcessEngineDelegate createProcessEngineDelegate(boolean eager) {
return new ProcessEngineDelegate(get(), eager);
}
}