package org.ovirt.engine.core.vdsbroker.vdsbroker; import java.util.List; import java.util.Map; import java.util.function.Function; import java.util.stream.Collectors; import org.ovirt.engine.core.common.businessentities.HostJobInfo; import org.ovirt.engine.core.common.businessentities.HostJobInfo.HostJobStatus; import org.ovirt.engine.core.common.businessentities.HostJobInfo.HostJobType; import org.ovirt.engine.core.common.errors.EngineError; import org.ovirt.engine.core.common.errors.VDSError; import org.ovirt.engine.core.common.vdscommands.GetHostJobsVDSCommandParameters; import org.ovirt.engine.core.compat.Guid; public class GetHostJobsVDSCommand<P extends GetHostJobsVDSCommandParameters> extends VdsBrokerCommand<P> { private HostJobsReturn jobResult; public GetHostJobsVDSCommand(P parameters) { super(parameters); } @Override protected void executeVdsBrokerCommand() { List<String> jobIds = getParameters().getJobIds() == null ? null : getParameters().getJobIds().stream().map(e -> e.toString()).collect(Collectors.toList()); jobResult = getBroker().getHostJobs(getParameters().getType().name(), jobIds); proceedProxyReturnValue(); setReturnValue(parseHostJobs(jobResult.getHostJobsInfo())); } private HostJobInfo parseJob(Map<String, Object> job) { Guid id = Guid.createGuidFromString((String) job.get(VdsProperties.jobId)); HostJobType type = HostJobType.valueOf((String) job.get(VdsProperties.jobType)); HostJobStatus status = HostJobStatus.valueOf((String) job.get(VdsProperties.jobStatus)); String description = (String) job.get(VdsProperties.jobDescription); Integer jobProgress = job.containsKey(VdsProperties.jobProgress) ? ((Double) job.get(VdsProperties.jobProgress)).intValue() : null; VDSError error = null; if (job.containsKey(VdsProperties.jobError)) { Map<String, Object> errorInfo = (Map<String, Object>) job.get(VdsProperties.jobError); Integer code = (Integer) errorInfo.get(VdsProperties.jobErrorCode); String message = (String) errorInfo.get(VdsProperties.jobErrorMessage); error = new VDSError(EngineError.forValue(code), message); } return new HostJobInfo(id, description, type, status, jobProgress, error); } public Map<Guid, HostJobInfo> parseHostJobs(Map<String, Object> jobsInfo) { return jobsInfo.values().stream() .map(x -> (Map<String, Object>) x) .map(this::parseJob) .collect(Collectors.toMap(HostJobInfo::getId, Function.identity())); } @Override protected Status getReturnStatus() { return jobResult.getStatus(); } @Override protected Object getReturnValueFromBroker() { return jobResult; } }