package com.sequenceiq.cloudbreak.cloud.template.task;
import java.util.List;
import javax.inject.Inject;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Component;
import com.sequenceiq.cloudbreak.cloud.context.AuthenticatedContext;
import com.sequenceiq.cloudbreak.cloud.model.CloudInstance;
import com.sequenceiq.cloudbreak.cloud.model.CloudResource;
import com.sequenceiq.cloudbreak.cloud.model.CloudResourceStatus;
import com.sequenceiq.cloudbreak.cloud.model.CloudVmInstanceStatus;
import com.sequenceiq.cloudbreak.cloud.task.PollTask;
import com.sequenceiq.cloudbreak.cloud.template.ComputeResourceBuilder;
import com.sequenceiq.cloudbreak.cloud.template.ResourceChecker;
import com.sequenceiq.cloudbreak.cloud.template.context.ResourceBuilderContext;
@Component
public class ResourcePollTaskFactory {
@Inject
private ApplicationContext applicationContext;
public PollTask<List<CloudResourceStatus>> newPollResourceTask(ResourceChecker checker, AuthenticatedContext authenticatedContext,
List<CloudResource> cloudResource, ResourceBuilderContext context, boolean cancellable) {
return createPollTask(PollResourceTask.NAME, authenticatedContext, checker, cloudResource, context, cancellable);
}
public PollTask<List<CloudVmInstanceStatus>> newPollComputeStatusTask(ComputeResourceBuilder builder, AuthenticatedContext authenticatedContext,
ResourceBuilderContext context, CloudInstance instance) {
return createPollTask(PollComputeStatusTask.NAME, authenticatedContext, builder, context, instance);
}
@SuppressWarnings("unchecked")
private <T> T createPollTask(String name, Object... args) {
return (T) applicationContext.getBean(name, args);
}
}