package org.ovirt.engine.core.vdsbroker.vdsbroker; import java.util.List; import org.ovirt.engine.core.common.businessentities.SANState; import org.ovirt.engine.core.common.businessentities.StorageDomainType; import org.ovirt.engine.core.common.businessentities.StorageFormatType; import org.ovirt.engine.core.common.businessentities.StorageType; import org.ovirt.engine.core.common.businessentities.storage_domain_static; import org.ovirt.engine.core.common.businessentities.storage_server_connections; import org.ovirt.engine.core.common.utils.EnumUtils; import org.ovirt.engine.core.common.vdscommands.HSMGetStorageDomainInfoVDSCommandParameters; import org.ovirt.engine.core.compat.LogCompat; import org.ovirt.engine.core.compat.LogFactoryCompat; import org.ovirt.engine.core.compat.StringHelper; import org.ovirt.engine.core.dal.dbbroker.DbFacade; import org.ovirt.engine.core.utils.Pair; import org.ovirt.engine.core.vdsbroker.irsbroker.IRSErrorException; import org.ovirt.engine.core.vdsbroker.xmlrpc.XmlRpcStruct; public class HSMGetStorageDomainInfoVDSCommand<P extends HSMGetStorageDomainInfoVDSCommandParameters> extends VdsBrokerCommand<P> { public HSMGetStorageDomainInfoVDSCommand(P parameters) { super(parameters); } private OneStorageDomainInfoReturnForXmlRpc _result; @Override protected void ExecuteVdsBrokerCommand() { _result = getBroker().getStorageDomainInfo(getParameters().getStorageDomainId().toString()); ProceedProxyReturnValue(); Pair<storage_domain_static, SANState> pairSdStatic = BuildStorageStaticFromXmlRpcStruct(_result.mStorageInfo); pairSdStatic.getFirst().setId(getParameters().getStorageDomainId()); setReturnValue(pairSdStatic); } private Pair<storage_domain_static, SANState> BuildStorageStaticFromXmlRpcStruct(XmlRpcStruct xmlRpcStruct) { try { Pair<storage_domain_static, SANState> returnValue = new Pair<storage_domain_static, SANState>(); storage_domain_static sdStatic = new storage_domain_static(); if (xmlRpcStruct.contains("name")) { sdStatic.setstorage_name(xmlRpcStruct.getItem("name").toString()); } if (xmlRpcStruct.contains("type")) { sdStatic.setstorage_type(EnumUtils.valueOf(StorageType.class, xmlRpcStruct.getItem("type").toString(), true)); } if (xmlRpcStruct.contains("class")) { String domainType = xmlRpcStruct.getItem("class").toString(); if (StringHelper.EqOp(domainType.toLowerCase(), "backup")) { sdStatic.setstorage_domain_type(StorageDomainType.ImportExport); } else { sdStatic.setstorage_domain_type(EnumUtils.valueOf(StorageDomainType.class, domainType, true)); } } if (xmlRpcStruct.contains("version")) { sdStatic.setStorageFormat( StorageFormatType.forValue(xmlRpcStruct.getItem("version").toString())); } if (sdStatic.getstorage_type() != StorageType.UNKNOWN) { if (sdStatic.getstorage_type() == StorageType.NFS && xmlRpcStruct.contains("remotePath")) { String path = xmlRpcStruct.getItem("remotePath").toString(); List<storage_server_connections> connections = DbFacade.getInstance() .getStorageServerConnectionDAO().getAllForStorage(path); if (connections.isEmpty()) { sdStatic.setConnection(new storage_server_connections()); sdStatic.getConnection().setconnection(path); sdStatic.getConnection().setstorage_type(StorageType.NFS); } else { sdStatic.setstorage(connections.get(0).getid()); sdStatic.setConnection(connections.get(0)); } } else if (sdStatic.getstorage_type() != StorageType.NFS && (xmlRpcStruct.contains("vguuid"))) { sdStatic.setstorage(xmlRpcStruct.getItem("vguuid").toString()); } } if (xmlRpcStruct.contains("state")) { returnValue.setSecond(EnumUtils.valueOf(SANState.class, xmlRpcStruct.getItem("state") .toString() .toUpperCase(), false)); } returnValue.setFirst(sdStatic); return returnValue; } catch (RuntimeException ex) { log.errorFormat( "vdsBroker::BuildStorageStaticFromXmlRpcStruct::Failed building Storage static, xmlRpcStruct = {0}", xmlRpcStruct.toString()); IRSErrorException outEx = new IRSErrorException(ex); log.error(outEx); if (log.isDebugEnabled()) { log.debug("vdsBroker::BuildStorageStaticFromXmlRpcStruct::Failed building Storage static stack:" + ex.getStackTrace(), ex); } throw outEx; } } @Override protected StatusForXmlRpc getReturnStatus() { return _result.mStatus; } @Override protected Object getReturnValueFromBroker() { return _result; } private static LogCompat log = LogFactoryCompat.getLog(HSMGetStorageDomainInfoVDSCommand.class); }