package org.ovirt.engine.core.dao.network;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.LinkedHashMap;
import java.util.List;
import javax.inject.Named;
import javax.inject.Singleton;
import org.ovirt.engine.core.common.businessentities.network.VnicProfile;
import org.ovirt.engine.core.compat.Guid;
import org.ovirt.engine.core.dao.DefaultGenericDao;
import org.ovirt.engine.core.utils.SerializationFactory;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
@Named
@Singleton
public class VnicProfileDaoImpl extends DefaultGenericDao<VnicProfile, Guid> implements VnicProfileDao {
public VnicProfileDaoImpl() {
super("VnicProfile");
}
@Override
public List<VnicProfile> getAllForNetwork(Guid networkId) {
return getCallsHandler().executeReadList("GetVnicProfilesByNetworkId",
VnicProfileRowMapper.INSTANCE,
getCustomMapSqlParameterSource().addValue("network_id", networkId));
}
@Override
protected MapSqlParameterSource createFullParametersMapper(VnicProfile profile) {
return createIdParameterMapper(profile.getId())
.addValue("name", profile.getName())
.addValue("network_id", profile.getNetworkId())
.addValue("network_qos_id", profile.getNetworkQosId())
.addValue("port_mirroring", profile.isPortMirroring())
.addValue("passthrough", profile.isPassthrough())
.addValue("migratable", profile.isMigratable())
.addValue("description", profile.getDescription())
.addValue("custom_properties",
SerializationFactory.getSerializer().serialize(profile.getCustomProperties()))
.addValue("network_filter_id", profile.getNetworkFilterId());
}
@Override
protected MapSqlParameterSource createIdParameterMapper(Guid id) {
return getCustomMapSqlParameterSource().addValue("id", id);
}
@Override
protected RowMapper<VnicProfile> createEntityRowMapper() {
return VnicProfileRowMapper.INSTANCE;
}
abstract static class VnicProfileRowMapperBase<T extends VnicProfile> implements RowMapper<T> {
@Override
@SuppressWarnings("unchecked")
public T mapRow(ResultSet rs, int rowNum) throws SQLException {
T entity = createVnicProfileEntity();
entity.setId(getGuid(rs, "id"));
entity.setName(rs.getString("name"));
entity.setNetworkId(getGuid(rs, "network_id"));
entity.setNetworkQosId(getGuid(rs, "network_qos_id"));
entity.setCustomProperties(SerializationFactory.getDeserializer()
.deserializeOrCreateNew(rs.getString("custom_properties"), LinkedHashMap.class));
entity.setPortMirroring(rs.getBoolean("port_mirroring"));
entity.setPassthrough(rs.getBoolean("passthrough"));
entity.setMigratable(rs.getBoolean("migratable"));
entity.setDescription(rs.getString("description"));
entity.setNetworkFilterId(getGuid(rs, "network_filter_id"));
return entity;
}
protected abstract T createVnicProfileEntity();
}
private static class VnicProfileRowMapper extends VnicProfileRowMapperBase<VnicProfile> {
public static final VnicProfileRowMapper INSTANCE = new VnicProfileRowMapper();
@Override
protected VnicProfile createVnicProfileEntity() {
return new VnicProfile();
}
}
}