package org.ovirt.engine.api.restapi.util;
import java.util.List;
import org.apache.commons.collections.CollectionUtils;
import org.ovirt.engine.api.model.DataCenter;
import org.ovirt.engine.api.model.DataCenters;
import org.ovirt.engine.api.model.StorageDomain;
import org.ovirt.engine.api.restapi.resource.BackendResource;
import org.ovirt.engine.core.common.businessentities.StorageServerConnections;
import org.ovirt.engine.core.common.businessentities.storage.StorageType;
import org.ovirt.engine.core.common.queries.IdQueryParameters;
import org.ovirt.engine.core.common.queries.VdcQueryReturnValue;
import org.ovirt.engine.core.common.queries.VdcQueryType;
import org.ovirt.engine.core.compat.Guid;
public class StorageDomainHelper {
public static StorageServerConnections getConnection(StorageType storageType, String address, String target, String userName, String password, Integer port) {
return new StorageServerConnections(address,
null,
target,
password,
storageType,
userName,
port == null ? null : Integer.toString(port),
StorageServerConnections.DEFAULT_TPGT);
}
/**
* Adds to the given Storage Domain the references to the Data Centers it is attached to.
*
* @param resource the resource that will be used to run the required queries
* @param model the model of the Storage Domain where the references will be added
*/
public static void addAttachedDataCenterReferences(BackendResource resource, StorageDomain model) {
// Note that this implementation is far from efficient, as we are retrieving all the content of the Storage
// Domains and immediately discarding everything but the identifiers of the Data Centers. It would be better to
// have a query that returns only the identifiers.
Guid id = Guid.createGuidFromString(model.getId());
VdcQueryReturnValue result = resource.runQuery(VdcQueryType.GetStorageDomainListById, new IdQueryParameters(id));
if (result != null && result.getSucceeded()) {
List<org.ovirt.engine.core.common.businessentities.StorageDomain> storageDomains = result.getReturnValue();
if (CollectionUtils.isNotEmpty(storageDomains)) {
DataCenters dataCenters = new DataCenters();
for (org.ovirt.engine.core.common.businessentities.StorageDomain storageDomain : storageDomains) {
DataCenter dataCenter = new DataCenter();
dataCenter.setId(storageDomain.getStoragePoolId().toString());
dataCenters.getDataCenters().add(dataCenter);
}
model.setDataCenters(dataCenters);
}
}
}
}