package org.camunda.bpm.engine; import static com.google.common.base.Preconditions.checkState; import org.camunda.bpm.engine.test.function.GetProcessEngineConfiguration; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * Holds a process engine delegate and provides process engine services. * * @author Jan Galinski, Holisticon AG */ public class ProcessEngineDelegate implements ProcessEngineServices { private final Logger logger = LoggerFactory.getLogger(getClass()); private ProcessEngine processEngine; private ProcessEngineConfiguration processEngineConfiguration; public ProcessEngineDelegate(ProcessEngineConfiguration processEngineConfiguration) { this(processEngineConfiguration, false); } public ProcessEngineDelegate(ProcessEngineConfiguration processEngineConfiguration, boolean eagerInitialization) { this(null, processEngineConfiguration, eagerInitialization); } public ProcessEngineDelegate(ProcessEngine processEngine) { this(processEngine, null, false); } private ProcessEngineDelegate(ProcessEngine processEngine, ProcessEngineConfiguration processEngineConfiguration, boolean eagerInitialization) { if (processEngine != null) { this.processEngine = processEngine; this.processEngineConfiguration = GetProcessEngineConfiguration.INSTANCE.apply(processEngine); return; } else if (processEngineConfiguration != null) { this.processEngineConfiguration = processEngineConfiguration; if (eagerInitialization) { initProcessEngine(); } return; } throw new IllegalArgumentException("either processEngine or processEngineConfiguration must be provided for creation!"); } public ProcessEngine initProcessEngine() { if (isInitialized()) { logger.info("process engine is already initialized, skipping creation."); return null; } return processEngine = processEngineConfiguration.buildProcessEngine(); } public void closeProcessEngine() { assertProcessEngineInitialized(); processEngine.close(); this.processEngine = null; } @Override public RepositoryService getRepositoryService() { assertProcessEngineInitialized(); return processEngine.getRepositoryService(); } @Override public RuntimeService getRuntimeService() { assertProcessEngineInitialized(); return processEngine.getRuntimeService(); } @Override public FormService getFormService() { assertProcessEngineInitialized(); return processEngine.getFormService(); } @Override public TaskService getTaskService() { assertProcessEngineInitialized(); return processEngine.getTaskService(); } @Override public HistoryService getHistoryService() { assertProcessEngineInitialized(); return processEngine.getHistoryService(); } @Override public IdentityService getIdentityService() { assertProcessEngineInitialized(); return processEngine.getIdentityService(); } @Override public ManagementService getManagementService() { assertProcessEngineInitialized(); return processEngine.getManagementService(); } @Override public AuthorizationService getAuthorizationService() { assertProcessEngineInitialized(); return processEngine.getAuthorizationService(); } @Override public CaseService getCaseService() { assertProcessEngineInitialized(); return processEngine.getCaseService(); } @Override public FilterService getFilterService() { assertProcessEngineInitialized(); return processEngine.getFilterService(); } @Override public ExternalTaskService getExternalTaskService() { assertProcessEngineInitialized(); return processEngine.getExternalTaskService(); } @Override public DecisionService getDecisionService() { assertProcessEngineInitialized(); return processEngine.getDecisionService(); } /** * @return <code>true</code> if the inner process engine is not * <code>null</code>, else <code>false</code>. */ boolean isInitialized() { return processEngine != null; } /** * @throws java.lang.IllegalStateException when inner processEngine was not initialized. */ private void assertProcessEngineInitialized() { checkState(isInitialized(), "processEngine has not been initialized."); } public ProcessEngine getProcessEngine() { return processEngine; } }