package org.ovirt.engine.core.vdsbroker.irsbroker; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.commons.lang.StringUtils; import org.ovirt.engine.core.common.errors.EngineError; import org.ovirt.engine.core.common.vdscommands.UpdateVMVDSCommandParameters; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.compat.KeyValuePairCompat; import org.ovirt.engine.core.vdsbroker.vdsbroker.VDSExceptionBase; public class UpdateVMVDSCommand<P extends UpdateVMVDSCommandParameters> extends IrsBrokerCommand<P> { public UpdateVMVDSCommand(P parameters) { super(parameters); } @Override protected void executeIrsBrokerCommand() { Map[] vms = buildVmsStuctListFromParameters(); if (getParameters().getStorageDomainId().equals(Guid.Empty)) { status = getIrsProxy().updateVM(getParameters().getStoragePoolId().toString(), vms); } else { status = getIrsProxy().updateVMInImportExport(getParameters().getStoragePoolId().toString(), vms, getParameters().getStorageDomainId().toString()); } proceedProxyReturnValue(); } private Map[] buildVmsStuctListFromParameters() { // ("vm":vmGUID, "ovf":metaOVF, "imglist":imgList) Map[] result = new Map[getParameters().getInfoDictionary().entrySet().size()]; int counter = 0; for (Map.Entry<Guid, KeyValuePairCompat<String, List<Guid>>> data : getParameters().getInfoDictionary() .entrySet()) { Map vmToSend = new HashMap(); vmToSend.put("vm", data.getKey().toString()); vmToSend.put("ovf", data.getValue().getKey()); List<Guid> imagesGuidList = data.getValue().getValue(); String[] imageList = new String[imagesGuidList.size()]; for (int i = 0; i < imagesGuidList.size(); i++) { imageList[i] = imagesGuidList.get(i).toString(); } vmToSend.put("imglist", StringUtils.join(imageList, ',')); result[counter] = vmToSend; counter++; } return result; } @Override protected void proceedProxyReturnValue() { EngineError returnStatus = getReturnValueFromStatus(getReturnStatus()); switch (returnStatus) { case Done: return; default: VDSExceptionBase outEx = createDefaultConcreteException(getReturnStatus().message); initializeVdsError(returnStatus); outEx.setVdsError(getVDSReturnValue().getVdsError()); throw outEx; } } @Override protected VDSExceptionBase createDefaultConcreteException(String errorMessage) { return new IrsOperationFailedNoFailoverException(errorMessage); } }