package org.camunda.bpm.engine.test; import org.camunda.bpm.engine.AuthorizationService; import org.camunda.bpm.engine.CaseService; import org.camunda.bpm.engine.DecisionService; import org.camunda.bpm.engine.ExternalTaskService; import org.camunda.bpm.engine.FilterService; import org.camunda.bpm.engine.FormService; import org.camunda.bpm.engine.HistoryService; import org.camunda.bpm.engine.IdentityService; import org.camunda.bpm.engine.ManagementService; import org.camunda.bpm.engine.ProcessEngine; import org.camunda.bpm.engine.ProcessEngineConfiguration; import org.camunda.bpm.engine.ProcessEngineDelegate; import org.camunda.bpm.engine.ProcessEngineServices; import org.camunda.bpm.engine.RepositoryService; import org.camunda.bpm.engine.RuntimeService; import org.camunda.bpm.engine.TaskService; import org.junit.rules.ExternalResource; /** * JUnit {@link org.junit.rules.ExternalResource} that provides process engine * services. * <p/> * Can be initialized in three ways: * <ol> * <li><b>Lazy</b> with a ProcessEngineConfiguration, the engine is created when * the test is started. Before the test is started, access to any of the * services results in an IllegalStateException.</li> * <li><b>Eager</b> with a ProcessEngineConfiguration, the engine is initialized * immediately</li> * <li><b>Delegate</b> processEngine is initialized externally and just * decorated by the resource. Useful when chaining rules.</li> * </ol> */ public class ProcessEngineExternalResource extends ExternalResource implements ProcessEngineServices { protected final ProcessEngineDelegate delegate; public ProcessEngineExternalResource(final ProcessEngineDelegate delegate) { this.delegate = delegate; } public ProcessEngineExternalResource(final ProcessEngineConfiguration processEngineConfiguration) { this(new ProcessEngineDelegate(processEngineConfiguration)); } public ProcessEngineExternalResource(final ProcessEngineConfiguration processEngineConfiguration, boolean initialize) { this(new ProcessEngineDelegate(processEngineConfiguration, initialize)); } /** * @param processEngine the internally wrapped process engine */ public ProcessEngineExternalResource(final ProcessEngine processEngine) { this(new ProcessEngineDelegate(processEngine)); } @Override protected void before() throws Throwable { super.before(); delegate.initProcessEngine(); } @Override protected void after() { super.after(); delegate.closeProcessEngine(); } /** * @return the internally wrapped engine. */ public ProcessEngine getProcessEngine() { return delegate.getProcessEngine(); } @Override public RepositoryService getRepositoryService() { return delegate.getRepositoryService(); } @Override public RuntimeService getRuntimeService() { return delegate.getRuntimeService(); } @Override public FormService getFormService() { return delegate.getFormService(); } @Override public TaskService getTaskService() { return delegate.getTaskService(); } @Override public HistoryService getHistoryService() { return delegate.getHistoryService(); } @Override public IdentityService getIdentityService() { return delegate.getIdentityService(); } @Override public ManagementService getManagementService() { return delegate.getManagementService(); } @Override public AuthorizationService getAuthorizationService() { return delegate.getAuthorizationService(); } @Override public CaseService getCaseService() { return delegate.getCaseService(); } @Override public FilterService getFilterService() { return delegate.getFilterService(); } @Override public ExternalTaskService getExternalTaskService() { return delegate.getExternalTaskService(); } @Override public DecisionService getDecisionService() { return delegate.getDecisionService(); } protected ProcessEngineDelegate getProcessEngineDelegate() { return delegate; } }