package com.sequenceiq.cloudbreak.cloud.template.task;
import java.util.List;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
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.task.AbstractPollTask;
import com.sequenceiq.cloudbreak.cloud.template.ResourceChecker;
import com.sequenceiq.cloudbreak.cloud.template.context.ResourceBuilderContext;
@Component(PollResourceTask.NAME)
@Scope(value = "prototype")
public class PollResourceTask extends AbstractPollTask<List<CloudResourceStatus>> {
public static final String NAME = "pollResourceTask";
private ResourceChecker checker;
private List<CloudResource> cloudResources;
private ResourceBuilderContext context;
public PollResourceTask(AuthenticatedContext authenticatedContext, ResourceChecker checker,
List<CloudResource> cloudResources, ResourceBuilderContext context, boolean cancellable) {
super(authenticatedContext, cancellable);
this.checker = checker;
this.cloudResources = cloudResources;
this.context = context;
}
@Override
public List<CloudResourceStatus> call() throws Exception {
return checker.checkResources(context, getAuthenticatedContext(), cloudResources);
}
@Override
public boolean completed(List<CloudResourceStatus> resourceStatuses) {
for (CloudResourceStatus resourceStatus : resourceStatuses) {
if (resourceStatus.getStatus().isTransient()) {
return false;
}
}
return true;
}
}