package org.ovirt.engine.core.dao.qos; import java.sql.ResultSet; import java.sql.SQLException; import java.text.MessageFormat; import java.util.List; import org.ovirt.engine.core.common.businessentities.qos.QosBase; import org.ovirt.engine.core.common.businessentities.qos.QosType; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.dao.DefaultGenericDao; import org.springframework.jdbc.core.RowMapper; import org.springframework.jdbc.core.namedparam.MapSqlParameterSource; public abstract class QosBaseDaoImpl<T extends QosBase> extends DefaultGenericDao<T, Guid> implements QosDao<T> { private static final String QOS = "qos"; private final QosType qosType; public QosBaseDaoImpl(QosType qosType) { super(QOS); this.qosType = qosType; setProcedureNameForSave(MessageFormat.format(DEFAULT_SAVE_PROCEDURE_FORMAT, qosType.name() + QOS)); setProcedureNameForUpdate(MessageFormat.format(DEFAULT_UPDATE_PROCEDURE_FORMAT, qosType.name() + QOS)); } /** * @return qos type for derived qos dao */ protected QosType getQosType() { return qosType; } @Override public List<T> getAll() { MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource() .addValue("qos_type", getQosType()); return getCallsHandler().executeReadList("GetAllQosByQosType", createEntityRowMapper(), parameterSource); } @Override public List<T> getAllForStoragePoolId(Guid storagePoolId) { MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource() .addValue("storage_pool_id", storagePoolId.getUuid()) .addValue("qos_type", getQosType()); return getCallsHandler().executeReadList("GetAllQosForStoragePoolByQosType", createEntityRowMapper(), parameterSource); } @Override protected MapSqlParameterSource createFullParametersMapper(T obj) { return createIdParameterMapper(obj.getId()) .addValue("qos_type", getQosType()) .addValue("name", obj.getName()) .addValue("description", obj.getDescription()) .addValue("storage_pool_id", obj.getStoragePoolId()); } @Override protected MapSqlParameterSource createIdParameterMapper(Guid guid) { return getCustomMapSqlParameterSource() .addValue("id", guid); } protected abstract static class QosBaseDaoFacadaeImplMapper<M extends QosBase> implements RowMapper<M> { @Override public M mapRow(ResultSet rs, int rowNum) throws SQLException { M entity = createQosEntity(rs); entity.setId(getGuid(rs, "id")); entity.setName(rs.getString("name")); entity.setStoragePoolId(getGuid(rs, "storage_pool_id")); entity.setDescription(rs.getString("description")); return entity; } protected abstract M createQosEntity(ResultSet rs) throws SQLException; } }