package org.ovirt.engine.core.vdsbroker.irsbroker; import java.util.Date; import org.ovirt.engine.core.common.businessentities.DiskImage; import org.ovirt.engine.core.common.businessentities.ImageStatus; import org.ovirt.engine.core.common.errors.VdcBllErrors; import org.ovirt.engine.core.common.utils.EnumUtils; import org.ovirt.engine.core.common.vdscommands.GetImageInfoVDSCommandParameters; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.compat.LogCompat; import org.ovirt.engine.core.compat.LogFactoryCompat; import org.ovirt.engine.core.dal.dbbroker.DbFacade; import org.ovirt.engine.core.vdsbroker.vdsbroker.StatusForXmlRpc; import org.ovirt.engine.core.vdsbroker.xmlrpc.XmlRpcStruct; public class GetImageInfoVDSCommand<P extends GetImageInfoVDSCommandParameters> extends IrsBrokerCommand<P> { protected OneImageInfoReturnForXmlRpc imageInfoReturn; @Override protected Object getReturnValueFromBroker() { return imageInfoReturn; } public GetImageInfoVDSCommand(P parameters) { super(parameters); } @Override protected void ExecuteIrsBrokerCommand() { imageInfoReturn = getIrsProxy().getVolumeInfo(getParameters().getStorageDomainId().toString(), getParameters().getStoragePoolId().toString(), getParameters().getImageGroupId().toString(), getParameters().getImageId().toString()); DiskImage di = null; try { ProceedProxyReturnValue(); di = buildImageEntity(imageInfoReturn.mInfo); } catch (java.lang.Exception e) { PrintReturnValue(); // nothing to do - logging inside upper functions } finally { // if couldn't parse image then succeeded should be false getVDSReturnValue().setSucceeded((di != null)); setReturnValue(di); } } @Override protected StatusForXmlRpc getReturnStatus() { return imageInfoReturn.mStatus; } @Override protected void ProceedProxyReturnValue() { VdcBllErrors returnStatus = GetReturnValueFromStatus(getReturnStatus()); if (returnStatus != VdcBllErrors.Done) { log.errorFormat( "IrsBroker::getImageInfo::Failed getting image info imageId = {0} does not exist on domainName = {1} , domainId = {2}, error code: {3}, message: {4}", getParameters().getImageId().toString(), DbFacade.getInstance().getStorageDomainStaticDAO() .get(getParameters().getStorageDomainId()) .getstorage_name(), getParameters() .getStorageDomainId().toString(), returnStatus .toString(), imageInfoReturn.mStatus.mMessage); throw new IRSErrorException(returnStatus.toString()); } } /** * <exception>VdcDAL.IrsBrokerIRSErrorException. */ public DiskImage buildImageEntity(XmlRpcStruct xmlRpcStruct) { DiskImage newImage = new DiskImage(); try { newImage.setId(new Guid((String) xmlRpcStruct.getItem(IrsProperties.uuid))); if (xmlRpcStruct.getItem(IrsProperties.children).getClass().getName().equals("String[]")) { String[] childrenIdList = (String[]) xmlRpcStruct.getItem(IrsProperties.children); newImage.setchildrenId(convertStringGuidArray(childrenIdList)); } newImage.setParentId(new Guid((String) xmlRpcStruct.getItem(IrsProperties.parent))); newImage.setdescription((String) xmlRpcStruct.getItem(IrsProperties.description)); newImage.setimageStatus(EnumUtils.valueOf(ImageStatus.class, (String) xmlRpcStruct.getItem(IrsProperties.ImageStatus), true)); if (xmlRpcStruct.contains(IrsProperties.size)) { newImage.setsize(Long.parseLong(xmlRpcStruct.getItem(IrsProperties.size).toString()) * 512); } if (xmlRpcStruct.contains("apparentsize")) { newImage.setactual_size(Long.parseLong(xmlRpcStruct.getItem("apparentsize").toString()) * 512); } if (xmlRpcStruct.contains("capacity")) { newImage.setsize(Long.parseLong(xmlRpcStruct.getItem("capacity").toString())); } if (xmlRpcStruct.contains("truesize")) { newImage.setactual_size(Long.parseLong(xmlRpcStruct.getItem("truesize").toString())); } if (xmlRpcStruct.contains("ctime")) { long secsSinceEpoch = Long.parseLong(xmlRpcStruct.getItem("ctime").toString()); newImage.setcreation_date(MakeDTFromCTime(secsSinceEpoch)); } if (xmlRpcStruct.contains("mtime")) { long secsSinceEpoch = Long.parseLong(xmlRpcStruct.getItem("mtime").toString()); newImage.setlast_modified_date(MakeDTFromCTime(secsSinceEpoch)); } if (xmlRpcStruct.contains("domain")) { newImage.setstorage_id(new Guid(xmlRpcStruct.getItem("domain").toString())); } if (xmlRpcStruct.contains("image")) { newImage.setimage_group_id(new Guid(xmlRpcStruct.getItem("image").toString())); } } catch (RuntimeException ex) { log.errorFormat("irsBroker::buildImageEntity::Failed building DIskImage"); PrintReturnValue(); log.error(ex.getMessage(), ex); newImage = null; } return newImage; } private static java.util.Date MakeDTFromCTime(long ctime) { return new Date(ctime * 1000L); } private static LogCompat log = LogFactoryCompat.getLog(GetImageInfoVDSCommand.class); }