package org.ovirt.engine.core.dao.network;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import javax.inject.Named;
import javax.inject.Singleton;
import org.ovirt.engine.core.common.businessentities.network.VmNic;
import org.ovirt.engine.core.compat.Guid;
import org.ovirt.engine.core.dao.DefaultGenericDao;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.SingleColumnRowMapper;
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
@Named
@Singleton
public class VmNicDaoImpl extends DefaultGenericDao<VmNic, Guid> implements VmNicDao {
private final Logger log = LoggerFactory.getLogger(VmNicDaoImpl.class);
public VmNicDaoImpl() {
super("VmInterface");
}
@Override
public List<VmNic> getAllForVm(Guid id) {
MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource().addValue("vm_id", id);
return getCallsHandler().executeReadList("GetVmInterfacesByVmId", VnicRowMapper.INSTANCE, parameterSource);
}
@Override
public List<VmNic> getAllForTemplate(Guid id) {
MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource().addValue("template_id", id);
return getCallsHandler().executeReadList("GetVmInterfaceByTemplateId",
VnicRowMapper.INSTANCE,
parameterSource);
}
@Override
public List<VmNic> getAllForNetwork(Guid networkId) {
return getCallsHandler().executeReadList("GetVmInterfacesByNetworkId",
VnicRowMapper.INSTANCE, getCustomMapSqlParameterSource().addValue("network_id", networkId));
}
@Override
public List<VmNic> getAllForTemplatesByNetwork(Guid networkId) {
return getCallsHandler().executeReadList("GetVmTemplateInterfacesByNetworkId",
VnicRowMapper.INSTANCE, getCustomMapSqlParameterSource().addValue("network_id", networkId));
}
@Override
public List<String> getAllMacsByDataCenter(Guid dataCenterId) {
return getCallsHandler().executeReadList("GetMacsByDataCenterId",
SingleColumnRowMapper.newInstance(String.class),
getCustomMapSqlParameterSource().addValue("data_center_id", dataCenterId));
}
@Override
public List<String> getAllMacsByClusterId(Guid clusterId) {
return getCallsHandler().executeReadList("GetMacsByClusterId",
SingleColumnRowMapper.newInstance(String.class),
getCustomMapSqlParameterSource().addValue("cluster_id", clusterId));
}
@Override
public List<VmNic> getPluggedForMac(String macAddress) {
return getCallsHandler().executeReadList("GetPluggedVmInterfacesByMac",
VnicRowMapper.INSTANCE, getCustomMapSqlParameterSource().addValue("mac_address", macAddress));
}
@Override
protected MapSqlParameterSource createFullParametersMapper(VmNic entity) {
return createIdParameterMapper(entity.getId()).addValue("mac_addr", entity.getMacAddress())
.addValue("name", entity.getName())
.addValue("speed", entity.getSpeed())
.addValue("vm_guid", entity.getVmId())
.addValue("vnic_profile_id", entity.getVnicProfileId())
.addValue("vmt_guid", entity.getVmTemplateId())
.addValue("type", entity.getType())
.addValue("linked", entity.isLinked());
}
@Override
protected MapSqlParameterSource createIdParameterMapper(Guid id) {
return getCustomMapSqlParameterSource().addValue("id", id);
}
@Override
protected RowMapper<VmNic> createEntityRowMapper() {
return VnicRowMapper.INSTANCE;
}
abstract static class VmNicRowMapperBase<T extends VmNic> implements RowMapper<T> {
@Override
public T mapRow(ResultSet rs, int rowNum) throws SQLException {
T entity = createVmNicEntity();
entity.setId(getGuidDefaultEmpty(rs, "id"));
entity.setName(rs.getString("name"));
entity.setVmId(getGuid(rs, "vm_guid"));
entity.setVmTemplateId(getGuid(rs, "vmt_guid"));
entity.setType((Integer) rs.getObject("type"));
entity.setMacAddress(rs.getString("mac_addr"));
entity.setVnicProfileId(getGuid(rs, "vnic_profile_id"));
entity.setSpeed((Integer) rs.getObject("speed"));
entity.setLinked(rs.getBoolean("linked"));
return entity;
}
protected abstract T createVmNicEntity();
}
private static class VnicRowMapper extends VmNicRowMapperBase<VmNic> {
public static VnicRowMapper INSTANCE = new VnicRowMapper();
@Override
protected VmNic createVmNicEntity() {
return new VmNic();
}
}
}