/* * Copyright 2011 Research Studios Austria Forschungsgesellschaft mBH * * This file is part of easyrec. * * easyrec is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * easyrec is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with easyrec. If not, see <http://www.gnu.org/licenses/>. */ /** * */ package org.easyrec.plugin.pearson.store.dao.impl; import org.easyrec.plugin.pearson.model.User; import org.easyrec.plugin.pearson.store.dao.UserDAO; import org.easyrec.store.dao.core.ActionDAO; import org.easyrec.utils.spring.cache.annotation.LongCacheable; import org.easyrec.utils.spring.store.dao.DaoUtils; import org.easyrec.utils.spring.store.dao.annotation.DAO; import org.easyrec.utils.spring.store.dao.impl.AbstractTableCreatingDAOImpl; import org.easyrec.utils.spring.store.service.sqlscript.SqlScriptService; import org.springframework.dao.DataIntegrityViolationException; import org.springframework.jdbc.core.RowMapper; import javax.sql.DataSource; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Types; import java.util.List; /** * <DESCRIPTION> * <p/> * <p> * <b>Company: </b> SAT, Research Studios Austria * </p> * <p/> * <p> * <b>Copyright: </b> (c) 2007 * </p> * <p/> * <p> * <b>last modified:</b><br/> * $Author$<br/> * $Date$<br/> * $Revision$ * </p> * * @author Patrick Marschik */ @DAO public class UserDAOMysqlImpl extends AbstractTableCreatingDAOImpl implements UserDAO { private static final class UserRowMapper implements RowMapper { public Object mapRow(ResultSet rs, int rowNum) throws SQLException { final Integer id = DaoUtils.getInteger(rs, DEFAULT_ID_COLUMN_NAME); final Integer tenant = DaoUtils.getInteger(rs, DEFAULT_TENANT_COLUMN_NAME); final Integer user = DaoUtils.getInteger(rs, DEFAULT_USER_COLUMN_NAME); final String name = DaoUtils.getStringIfPresent(rs, DEFAULT_NAME_COLUMN_NAME); return new User(id, name, tenant, user); } } private static RowMapper defaultUserRowMapper = new UserRowMapper(); private final static String TABLE_CREATING_SQL_SCRIPT_NAME = "classpath:sql/content/User.sql"; /** * @param sqlScriptService */ public UserDAOMysqlImpl(DataSource dataSource, SqlScriptService sqlScriptService) { super(sqlScriptService); setDataSource(dataSource); } @SuppressWarnings("unchecked") public void createUsersFromActionsForTenant(Integer tenantId) { final StringBuilder userQuery = new StringBuilder("SELECT DISTINCT "); userQuery.append(ActionDAO.DEFAULT_USER_COLUMN_NAME); userQuery.append(" FROM "); userQuery.append(ActionDAO.DEFAULT_TABLE_NAME); userQuery.append(" WHERE "); userQuery.append(ActionDAO.DEFAULT_TENANT_COLUMN_NAME); userQuery.append(" = ?"); final List<Integer> userIds = getJdbcTemplate() .queryForList(userQuery.toString(), new Object[]{tenantId}, new int[]{Types.INTEGER}, Integer.class); final StringBuilder query = new StringBuilder("INSERT INTO "); query.append(DEFAULT_TABLE_NAME); query.append("("); query.append(DEFAULT_NAME_COLUMN_NAME); query.append(", "); query.append(DEFAULT_TENANT_COLUMN_NAME); query.append(", "); query.append(DEFAULT_USER_COLUMN_NAME); query.append(") VALUES (?, ?, ?)"); final int[] argt = new int[]{Types.VARCHAR, Types.INTEGER, Types.INTEGER}; for (final Integer userId : userIds) { final Object[] args = new Object[]{"unknown" + userId, tenantId, userId}; try { getJdbcTemplate().update(query.toString(), args, argt); } catch (final DataIntegrityViolationException ex0) { } } } /* * (non-Javadoc) * * @see org.easyrec.utils.spring.store.dao.impl.AbstractTableCreatingDAOImpl# getDefaultTableName() */ @Override public String getDefaultTableName() { return DEFAULT_TABLE_NAME; } /* * (non-Javadoc) * * @see org.easyrec.utils.spring.store.dao.impl.AbstractTableCreatingDAOImpl# getTableCreatingSQLScriptName() */ @Override public String getTableCreatingSQLScriptName() { return TABLE_CREATING_SQL_SCRIPT_NAME; } @SuppressWarnings("unchecked") @LongCacheable public List<Integer> getUserIdsForTenant(Integer tenantId) { final StringBuilder query = new StringBuilder("SELECT "); query.append(DEFAULT_USER_COLUMN_NAME); query.append(" FROM "); query.append(DEFAULT_TABLE_NAME); query.append(" WHERE "); query.append(DEFAULT_TENANT_COLUMN_NAME); query.append("=?"); final Object[] args = new Object[]{tenantId}; final int[] argt = new int[]{Types.INTEGER}; return getJdbcTemplate().queryForList(query.toString(), args, argt, Integer.class); } /* * (non-Javadoc) * * @see org.easyrec.plugin.pearson.store.dao.UserDAO#getUsersForTenant(java.lang.Integer ) */ @SuppressWarnings("unchecked") @LongCacheable public List<User> getUsersForTenant(Integer tenantId) { final StringBuilder query = new StringBuilder("SELECT * FROM "); query.append(DEFAULT_TABLE_NAME); query.append(" WHERE "); query.append(DEFAULT_TENANT_COLUMN_NAME); query.append("=?"); final Object[] args = new Object[]{tenantId}; final int[] argt = new int[]{Types.INTEGER}; return getJdbcTemplate().query(query.toString(), args, argt, defaultUserRowMapper); } }