package org.ovirt.engine.core.vdsbroker.vdsbroker;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import org.ovirt.engine.core.common.businessentities.SANState;
import org.ovirt.engine.core.common.businessentities.StorageDomainStatic;
import org.ovirt.engine.core.common.businessentities.StorageDomainType;
import org.ovirt.engine.core.common.businessentities.StorageFormatType;
import org.ovirt.engine.core.common.businessentities.StorageServerConnections;
import org.ovirt.engine.core.common.businessentities.storage.StorageType;
import org.ovirt.engine.core.common.utils.EnumUtils;
import org.ovirt.engine.core.common.utils.Pair;
import org.ovirt.engine.core.common.vdscommands.HSMGetStorageDomainInfoVDSCommandParameters;
import org.ovirt.engine.core.compat.Guid;
import org.ovirt.engine.core.dal.dbbroker.DbFacade;
public class HSMGetStorageDomainInfoVDSCommand<P extends HSMGetStorageDomainInfoVDSCommandParameters>
extends VdsBrokerCommand<P> {
public HSMGetStorageDomainInfoVDSCommand(P parameters) {
super(parameters);
}
private OneStorageDomainInfoReturn result;
@Override
protected void executeVdsBrokerCommand() {
result = getBroker().getStorageDomainInfo(getParameters().getStorageDomainId().toString());
proceedProxyReturnValue();
Pair<StorageDomainStatic, Guid> pairSdStatic = buildStorageStaticFromStruct(result.storageInfo);
pairSdStatic.getFirst().setId(getParameters().getStorageDomainId());
setReturnValue(pairSdStatic);
}
private static Pair<StorageDomainStatic, Guid> buildStorageStaticFromStruct(Map<String, Object> struct) {
Pair<StorageDomainStatic, Guid> returnValue = new Pair<>();
StorageDomainStatic sdStatic = new StorageDomainStatic();
if (struct.containsKey("name")) {
sdStatic.setStorageName(struct.get("name").toString());
}
if (struct.containsKey("type")) {
sdStatic.setStorageType(EnumUtils.valueOf(StorageType.class, struct.get("type").toString(),
true));
}
if (struct.containsKey("class")) {
String domainType = struct.get("class").toString();
if ("backup".equalsIgnoreCase(domainType)) {
sdStatic.setStorageDomainType(StorageDomainType.ImportExport);
} else {
sdStatic.setStorageDomainType(EnumUtils.valueOf(StorageDomainType.class, domainType, true));
}
}
if (struct.containsKey("version")) {
sdStatic.setStorageFormat(
StorageFormatType.forValue(struct.get("version").toString()));
}
if (sdStatic.getStorageType() != StorageType.UNKNOWN) {
if (sdStatic.getStorageType().isFileDomain() && struct.containsKey("remotePath")) {
String path = struct.get("remotePath").toString();
List<StorageServerConnections> connections = DbFacade.getInstance()
.getStorageServerConnectionDao().getAllForStorage(path);
if (connections.isEmpty()) {
sdStatic.setConnection(new StorageServerConnections());
sdStatic.getConnection().setConnection(path);
sdStatic.getConnection().setStorageType(sdStatic.getStorageType());
} else {
sdStatic.setStorage(connections.get(0).getId());
sdStatic.setConnection(connections.get(0));
}
} else if (sdStatic.getStorageType() != StorageType.NFS) {
if (struct.containsKey("vguuid")) {
sdStatic.setStorage(struct.get("vguuid").toString());
}
if (struct.containsKey("metadataDevice")) {
sdStatic.setFirstMetadataDevice(Objects.toString(struct.get("metadataDevice")));
}
if (struct.containsKey("vgMetadataDevice")) {
sdStatic.setVgMetadataDevice(Objects.toString(struct.get("vgMetadataDevice")));
}
}
}
if (struct.containsKey("state")) {
sdStatic.setSanState(EnumUtils.valueOf(SANState.class, struct.get("state")
.toString()
.toUpperCase(),
false));
}
returnValue.setFirst(sdStatic);
Object[] poolUUIDs = (Object[])struct.get("pool");
if (poolUUIDs.length != 0) {
returnValue.setSecond(Guid.createGuidFromString(poolUUIDs[0].toString()));
}
return returnValue;
}
@Override
protected Status getReturnStatus() {
return result.getStatus();
}
@Override
protected Object getReturnValueFromBroker() {
return result;
}
}