package org.ovirt.engine.api.restapi.resource; import java.util.ArrayList; import java.util.List; import javax.ws.rs.core.Response; import org.ovirt.engine.api.model.Host; import org.ovirt.engine.api.model.HostStorage; import org.ovirt.engine.api.model.LogicalUnit; import org.ovirt.engine.api.model.Storage; import org.ovirt.engine.api.resource.HostStorageResource; import org.ovirt.engine.api.resource.StorageResource; import org.ovirt.engine.core.common.businessentities.LUNs; import org.ovirt.engine.core.common.businessentities.StorageType; import org.ovirt.engine.core.common.businessentities.storage_domains; import org.ovirt.engine.core.common.businessentities.storage_server_connections; import org.ovirt.engine.core.common.queries.GetDeviceListQueryParameters; import org.ovirt.engine.core.common.queries.VdcQueryType; import org.ovirt.engine.core.common.queries.VdsIdParametersBase; public class BackendHostStorageResource extends AbstractBackendCollectionResource<Storage, LUNs> implements HostStorageResource { private String hostId; public BackendHostStorageResource(String hostId) { super(Storage.class, LUNs.class); this.hostId = hostId; } public HostStorage list() { HostStorage ret = new HostStorage(); for (LUNs lun : getLogicalUnits()) { Storage storage = map(lun); ArrayList<storage_server_connections> lunConnections = lun.getLunConnections(); if (lunConnections!=null && !lunConnections.isEmpty()) { getMapper(storage_server_connections.class, LogicalUnit.class).map(lunConnections.get(0), storage.getLogicalUnits().get(0)); } ret.getStorage().add(addLinks(storage)); } for (storage_domains vg : getVolumeGroups()) { ret.getStorage().add(addLinks(map(vg))); } return ret; } public StorageResource getStorageSubResource(String id) { return new BackendStorageResource(id, this); } protected Storage lookupStorage(String id) { for (LUNs lun : getLogicalUnits()) { if (lun.getLUN_id().equals(id)) { return addLinks(map(lun)); } } for (storage_domains vg : getVolumeGroups()) { if (vg.getstorage().equals(id)) { return addLinks(map(vg)); } } return notFound(); } protected List<LUNs> getLogicalUnits() { return getBackendCollection(VdcQueryType.GetDeviceList, new GetDeviceListQueryParameters(asGuid(hostId), StorageType.UNKNOWN)); } protected List<storage_domains> getVolumeGroups() { return getBackendCollection(storage_domains.class, VdcQueryType.GetVgList, new VdsIdParametersBase(asGuid(hostId))); } protected Storage map(storage_domains entity) { return getMapper(storage_domains.class, Storage.class).map(entity, null); } @Override protected Storage addParents(Storage storage) { storage.setHost(new Host()); storage.getHost().setId(hostId); return storage; } @Override protected Response performRemove(String id) { throw new UnsupportedOperationException(); } }