package org.ovirt.engine.core.dao.dwh; import java.util.List; import java.util.Map; import java.util.Objects; import java.util.stream.Collectors; import javax.inject.Inject; import javax.inject.Named; import javax.inject.Provider; import javax.inject.Singleton; import org.ovirt.engine.core.dal.dbbroker.CustomMapSqlParameterSource; import org.ovirt.engine.core.dal.dbbroker.SimpleJdbcCallsHandler; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.namedparam.MapSqlParameterSource; import org.springframework.jdbc.core.simple.SimpleJdbcCall; @Named @Singleton class OsInfoDaoImpl implements OsInfoDao { private final SimpleJdbcCallsHandler callsHandler; private final Provider<CustomMapSqlParameterSource> sqlParameterSourceProvider; private final SimpleJdbcCall simpleJdbcCall; @Inject OsInfoDaoImpl(JdbcTemplate jdbcTemplate, SimpleJdbcCallsHandler callsHandler, Provider<CustomMapSqlParameterSource> sqlParameterSourceProvider) { Objects.requireNonNull(callsHandler); Objects.requireNonNull(sqlParameterSourceProvider); this.callsHandler = callsHandler; this.sqlParameterSourceProvider = sqlParameterSourceProvider; simpleJdbcCall = new SimpleJdbcCall(jdbcTemplate); } /** * This call will populate a translation table of OS Ids to they're name.<br/> * The translation table shall be in use by DWH. * * @param osIdToName * OS id to OS Name map */ @Override public void populateDwhOsInfo(Map<Integer, String> osIdToName) { // first clear the table simpleJdbcCall.withProcedureName("clear_osinfo").execute(); // batch populate List<MapSqlParameterSource> executions = osIdToName.entrySet() .stream() .map(e -> sqlParameterSourceProvider.get() .addValue("os_id", e.getKey()) .addValue("os_name", e.getValue())) .collect(Collectors.toList()); callsHandler.executeStoredProcAsBatch("insert_osinfo", executions); } }