/*
 * 作成日: 2005/07/18
 * 作成者: KANO
 */
package org.itscool.weber.user;

import java.util.List;

import org.itscool.commons.dao.BaseDao;
import org.itscool.commons.dao.Criteria;

/**
 * Userオブジェクトのデータアクセス用クラスです
 *
 * @author KANO
 * @version 1.00
 */
public class UserDao extends BaseDao {
    
    /**
     * テーブルから全ユーザ情報を取得します
     * @return ユーザ情報の一覧をListで返します
     */
    public List getAllData(){
        Criteria crt = new Criteria(User.class);
        List lst = select(crt);
        return lst;
    }
    
    /**
     * 指定されたユーザ名のユーザ情報を取得します
     * @param name ユーザ名
     * @return User ユーザ情報
     */
    public User getUser(Role role, String name){
        Criteria crt = new Criteria(User.class);
        crt.eq(User.TABLE+"."+User.COLUM_name, name);
        crt.and();
        crt.eq(Role.TABLE+"."+Role.PK_COLUM_id, role.getId());
        
        List lst = select(crt);
        if(lst != null && lst.size() > 0){
            return (User)lst.get(0);
        }else{
            return null;
        }
    }
    
    /**
     * 指定されたユーザ名のユーザ情報を取得します
     * @param name ユーザ名
     * @return User ユーザ情報
     */
    public User getUser(String roleName, String name){
        Criteria crt = new Criteria(User.class);
        crt.eq(User.TABLE+"."+User.COLUM_name, name);
        crt.and();
        crt.eq(Role.TABLE+"."+Role.COLUM_name, roleName);
        
        List lst = select(crt);
        if(lst != null && lst.size() > 0){
            return (User)lst.get(0);
        }else{
            return null;
        }
    }
    
    /**
     * 指定されたユーザ名のユーザ情報を取得します
     * @param id ユーザID
     * @return User ユーザ情報
     */
    public User getUser(int id){
        Criteria crt = new Criteria(User.class);
        crt.eq(User.TABLE+"."+User.PK_COLUM_id, id);
        
        List lst = select(crt);
        if(lst != null && lst.size() > 0){
            return (User)lst.get(0);
        }else{
            return null;
        }
    }
    /**
     * 指定されたユーザ名を持つユーザ情報のリストを取得します
     * @param name ユーザ名
     * @return ユーザ情報のリスト
     */
    public List getUsers(String name){
        Criteria crt = new Criteria(User.class);
        crt.eq(User.TABLE+"."+User.COLUM_name, name);
        
        List lst = select(crt);
        return lst;
    }
    
    /**
     * 指定された権限を持つユーザ情報のリストを取得します
     * @param role 権限情報
     * @return ユーザ情報のリスト
     */
    public List getUsers(Role role){
        Criteria crt = new Criteria(User.class);
        crt.eq(User.TABLE+"."+User.COLUM_roleId, role.getId());
        
        List lst = select(crt);
        return lst;
    }
    
    /**
     * ユーザ情報のINSERTを行います
     * @param user ユーザ情報
     * @return Integer 登録後の主キー値を返す
     */
    public int save(User user){
        Criteria crt = new Criteria(User.class);
        int id = getNewId(User.TABLE, User.PK_COLUM_id);
        user.setId(id);
        
        this.insert(crt, user);
        return id;
    }
    
    /**
     * ユーザ情報のUPDATEを行います
     * @param user ユーザ情報
     */
    public void update(User user){
        Criteria crt = new Criteria(User.class);
        crt.eq(User.TABLE+"."+User.PK_COLUM_id, user.getId());
        crt.and();
        crt.eq(User.TABLE+"."+User.COLUM_roleId, user.getRoleId());
        
        this.update(crt, user);
    }
    
    /**
     * ユーザ情報のDELETEを行います
     * @param user ユーザ情報
     */
    public void delete(User user){
        Criteria crt = new Criteria(User.class);
        crt.eq(User.TABLE + "." + User.PK_COLUM_id, user.getId());
        crt.and();
        crt.eq(User.TABLE+"."+User.COLUM_roleId, user.getRoleId());
        
        this.delete(crt);
        
//		String line = System.getProperty("line.separator");
//		StringBuffer sb = new StringBuffer();
//		sb.append("DELETE FROM ").append(User.TABLE).append(line);
//		sb.append("WHERE ").append(line).append("    ");
//		sb.append(User.COLUM_name).append("='").append(user.getName()).append("'").append(line);
//		sb.append("    AND ");
//		sb.append(User.COLUM_roleId).append("=").append(user.getRoleId()).append(line);
//		this.getTransaction().execute(sb.toString());
    }
    
}
