001: /****************************************************************
002: * Licensed to the Apache Software Foundation (ASF) under one *
003: * or more contributor license agreements. See the NOTICE file *
004: * distributed with this work for additional information *
005: * regarding copyright ownership. The ASF licenses this file *
006: * to you under the Apache License, Version 2.0 (the *
007: * "License"); you may not use this file except in compliance *
008: * with the License. You may obtain a copy of the License at *
009: * *
010: * http://www.apache.org/licenses/LICENSE-2.0 *
011: * *
012: * Unless required by applicable law or agreed to in writing, *
013: * software distributed under the License is distributed on an *
014: * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
015: * KIND, either express or implied. See the License for the *
016: * specific language governing permissions and limitations *
017: * under the License. *
018: ****************************************************************/package org.apache.james.userrepository;
019:
020: import org.apache.james.services.User;
021:
022: import java.sql.PreparedStatement;
023: import java.sql.ResultSet;
024: import java.sql.SQLException;
025:
026: /**
027: * A Jdbc-backed UserRepository which handles User instances
028: * of the <CODE>DefaultUser</CODE> class.
029: * Although this repository can handle subclasses of DefaultUser,
030: * like <CODE>DefaultJamesUser</CODE>, only properties from
031: * the DefaultUser class are persisted.
032: *
033: * TODO Please note that default configuration uses JamesUsersJdbcRepository
034: * instead of this class. So we could also delete this implementation.
035: *
036: */
037: public class DefaultUsersJdbcRepository extends
038: AbstractJdbcUsersRepository {
039: /**
040: * Reads properties for a User from an open ResultSet.
041: *
042: * @param rsUsers A ResultSet with a User record in the current row.
043: * @return A User instance
044: * @throws SQLException
045: * if an exception occurs reading from the ResultSet
046: */
047: protected User readUserFromResultSet(ResultSet rsUsers)
048: throws SQLException {
049: // Get the username, and build a DefaultUser with it.
050: String username = rsUsers.getString(1);
051: String passwordHash = rsUsers.getString(2);
052: String passwordAlg = rsUsers.getString(3);
053: DefaultUser user = new DefaultUser(username, passwordHash,
054: passwordAlg);
055: return user;
056: }
057:
058: /**
059: * Set parameters of a PreparedStatement object with
060: * property values from a User instance.
061: *
062: * @param user a User instance, which should be an implementation class which
063: * is handled by this Repostory implementation.
064: * @param userInsert a PreparedStatement initialised with SQL taken from the "insert" SQL definition.
065: * @throws SQLException
066: * if an exception occurs while setting parameter values.
067: */
068: protected void setUserForInsertStatement(User user,
069: PreparedStatement userInsert) throws SQLException {
070: DefaultUser defUser = (DefaultUser) user;
071: userInsert.setString(1, defUser.getUserName());
072: userInsert.setString(2, defUser.getHashAlgorithm());
073: userInsert.setString(3, defUser.getHashedPassword());
074: }
075:
076: /**
077: * Set parameters of a PreparedStatement object with
078: * property values from a User instance.
079: *
080: * @param user a User instance, which should be an implementation class which
081: * is handled by this Repostory implementation.
082: * @param userUpdate a PreparedStatement initialised with SQL taken from the "update" SQL definition.
083: * @throws SQLException
084: * if an exception occurs while setting parameter values.
085: */
086: protected void setUserForUpdateStatement(User user,
087: PreparedStatement userUpdate) throws SQLException {
088: DefaultUser defUser = (DefaultUser) user;
089: userUpdate.setString(3, defUser.getUserName());
090: userUpdate.setString(1, defUser.getHashAlgorithm());
091: userUpdate.setString(2, defUser.getHashedPassword());
092: }
093:
094: /**
095: * @see org.apache.james.services.UsersRepository#addUser(java.lang.String, java.lang.String)
096: */
097: public boolean addUser(String username, String password) {
098: User newbie = new DefaultUser(username, "SHA");
099: newbie.setPassword(password);
100: return addUser(newbie);
101: }
102:
103: }
|