package org.ovirt.engine.core.dao.qos; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.inject.Named; import javax.inject.Singleton; import org.ovirt.engine.core.common.businessentities.qos.CpuQos; import org.ovirt.engine.core.common.businessentities.qos.QosType; import org.ovirt.engine.core.common.utils.Pair; import org.ovirt.engine.core.compat.Guid; import org.springframework.jdbc.core.RowMapper; import org.springframework.jdbc.core.namedparam.MapSqlParameterSource; @Named @Singleton public class CpuQosDaoImpl extends QosBaseDaoImpl<CpuQos> implements CpuQosDao { public CpuQosDaoImpl() { super(QosType.CPU); } @Override protected MapSqlParameterSource createFullParametersMapper(CpuQos obj) { MapSqlParameterSource map = super.createFullParametersMapper(obj); map.addValue("cpu_limit", obj.getCpuLimit()); return map; } @Override public Map<Guid, CpuQos> getCpuQosByVmIds(Collection<Guid> vmIds) { MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource() .addValue("vm_ids", createArrayOfUUIDs(vmIds)); List<Pair<Guid, CpuQos>> pairs = getCallsHandler().executeReadList("GetQosByVmIds", cpuQosMultipleMapper, parameterSource); Map<Guid, CpuQos> qosMap = new HashMap<>(); for (Pair<Guid, CpuQos> pair : pairs) { qosMap.put(pair.getFirst(), pair.getSecond()); } return qosMap; } @Override protected RowMapper<CpuQos> createEntityRowMapper() { return CpuDaoDbFacadaeImplMapper.MAPPER; } protected static class CpuDaoDbFacadaeImplMapper extends QosBaseDaoFacadaeImplMapper<CpuQos> { public static final CpuDaoDbFacadaeImplMapper MAPPER = new CpuDaoDbFacadaeImplMapper(); @Override protected CpuQos createQosEntity(ResultSet rs) throws SQLException { CpuQos entity = new CpuQos(); entity.setCpuLimit(getInteger(rs, "cpu_limit")); return entity; } } private static final RowMapper<Pair<Guid, CpuQos>> cpuQosMultipleMapper = (rs, rowNum) -> { CpuQos qos = CpuDaoDbFacadaeImplMapper.MAPPER.mapRow(rs, rowNum); Guid guid = new Guid(rs.getString("vm_id")); return new Pair<>(guid, qos); }; }