⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 abstractusersrepository.java

📁 java 开发的邮件服务器平台。支持以下协议。 协议可以修改为自己的专门标识
💻 JAVA
字号:
/*********************************************************************** * Copyright (c) 2000-2004 The Apache Software Foundation.             * * All rights reserved.                                                * * ------------------------------------------------------------------- * * Licensed under the Apache License, Version 2.0 (the "License"); you * * may not use this file except in compliance with the License. You    * * may obtain a copy of the License at:                                * *                                                                     * *     http://www.apache.org/licenses/LICENSE-2.0                      * *                                                                     * * Unless required by applicable law or agreed to in writing, software * * distributed under the License is distributed on an "AS IS" BASIS,   * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or     * * implied.  See the License for the specific language governing       * * permissions and limitations under the License.                      * ***********************************************************************/package org.apache.james.userrepository;import org.apache.avalon.framework.component.Component;import org.apache.avalon.framework.logger.AbstractLogEnabled;import org.apache.james.services.User;import org.apache.james.services.UsersRepository;import java.util.Iterator;import java.util.LinkedList;import java.util.List;/** * A partial implementation of a Repository to store users. * <p>This implements common functionality found in different UsersRespository  * implementations, and makes it easier to create new User repositories.</p> * */public abstract class AbstractUsersRepository    extends AbstractLogEnabled    implements UsersRepository, Component {    //    // Core Abstract methods - override these for a functional UserRepository.    //    /**     * Returns a list populated with all of the Users in the repository.     * @return an <code>Iterator</code> of <code>User</code>s.     */    protected abstract Iterator listAllUsers();    /**     * Adds a user to the underlying Repository.     * The user name must not clash with an existing user.     */    protected abstract void doAddUser(User user);    /**     * Removes a user from the underlying repository.     * If the user doesn't exist, returns ok.     */    protected abstract void doRemoveUser(User user);    /**     * Updates a user record to match the supplied User.     */    protected abstract void doUpdateUser(User user);    //    // Extended protected methods.    // These provide very basic default implementations, which will work,    // but may need to be overridden by subclasses for performance reasons.    //    /**     * Produces the complete list of User names, with correct case.     * @return a <code>List</code> of <code>String</code>s representing     *         user names.     */    protected List listUserNames() {        Iterator users = listAllUsers();        List userNames = new LinkedList();        while ( users.hasNext() ) {            User user = (User)users.next();            userNames.add(user.getUserName());        }        return userNames;    }    /**     * Gets a user by name, ignoring case if specified.     * This implementation gets the entire set of users,     * and scrolls through searching for one matching <code>name</code>.     *     * @param name the name of the user being retrieved     * @param ignoreCase whether the name is regarded as case-insensitive     *     * @return the user being retrieved, null if the user doesn't exist     */    protected User getUserByName(String name, boolean ignoreCase) {        // Just iterate through all of the users until we find one matching.        Iterator users = listAllUsers();        while ( users.hasNext() ) {            User user = (User)users.next();            String username = user.getUserName();            if (( !ignoreCase && username.equals(name) ) ||                ( ignoreCase && username.equalsIgnoreCase(name) )) {                return user;            }        }        // Not found - return null        return null;    }    //    // UsersRepository interface implementation.    //    /**     * Adds a user to the repository with the specified User object.     * Users names must be unique-case-insensitive in the repository.     *     * @param user the user to be added     *     * @return true if succesful, false otherwise     * @since James 1.2.2     */    public boolean addUser(User user) {        String username = user.getUserName();        if ( containsCaseInsensitive(username) ) {            return false;        }                doAddUser(user);        return true;    }    /**     * Adds a user to the repository with the specified attributes.  In current     * implementations, the Object attributes is generally a String password.     *     * @param name the name of the user to be added     * @param attributes the password value as a String     */    public void addUser(String name, Object attributes)  {        if (attributes instanceof String) {            User newbie = new DefaultUser(name, "SHA");            newbie.setPassword( (String) attributes );            addUser(newbie);        } else {            throw new RuntimeException("Improper use of deprecated method"                                        + " - use addUser(User user)");        }    }    /**     * Update the repository with the specified user object. A user object     * with this username must already exist.     *     * @param user the user to be updated     *     * @return true if successful.     */    public boolean updateUser(User user) {        // Return false if it's not found.        if ( ! contains(user.getUserName()) ) {            return false;        }        else {            doUpdateUser(user);            return true;        }    }    /**     * Removes a user from the repository     *     * @param user the user to be removed     */    public void removeUser(String name) {        User user = getUserByName(name);        if ( user != null ) {            doRemoveUser(user);        }    }    /**     * Gets the attribute for a user.  Not clear on behavior.     *     * @deprecated As of James 1.2.2 . Use the {@link #getUserByName(String) getUserByName} method.     */    public Object getAttributes(String name) {        throw new RuntimeException("Improper use of deprecated method - read javadocs");    }    /**     * Get the user object with the specified user name.  Return null if no     * such user.     *     * @param name the name of the user to retrieve     *     * @return the user if found, null otherwise     *     * @since James 1.2.2     */    public User getUserByName(String name) {        return getUserByName(name, false);    }    /**     * Get the user object with the specified user name. Match user naems on     * a case insensitive basis.  Return null if no such user.     *     * @param name the name of the user to retrieve     *     * @return the user if found, null otherwise     *     * @since James 1.2.2     */    public User getUserByNameCaseInsensitive(String name) {        return getUserByName(name, true);    }    /**     * Returns the user name of the user matching name on an equalsIgnoreCase     * basis. Returns null if no match.     *     * @param name the name of the user to retrieve     *     * @return the correct case sensitive name of the user     */    public String getRealName(String name) {        // Get the user by name, ignoring case, and return the correct name.        User user = getUserByName(name, true);        if ( user == null ) {            return null;        } else {            return user.getUserName();        }    }    /**     * Returns whether or not this user is in the repository     */    public boolean contains(String name) {        User user = getUserByName(name, false);        return ( user != null );    }    /**     * Returns whether or not this user is in the repository. Names are     * matched on a case insensitive basis.     */    public boolean containsCaseInsensitive(String name) {        User user = getUserByName( name, true );        return ( user != null );    }    /**     * Tests a user with the appropriate attributes.  In current implementations,     * this typically means "check the password" where a String password is passed     * as the Object attributes.     *     * @param name the name of the user to be tested     * @param attributes the password to be tested     *     * @throws UnsupportedOperationException always, as this method should not be used     *     * @deprecated As of James 1.2.2, use {@link #test(String, String) test(String name, String password)}     */    public boolean test(String name, Object attributes) {        throw new UnsupportedOperationException("Improper use of deprecated method - read javadocs");    }    /**     * Test if user with name 'name' has password 'password'.     *     * @param name the name of the user to be tested     * @param password the password to be tested     *     * @return true if the test is successful, false if the     *              password is incorrect or the user doesn't     *              exist     * @since James 1.2.2     */    public boolean test(String name, String password) {        User user = getUserByName(name, false);        if ( user == null ) {            return false;        } else {            return user.verifyPassword(password);        }    }    /**     * Returns a count of the users in the repository.     *     * @return the number of users in the repository     */    public int countUsers() {        List usernames = listUserNames();        return usernames.size();    }    /**     * List users in repository.     *     * @return Iterator over a collection of Strings, each being one user in the repository.     */    public Iterator list() {        return listUserNames().iterator();    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -