package org.ovirt.engine.core.dao; import java.util.LinkedList; import java.util.List; import javax.inject.Named; import javax.inject.Singleton; import org.apache.commons.lang.StringUtils; import org.ovirt.engine.core.common.businessentities.EngineSession; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.dal.dbbroker.CustomMapSqlParameterSource; import org.ovirt.engine.core.dal.dbbroker.DbEngineDialect; import org.springframework.jdbc.core.RowMapper; import org.springframework.jdbc.core.namedparam.MapSqlParameterSource; /** * {@code EngineSessionDaoImpl} provides an implementation of {@link EngineSessionDao}. */ @Named @Singleton public class EngineSessionDaoImpl extends BaseDao implements EngineSessionDao { private static final RowMapper<EngineSession> engineSessionRowMapper = (rs, rowNum) -> { EngineSession session = new EngineSession(); session.setId(rs.getLong("id")); session.setEngineSessionId(rs.getString("engine_session_id")); session.setUserId(getGuidDefaultEmpty(rs, "user_id")); session.setUserName(rs.getString("user_name")); session.setAuthzName(rs.getString("authz_name")); session.setSourceIp(rs.getString("source_ip")); session.setGroupIds(convertToGuidList(rs.getString("group_ids"), ',')); session.setRoleIds(convertToGuidList(rs.getString("role_ids"), ',')); return session; }; private static LinkedList<Guid> convertToGuidList(String str, char delimiter) { LinkedList<Guid> results = new LinkedList<>(); if (str != null) { for (String id : str.split(String.format(" *%s *", delimiter))) { results.add(Guid.createGuidFromString(id)); } } return results; } private static class EngineSessionParameterSource extends CustomMapSqlParameterSource { public EngineSessionParameterSource(DbEngineDialect dialect, EngineSession session) { super(dialect); addValue("id", session.getId()); addValue("engine_session_id", session.getEngineSessionId()); addValue("user_id", session.getUserId()); addValue("user_name", session.getUserName()); addValue("authz_name", session.getAuthzName()); addValue("source_ip", session.getSourceIp()); addValue("group_ids", StringUtils.join(session.getGroupIds(), ",")); addValue("role_ids", StringUtils.join(session.getRoleIds(), ",")); } } @Override public EngineSession get(long id) { MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource() .addValue("id", id); return getCallsHandler().executeRead("GetEngineSession", engineSessionRowMapper, parameterSource); } @Override public EngineSession getBySessionId(String id) { MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource() .addValue("engine_session_id", id); return getCallsHandler().executeRead("GetEngineSessionBySessionId", engineSessionRowMapper, parameterSource); } private EngineSessionParameterSource getEngineSessionParameterSource(EngineSession session) { return new EngineSessionParameterSource(getDialect(), session); } @Override public long save(EngineSession session) { EngineSessionParameterSource parameterSource = getEngineSessionParameterSource(session); return ((Integer) getCallsHandler().executeModification("InsertEngineSession", parameterSource).get("id")).longValue(); } @Override public int remove(long id) { MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource() .addValue("id", id); return getCallsHandler().executeModificationReturnResult("DeleteEngineSession", parameterSource); } @Override public int removeAll() { MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource(); return getCallsHandler().executeModificationReturnResult("DeleteAllFromEngineSessions", parameterSource); } @Override public List<EngineSession> getAllWithQuery(String query) { return getJdbcTemplate().query(query, engineSessionRowMapper); } }