package org.ovirt.engine.core.bll.snapshots;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import javax.inject.Inject;
import org.ovirt.engine.core.bll.QueriesCommandBase;
import org.ovirt.engine.core.common.businessentities.Entities;
import org.ovirt.engine.core.common.businessentities.Snapshot;
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.SnapshotDao;
public class GetAllDiskSnapshotsByStorageDomainIdQuery<P extends IdQueryParameters> extends QueriesCommandBase<P> {
@Inject
private DiskImageDao diskImageDao;
@Inject
private SnapshotDao snapshotDao;
public GetAllDiskSnapshotsByStorageDomainIdQuery(P parameters) {
super(parameters);
}
@Override
protected void executeQueryCommand() {
List<DiskImage> diskImages = diskImageDao.getAllSnapshotsForStorageDomain(getParameters().getId());
// Filter out active volumes
diskImages = diskImages.stream().filter(d -> !d.getActive()).collect(Collectors.toList());
// Retrieving snapshots objects for setting description
Map<Guid, Snapshot> snapshots =
Entities.businessEntitiesById(snapshotDao.getAllByStorageDomain(getParameters().getId()));
List<DiskImage> diskImagesToReturn = new ArrayList<>();
for (final DiskImage diskImage : diskImages) {
Snapshot snapshot = snapshots.get(diskImage.getVmSnapshotId());
// Verify snapshot is not null to mitigate possible race conditions
if (snapshot != null) {
diskImage.setVmSnapshotDescription(snapshot.getDescription());
diskImagesToReturn.add(diskImage);
}
}
getQueryReturnValue().setReturnValue(diskImagesToReturn);
}
}