package org.ovirt.engine.core.bll.storage.disk.image;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.inject.Inject;
import org.ovirt.engine.core.bll.QueriesCommandBase;
import org.ovirt.engine.core.bll.context.EngineContext;
import org.ovirt.engine.core.common.businessentities.StorageDomain;
import org.ovirt.engine.core.common.businessentities.storage.DiskImage;
import org.ovirt.engine.core.common.queries.IdQueryParameters;
import org.ovirt.engine.core.compat.Guid;
import org.ovirt.engine.core.dao.DiskImageDao;
import org.ovirt.engine.core.dao.StorageDomainDao;
public class GetAllDisksByStorageDomainIdQuery<P extends IdQueryParameters> extends QueriesCommandBase<P> {
@Inject
private StorageDomainDao storageDomainDao;
@Inject
private DiskImageDao diskImageDao;
public GetAllDisksByStorageDomainIdQuery(P parameters) {
super(parameters);
}
public GetAllDisksByStorageDomainIdQuery(P parameters, EngineContext engineContext) {
super(parameters, engineContext);
}
@Override
protected void executeQueryCommand() {
StorageDomain storageDomain = storageDomainDao.get(getParameters().getId());
if (storageDomain.getStorageType().isCinderDomain()) {
List<DiskImage> diskImages = diskImageDao.getAllForStorageDomain(getParameters().getId());
getQueryReturnValue().setReturnValue(diskImages);
} else {
List<DiskImage> diskImages = diskImageDao.getAllSnapshotsForStorageDomain(getParameters().getId());
Map<Guid, DiskImage> diskImagesMap = new HashMap<>();
// Get active diskImages
for (DiskImage diskImage : diskImages) {
if (diskImage.getActive()) {
diskImage.getSnapshots().add(DiskImage.copyOf(diskImage));
diskImagesMap.put(diskImage.getId(), diskImage);
}
}
// Update diskImages' snapshots
for (DiskImage diskImage : diskImages) {
if (!diskImage.getActive()) {
DiskImage activeImage = diskImagesMap.get(diskImage.getId());
if (activeImage != null) {
activeImage.getSnapshots().add(diskImage);
}
}
}
getQueryReturnValue().setReturnValue(new ArrayList<>(diskImagesMap.values()));
}
}
}