package com.sequenceiq.cloudbreak.cloud.task; import java.util.List; import javax.inject.Inject; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; import com.sequenceiq.cloudbreak.cloud.ResourceConnector; import com.sequenceiq.cloudbreak.cloud.context.AuthenticatedContext; import com.sequenceiq.cloudbreak.cloud.model.CloudResource; import com.sequenceiq.cloudbreak.cloud.model.CloudResourceStatus; import com.sequenceiq.cloudbreak.cloud.transform.ResourceStatusLists; @Component(PollResourcesStateTask.NAME) @Scope(value = "prototype") public class PollResourcesStateTask extends AbstractPollTask<ResourcesStatePollerResult> { public static final String NAME = "pollResourcesStateTask"; private List<CloudResource> cloudResource; private ResourceConnector resourceConnector; @Inject public PollResourcesStateTask(AuthenticatedContext authenticatedContext, ResourceConnector resourceConnector, List<CloudResource> cloudResource, boolean cancellable) { super(authenticatedContext, cancellable); this.cloudResource = cloudResource; this.resourceConnector = resourceConnector; } @Override public ResourcesStatePollerResult call() throws Exception { List<CloudResourceStatus> results = resourceConnector.check(getAuthenticatedContext(), cloudResource); CloudResourceStatus status = ResourceStatusLists.aggregate(results); return new ResourcesStatePollerResult(getAuthenticatedContext().getCloudContext(), status.getStatus(), status.getStatusReason(), results); } @Override public boolean completed(ResourcesStatePollerResult resourcesStatePollerResult) { return resourcesStatePollerResult.getStatus().isPermanent(); } }