/**
 * ÀÌ ¼Ò½º´Â Spring ÇÁ·¹ÀÓ¿öÅ© ¿öÅ©ºÏ¿¡¼­ »ç¿ëÇÑ ¿¹Á¦ ¼Ò½ºÀÔ´Ï´Ù. 
 * ÀÌ ¼Ò½º´Â ¸ðµç °³¹ßÀÚµéÀÌ ÀÚÀ¯·Ó°Ô ¼öÁ¤ ¹× ¹èÆ÷ÇÒ ¼ö ÀÖ½À´Ï´Ù. 
 * ´Ü, ÀÌ ¼Ò½º¸¦ ±â¹ÝÀ¸·Î »õ·Î¿î ¾ÖÇÃ¸®ÄÉÀÌ¼ÇÀ» °³¹ßÇÒ °æ¿ì ÃâÃ³¸¦ ¸í½ÃÇØ ÁÖ½Ã¸é µË´Ï´Ù. 
 */
package net.javajigi.user.client;

import java.rmi.RemoteException;
import java.util.List;

import javax.ejb.CreateException;

import net.javajigi.common.util.MailUtil;
import net.javajigi.common.util.StringUtil;
import net.javajigi.servicelocator.ServiceLocator;
import net.javajigi.user.ExistedUserException;
import net.javajigi.user.PasswordMismatchException;
import net.javajigi.user.UserNotFoundException;
import net.javajigi.user.ejb.UserService;
import net.javajigi.user.ejb.UserServiceHome;
import net.javajigi.user.model.User;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class UserServiceDelegate {
    protected static final Log logger = LogFactory
            .getLog(UserServiceDelegate.class);

    private static final Class homeClazz = UserServiceHome.class;

    private UserService userService = null;

    /**
     * 
     */
    public UserServiceDelegate() {
        ServiceLocator serviceLocator = ServiceLocator.getInstance();
        UserServiceHome userServiceHome = (UserServiceHome) serviceLocator
                .getRemoteHome(UserServiceHome.JNDI_NAME, homeClazz);
        try {
            userService = userServiceHome.create();
        } catch (RemoteException e) {
            if (logger.isErrorEnabled()) {
                logger.error(e.getMessage(), e);
            }

            throw new ServiceDelegateException(e);
        } catch (CreateException e) {
            if (logger.isErrorEnabled()) {
                logger.error(e.getMessage(), e);
            }

            throw new ServiceDelegateException(e);
        }
    }

    public int addUser(User user) throws ExistedUserException {
        try {
            return userService.addUser(user);
        } catch (RemoteException e) {
            if (logger.isErrorEnabled()) {
                logger.error(e.getMessage(), e);
            }

            throw new ServiceDelegateException(e);
        }
    }
    
    public int updateUser(User user) {
        try {
            return userService.updateUser(user);
        } catch (RemoteException e) {
            if (logger.isErrorEnabled()) {
                logger.error(e.getMessage(), e);
            }

            throw new ServiceDelegateException(e);
        }
    }    

    public User findUser(String userId) throws UserNotFoundException {
        try {
            return userService.findUser(userId);
        } catch (RemoteException e) {
            if (logger.isErrorEnabled()) {
                logger.error(e.getMessage(), e);
            }

            throw new ServiceDelegateException(e);
        }
    }

    public List findUserList() {
        try {
            return userService.findUserList();
        } catch (RemoteException e) {
            if (logger.isErrorEnabled()) {
                logger.error(e.getMessage(), e);
            }

            throw new ServiceDelegateException(e);
        }
    }

    public boolean login(String userId, String password)
            throws PasswordMismatchException, UserNotFoundException {
        try {
            return userService.login(userId, password);
        } catch (RemoteException e) {
            if (logger.isErrorEnabled()) {
                logger.error(e.getMessage(), e);
            }

            throw new ServiceDelegateException(e);
        }
    }

    public int removeUser(String userId) {
        try {
            return userService.removeUser(userId);
        } catch (RemoteException e) {
            if (logger.isErrorEnabled()) {
                logger.error(e.getMessage(), e);
            }

            throw new ServiceDelegateException(e);
        }
    }
}
