package org.ovirt.engine.api.restapi.resource;
import java.util.List;
import javax.ws.rs.core.Response;
import org.ovirt.engine.api.model.BaseResource;
import org.ovirt.engine.api.model.Job;
import org.ovirt.engine.api.model.Step;
import org.ovirt.engine.api.model.Steps;
import org.ovirt.engine.api.resource.StepResource;
import org.ovirt.engine.api.resource.StepsResource;
import org.ovirt.engine.api.restapi.types.StepMapper;
import org.ovirt.engine.core.common.action.AddExternalStepParameters;
import org.ovirt.engine.core.common.action.VdcActionType;
import org.ovirt.engine.core.common.queries.GetStepsWithSubjectEntitiesByJobIdQueryParameters;
import org.ovirt.engine.core.common.queries.IdQueryParameters;
import org.ovirt.engine.core.common.queries.VdcQueryType;
import org.ovirt.engine.core.compat.Guid;
public class BackendStepsResource extends AbstractBackendCollectionResource<Step, org.ovirt.engine.core.common.job.Step> implements StepsResource {
private Guid jobId;
public BackendStepsResource(Guid jobId) {
super(Step.class, org.ovirt.engine.core.common.job.Step.class);
this.jobId = jobId;
}
@Override
public Steps list() {
GetStepsWithSubjectEntitiesByJobIdQueryParameters params = new GetStepsWithSubjectEntitiesByJobIdQueryParameters(jobId);
List<org.ovirt.engine.core.common.job.Step> steps = getBackendCollection(VdcQueryType.GetStepsWithSubjectEntitiesByJobId, params);
return mapCollection(steps);
}
@Override
public Response add(Step step) {
validateParameters(step, "type", "description");
String id;
if (step.isSetParentStep()) {
validateParameters(step, "parentStep.id");
id = step.getParentStep().getId();
}
else {
id = jobId.toString();
}
return performCreate(VdcActionType.AddExternalStep,
new AddExternalStepParameters(asGuid(id), step.getDescription(), StepMapper.map(step.getType())),
new QueryIdResolver<Guid>(VdcQueryType.GetStepWithSubjectEntitiesByStepId, IdQueryParameters.class));
}
@Override
public StepResource getStepResource(String id) {
return inject(new BackendStepResource(id, this));
}
protected Steps mapCollection(List<org.ovirt.engine.core.common.job.Step> entities) {
Steps collection = new Steps();
for (org.ovirt.engine.core.common.job.Step entity : entities) {
collection.getSteps().add(injectParent(addLinks(map(entity))));
}
return collection;
}
public Step injectParent(Step step) {
if (step.getParentStep() !=null) {
step.getParentStep()
.setHref(step.getHref()
.replace(step.getId(), step.getParentStep().getId()));
}
return step;
}
@Override
protected Step addParents(Step model) {
model.setJob(new Job());
model.getJob().setId(jobId.toString());
return model;
}
@Override
protected Step addLinks(Step model,
Class<? extends BaseResource> suggestedParent,
String... subCollectionMembersToExclude) {
Step linked = super.addLinks(model, suggestedParent, subCollectionMembersToExclude);
return injectParent(linked);
}
}