package org.ovirt.engine.core.dao;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import javax.inject.Named;
import javax.inject.Singleton;
import org.apache.commons.lang.StringUtils;
import org.ovirt.engine.core.common.businessentities.VmDeviceId;
import org.ovirt.engine.core.common.businessentities.storage.DiskInterface;
import org.ovirt.engine.core.common.businessentities.storage.DiskVmElement;
import org.ovirt.engine.core.common.utils.EnumUtils;
import org.ovirt.engine.core.compat.Guid;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
@Named
@Singleton
public class DiskVmElementDaoImpl extends DefaultGenericDao<DiskVmElement, VmDeviceId> implements DiskVmElementDao {
public DiskVmElementDaoImpl() {
super("DiskVmElement");
}
@Override
protected MapSqlParameterSource createFullParametersMapper(DiskVmElement entity) {
return createIdParameterMapper(entity.getId())
.addValue("is_boot", entity.isBoot())
.addValue("pass_discard", entity.isPassDiscard())
.addValue("disk_interface", EnumUtils.nameOrNull(entity.getDiskInterface()))
.addValue("is_using_scsi_reservation", entity.isUsingScsiReservation());
}
@Override
protected MapSqlParameterSource createIdParameterMapper(VmDeviceId id) {
return getCustomMapSqlParameterSource()
.addValue("disk_id", id.getDeviceId())
.addValue("vm_id", id.getVmId());
}
@Override
protected RowMapper<DiskVmElement> createEntityRowMapper() {
return diskVmElementRowMapper;
}
private static final RowMapper<DiskVmElement> diskVmElementRowMapper = (rs, rowNum) -> {
DiskVmElement dve = new DiskVmElement();
dve.setId(new VmDeviceId(getGuidDefaultEmpty(rs, "disk_id"), getGuidDefaultEmpty(rs, "vm_id")));
dve.setBoot(rs.getBoolean("is_boot"));
dve.setPassDiscard(rs.getBoolean("pass_discard"));
String diskInterfaceName = rs.getString("disk_interface");
if (!StringUtils.isEmpty(diskInterfaceName)) {
dve.setDiskInterface(DiskInterface.valueOf(diskInterfaceName));
}
dve.setPlugged(rs.getBoolean("is_plugged"));
dve.setLogicalName(rs.getString("logical_name"));
dve.setReadOnly(rs.getBoolean("is_readonly"));
dve.setUsingScsiReservation(rs.getBoolean("is_using_scsi_reservation"));
return dve;
};
@Override
public DiskVmElement get(VmDeviceId id) {
return get(id, null, false);
}
@Override
public DiskVmElement get(VmDeviceId id, Guid userID, boolean isFiltered) {
return getCallsHandler().executeRead("GetDiskVmElementByDiskVmElementId",
diskVmElementRowMapper,
createIdParameterMapper(id)
.addValue("user_id", userID)
.addValue("is_filtered", isFiltered));
}
@Override
public List<DiskVmElement> getAllDiskVmElementsByDiskId(Guid diskId) {
return getAllDiskVmElementsByDisksIds(Collections.singleton(diskId));
}
@Override
public List<DiskVmElement> getAllDiskVmElementsByDisksIds(Collection<Guid> disksIds) {
return getCallsHandler().executeReadList("GetDiskVmElementsByDiskVmElementsIds", diskVmElementRowMapper,
getCustomMapSqlParameterSource().addValue("disks_ids", createArrayOfUUIDs(disksIds)));
}
public List<DiskVmElement> getAllForVm(Guid vmId) {
return getAllForVm(vmId, null, false);
}
public List<DiskVmElement> getAllForVm(Guid vmId, Guid userID, boolean isFiltered) {
MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource()
.addValue("vm_id", vmId)
.addValue("user_id", userID)
.addValue("is_filtered", isFiltered);
return getCallsHandler().executeReadList("GetDiskVmElementsForVm",
diskVmElementRowMapper,
parameterSource);
}
public List<DiskVmElement> getAllPluggedToVm(Guid vmId) {
MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource().addValue("vm_id", vmId);
return getCallsHandler().executeReadList("GetDiskVmElementsPluggedToVm",
diskVmElementRowMapper,
parameterSource);
}
}