package org.ovirt.engine.core.dao; import java.util.List; import javax.inject.Named; import javax.inject.Singleton; import org.ovirt.engine.core.common.businessentities.aaa.DbGroup; import org.ovirt.engine.core.compat.Guid; import org.springframework.jdbc.core.RowMapper; import org.springframework.jdbc.core.namedparam.MapSqlParameterSource; /** * Provides a concrete implementation of {@link DbGroupDao}. */ @Named @Singleton public class DbGroupDaoImpl extends BaseDao implements DbGroupDao { @Override public DbGroup get(Guid id) { return getCallsHandler().executeRead("GetGroupById", dbGroupRowMapper, getCustomMapSqlParameterSource() .addValue("id", id)); } @Override public DbGroup getByExternalId(String domain, String externalId) { return getCallsHandler().executeRead("GetGroupByExternalId", dbGroupRowMapper, getCustomMapSqlParameterSource() .addValue("domain", domain) .addValue("external_id", externalId)); } @Override public DbGroup getByIdOrExternalId(Guid id, String domain, String externalId) { // Check if there is a user with the given internal identifier: if (id != null) { DbGroup existing = get(id); if (existing != null) { return existing; } } // Check if there is an existing user for the given external identifier: if (domain != null && externalId != null) { DbGroup existing = getByExternalId(domain, externalId); if (existing != null) { return existing; } } // In older versions of the engine the internal and external identifiers were the same, so we also need to check // if the internal id is really an external id: if (domain != null && id != null) { DbGroup existing = getByExternalId(domain, id.toString()); if (existing != null) { return existing; } } // There is no such existing user: return null; } @Override public DbGroup getByName(String name) { return getCallsHandler().executeRead("GetGroupByName", dbGroupRowMapper, getCustomMapSqlParameterSource() .addValue("name", name)); } @Override public List<DbGroup> getAll() { return getCallsHandler().executeReadList("GetAllGroups", dbGroupRowMapper, getCustomMapSqlParameterSource()); } @Override public List<DbGroup> getAllWithQuery(String query) { return getJdbcTemplate().query(query, dbGroupRowMapper); } @Override public void save(DbGroup group) { if (Guid.isNullOrEmpty(group.getId())) { group.setId(Guid.newGuid()); } insertOrUpdate(group, "InsertGroup"); } @Override public void update(DbGroup group) { insertOrUpdate(group, "UpdateGroup"); } private void insertOrUpdate(final DbGroup group, final String storedProcName) { getCallsHandler().executeModification(storedProcName, getCustomMapSqlParameterSource() .addValue("id", group.getId()) .addValue("name", group.getName()) .addValue("domain", group.getDomain()) .addValue("distinguishedname", group.getDistinguishedName()) .addValue("external_id", group.getExternalId()) .addValue("namespace", group.getNamespace())); } @Override public void remove(Guid id) { MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource() .addValue("id", id); getCallsHandler().executeModification("DeleteGroup", parameterSource); } private static final RowMapper<DbGroup> dbGroupRowMapper = (rs, rowNum) -> { DbGroup entity = new DbGroup(); entity.setId(getGuidDefaultEmpty(rs, "id")); entity.setName(rs.getString("name")); entity.setDomain(rs.getString("domain")); entity.setDistinguishedName(rs.getString("distinguishedname")); entity.setExternalId(rs.getString("external_id")); entity.setNamespace(rs.getString("namespace")); return entity; }; }