package org.camunda.bpm.engine.test.needle;
import com.google.common.collect.Sets;
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.ProcessEngineServices;
import org.camunda.bpm.engine.RepositoryService;
import org.camunda.bpm.engine.RuntimeService;
import org.camunda.bpm.engine.TaskService;
import org.camunda.bpm.engine.impl.ProcessEngineImpl;
import org.camunda.bpm.engine.impl.interceptor.CommandExecutor;
import org.camunda.bpm.engine.test.function.GetProcessEngineConfiguration;
import org.needle4j.injection.InjectionProvider;
import org.needle4j.injection.InjectionProviderInstancesSupplier;
import java.util.Set;
import static com.google.common.base.Preconditions.checkArgument;
import static org.needle4j.injection.InjectionProviders.providerForInstance;
/**
* Supplier for camunda services. Holds processEngine internally and exposes all
* services via {@link InjectionProvider}.
*
* @author Jan Galinski, Holisticon AG
*/
public class CamundaInstancesSupplier implements InjectionProviderInstancesSupplier, ProcessEngineServices {
private final Set<InjectionProvider<?>> providers = Sets.newHashSet();
private final ProcessEngine processEngine;
public CamundaInstancesSupplier(final ProcessEngine processEngine) {
checkArgument(processEngine != null);
this.processEngine = processEngine;
providers.add(providerForInstance(processEngine));
providers.add(providerForInstance(getCommandExecutor()));
providers.add(providerForInstance(getProcessEngineConfiguration()));
providers.add(providerForInstance(getAuthorizationService()));
providers.add(providerForInstance(getCaseService()));
providers.add(providerForInstance(getDecisionService()));
providers.add(providerForInstance(getExternalTaskService()));
providers.add(providerForInstance(getFilterService()));
providers.add(providerForInstance(getFormService()));
providers.add(providerForInstance(getHistoryService()));
providers.add(providerForInstance(getIdentityService()));
providers.add(providerForInstance(getManagementService()));
providers.add(providerForInstance(getRepositoryService()));
providers.add(providerForInstance(getRuntimeService()));
providers.add(providerForInstance(getTaskService()));
}
@Override
public Set<InjectionProvider<?>> get() {
return providers;
}
@Override
public RepositoryService getRepositoryService() {
return processEngine.getRepositoryService();
}
@Override
public RuntimeService getRuntimeService() {
return processEngine.getRuntimeService();
}
@Override
public FormService getFormService() {
return processEngine.getFormService();
}
@Override
public TaskService getTaskService() {
return processEngine.getTaskService();
}
@Override
public HistoryService getHistoryService() {
return processEngine.getHistoryService();
}
@Override
public IdentityService getIdentityService() {
return processEngine.getIdentityService();
}
@Override
public ManagementService getManagementService() {
return processEngine.getManagementService();
}
@Override
public AuthorizationService getAuthorizationService() {
return processEngine.getAuthorizationService();
}
@Override
public CaseService getCaseService() {
return processEngine.getCaseService();
}
@Override
public FilterService getFilterService() {
return processEngine.getFilterService();
}
@Override
public ExternalTaskService getExternalTaskService() {
return processEngine.getExternalTaskService();
}
@Override
public DecisionService getDecisionService() {
return processEngine.getDecisionService();
}
/**
* @return the current configuration
*/
public ProcessEngineConfiguration getProcessEngineConfiguration() {
return GetProcessEngineConfiguration.INSTANCE.apply(processEngine);
}
/**
* @return current process engine
*/
public ProcessEngine getProcessEngine() {
return processEngine;
}
/**
* @return a command executor for the processEngine
*/
public CommandExecutor getCommandExecutor() {
return ((ProcessEngineImpl) getProcessEngine()).getProcessEngineConfiguration().getCommandExecutorSchemaOperations();
}
}