package org.ovirt.engine.core.dao.network;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Collections;
import java.util.List;
import javax.inject.Named;
import javax.inject.Singleton;
import org.ovirt.engine.core.common.businessentities.comparators.InterfaceComparerByMAC;
import org.ovirt.engine.core.common.businessentities.network.VmNetworkInterface;
import org.ovirt.engine.core.compat.Guid;
import org.ovirt.engine.core.dao.DefaultReadDao;
import org.ovirt.engine.core.dao.network.VmNetworkStatisticsDaoImpl.VmNetworkStatisticsRowMapper;
import org.ovirt.engine.core.dao.network.VmNicDaoImpl.VmNicRowMapperBase;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
@Named
@Singleton
public class VmNetworkInterfaceDaoImpl extends DefaultReadDao<VmNetworkInterface, Guid> implements VmNetworkInterfaceDao {
public VmNetworkInterfaceDaoImpl() {
super("VmNetworkInterfaceView");
}
@Override
public List<VmNetworkInterface> getAllForVm(Guid id) {
return getAllForVm(id, null, false);
}
@Override
public List<VmNetworkInterface> getAllForVm(Guid id, Guid userId, boolean filtered) {
MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource()
.addValue("vm_id", id).addValue("user_id", userId).addValue("is_filtered", filtered);
List<VmNetworkInterface> results =
getCallsHandler().executeReadList("GetVmNetworkInterfaceViewByVmId",
VmNetworkInterfaceRowMapper.INSTANCE,
parameterSource);
Collections.sort(results, new InterfaceComparerByMAC());
return results;
}
@Override
public List<VmNetworkInterface> getAllForMonitoredVm(Guid vmId) {
MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource()
.addValue("vm_id", vmId);
return getCallsHandler().executeReadList("GetVmNetworkInterfaceToMonitorByVmId",
VmNetworkInterfaceMonitoringRowMapper.INSTANCE,
parameterSource);
}
@Override
public List<VmNetworkInterface> getAllForTemplate(Guid id) {
return getAllForTemplate(id, null, false);
}
@Override
public List<VmNetworkInterface> getAllForTemplate(Guid id, Guid userId, boolean filtered) {
MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource()
.addValue("template_id", id).addValue("user_id", userId).addValue("is_filtered", filtered);
return getCallsHandler().executeReadList("GetVmNetworkInterfaceViewByTemplateId",
VmNetworkInterfaceRowMapper.INSTANCE,
parameterSource);
}
@Override
public List<VmNetworkInterface> getAllForNetwork(Guid networkId) {
return getCallsHandler().executeReadList("GetVmInterfaceViewsByNetworkId",
VmNetworkInterfaceRowMapper.INSTANCE,
getCustomMapSqlParameterSource().addValue("network_id", networkId));
}
@Override
public List<VmNetworkInterface> getAllForTemplatesByNetwork(Guid networkId) {
return getCallsHandler().executeReadList("GetVmTemplateInterfaceViewsByNetworkId",
VmNetworkInterfaceRowMapper.INSTANCE,
getCustomMapSqlParameterSource().addValue("network_id", networkId));
}
@Override
protected MapSqlParameterSource createIdParameterMapper(Guid id) {
return getCustomMapSqlParameterSource().addValue("id", id);
}
@Override
protected RowMapper<VmNetworkInterface> createEntityRowMapper() {
return VmNetworkInterfaceRowMapper.INSTANCE;
}
private static class VmNetworkInterfaceRowMapper extends VmNicRowMapperBase<VmNetworkInterface> {
public static VmNetworkInterfaceRowMapper INSTANCE = new VmNetworkInterfaceRowMapper();
@Override
public VmNetworkInterface mapRow(ResultSet rs, int rowNum) throws SQLException {
VmNetworkInterface entity = super.mapRow(rs, rowNum);
entity.setStatistics(VmNetworkStatisticsRowMapper.INSTANCE.mapRow(rs, rowNum));
entity.setNetworkName(rs.getString("network_name"));
entity.setVmName(rs.getString("vm_name"));
entity.setVnicProfileName(rs.getString("vnic_profile_name"));
entity.setPlugged(rs.getBoolean("is_plugged"));
entity.setPortMirroring(rs.getBoolean("port_mirroring"));
entity.setQosName(rs.getString("qos_name"));
return entity;
}
@Override
protected VmNetworkInterface createVmNicEntity() {
return new VmNetworkInterface();
}
}
private static class VmNetworkInterfaceMonitoringRowMapper implements RowMapper<VmNetworkInterface> {
public static VmNetworkInterfaceMonitoringRowMapper INSTANCE = new VmNetworkInterfaceMonitoringRowMapper();
@Override
public VmNetworkInterface mapRow(ResultSet rs, int rowNum) throws SQLException {
VmNetworkInterface entity = new VmNetworkInterface();
entity.setId(getGuidDefaultEmpty(rs, "id"));
entity.setVmId(getGuid(rs, "vm_guid"));
entity.setMacAddress(rs.getString("mac_addr"));
entity.setStatistics(VmNetworkStatisticsRowMapper.INSTANCE.mapRow(rs, rowNum));
return entity;
}
}
}