package org.itscool.weber.user;

import java.io.IOException;
import java.util.HashMap;
import java.util.List;

/**
 * ユーザ認証管理インターフェース
 * @author KANO
 * @since jdk1.4.1
 * @version 1.00A 2005/09/08
 */
public interface UserManager {
    public void init() throws IOException;
    
    public boolean isInit();
    
    /**
     * 指定されたユーザがアクセスを許可されているか判定します<BR>
     * 暗号化されたパスワードはAngouクラスによって複合化されます
     * @param roles 権限情報
     * @param user ユーザ名
     * @return このユーザによるアクセスが許可されている場合はtrueを返します
     */
    public boolean isUserCheck(HashMap roles, User user );
    
    /**
     * パスワードファイルの再読み込みを行います。
     */
    public void reload();
    
    public List getAllData();
    
    /**
     * 指定されたユーザ名に基づくユーザ情報を取得します
     * @param roleName ロール名
     * @param userName ユーザ名
     * @return ユーザ情報を返します
     */
    public User getUser(String roleName, String userName);
    
    /**
     * 指定された権限を持つユーザ情報のリストを取得します
     * @param roleName ロール名
     * @return ユーザ情報のリスト
     */
    public HashMap getUsers(String roleName);
    
    /**
     * 指定されたユーザ情報を削除します
     * @param user ユーザ情報
     * @throws IOException
     */
    public void delete(User user) throws IOException;
    
    /**
     * 指定されたユーザ情報を削除します
     * @param roleName ロール名
     * @param user ユーザ情報
     * @throws IOException
     */
    public void delete(String roleName, User user) throws IOException;
    
    /**
     * 指定されたユーザ情報を削除します
     * @param roleName ロール名
     * @param name ユーザ名
     * @throws IOException
     */
    public void delete(String roleName, String name) throws IOException;
    
    /**
     * 指定されたユーザ情報を追加します
     * @param user ユーザ情報
     * @return 追加に成功した場合はtrueを返します。
     * 既に登録済みの場合はfalseを返します
     * @throws IOException
     */
    public boolean add(User user) throws IOException;
    
    /**
     * 指定されたユーザ情報を追加します
     * @param roleName ロール名
     * @param user ユーザ情報
     * @return 追加に成功した場合はtrueを返します。
     * 既に登録済みの場合はfalseを返します
     * @throws IOException
     */
    public boolean add(String roleName, User user) throws IOException;
    
    /**
     * 指定されたユーザ情報を追加します
     * @param roleName ロール名
     * @param name ユーザ名
     * @param pwd パスワード
     * @return 追加に成功した場合はtrueを返します。
     * 既に登録済みの場合はfalseを返します
     * @throws IOException
     */
    public boolean add(String roleName, String name, String pwd) throws IOException;
    
    /**
     * 指定されたユーザ情報を更新します
     * @param user ユーザ情報
     * @throws IOException
     */
    public void update(User user) throws IOException;
    
    /**
     * 指定されたユーザ情報を更新します
     * @param roleName ロール名
     * @param user ユーザ情報
     * @throws IOException
     */
    public void update(String roleName, User user) throws IOException;
}
