/*
 * @(#)UserServiceImpl.java
 *
 * Copyright 2006 Sony Corporation
 */
package info.dragonlady.cluster;

import info.dragonlady.sso.helper.LoginManager;
import info.dragonlady.sso.message.SSOMessageResource;

import java.rmi.RemoteException;
import java.rmi.server.RMIClientSocketFactory;
import java.rmi.server.RMIServerSocketFactory;
import java.rmi.server.UnicastRemoteObject;
import java.util.Map;

/**
 * ユーザ管理サービス実装クラス。
 * 
 * @author Hiroshi.Ebata(INFOCITY)
 * @version $Revision: 1.7 $ $Date: 2006/06/12 13:27:57 $
 */
public class UserServiceImpl extends UnicastRemoteObject implements UserService {

	/**
	 * コンストラクタ。
	 */
	public UserServiceImpl() throws RemoteException {
		super();
	}

	/**
	 * コンストラクタ。
	 * 
	 * @param port リモートオブジェクトが呼び出しを受信するポートの番号
	 * @throws RemoteException
	 */
	public UserServiceImpl(int port) throws RemoteException {
		super(port);
	}

	/**
	 * コンストラクタ。
	 * 
	 * @param port リモートオブジェクトが呼び出しを受信するポートの番号
	 * @param csf リモートオブジェクトの呼び出しに使用する、クライアント側ソケットファクトリ
	 * @param ssf リモートオブジェクト呼び出しを受信する、サーバ側ソケットファクトリ
	 * @throws RemoteException
	 */
	public UserServiceImpl(int port, RMIClientSocketFactory csf, RMIServerSocketFactory ssf) throws RemoteException {
		super(port, csf, ssf);
	}

	/**
	 * ユーザ追加。
	 * 
	 * @param userName ユーザ名
	 * @param relationId ユーザと紐づくID
	 * @return boolean true：追加成功／false：追加失敗
	 * @throws RemoteException
	 * @see com.sony.ecg.ecg0100.pim.cluster.UserService#add(java.lang.String, java.lang.String)
	 */
	public synchronized boolean add(String userName, String relationId) throws RemoteException {
		try {
			LoginManager lm = LoginManager.getInstance();
			if(!lm.isLoggedIn(userName)) {
				lm.add(userName, relationId);
			}
			return true;
		} catch(Exception e) {
			e.printStackTrace();
			String message = SSOMessageResource.getMessage("");
			throw new RemoteException(message, e);
		}
	}

	/**
	 * ユーザ削除。
	 * 
	 * @param userName ユーザ名
	 * @return boolean true：削除成功／false：削除失敗
	 * @throws RemoteException
	 * @see com.sony.ecg.ecg0100.pim.cluster.UserService#remove(java.lang.String)
	 */
	public synchronized boolean remove(String userName) throws RemoteException {
		try {
			LoginManager lm = LoginManager.getInstance();
			if(lm.isLoggedIn(userName)) {
				lm.remove(userName);
			}
			return true;
		} catch(Exception e) {
			e.printStackTrace();
			String message = SSOMessageResource.getMessage("");
			throw new RemoteException(message, e);
		}
	}

	/**
	 * ユーザに紐づく管理用IDでユーザを削除。
	 * 
	 * @param relationId ユーザに紐づくID
	 * @return boolean true：削除成功／false：削除失敗
	 * @throws RemoteException
	 */
	public boolean removeByRelationId(String relationId) throws RemoteException {
		try {
			LoginManager lm = LoginManager.getInstance();
			lm.removeById(relationId);
			return true;
		} catch(Exception e) {
			e.printStackTrace();
			String message = SSOMessageResource.getMessage("");
			throw new RemoteException(message, e);
		}
	}

	/**
	 * ユーザ管理マップ取得。
	 * 
	 * @return Map ユーザ管理マップ（key:ユーザ名、value:関連するID）
	 * @throws RemoteException
	 * @see com.sony.ecg.ecg0100.pim.cluster.UserService#get()
	 */
	public synchronized Map get() throws RemoteException {
		try {
			LoginManager lm = LoginManager.getInstance();
			Map map = lm.getMap();
			return map;
		} catch(Exception e) {
			e.printStackTrace();
			String message = SSOMessageResource.getMessage("");
			RemoteException ex = new RemoteException(message);
			ex.initCause(e);
			throw ex;
		}
	}

	/**
	 * ユーザ一覧設定。
	 * 
	 * @param users ユーザ管理マップ（key:ユーザ名、value:関連するID）
	 * @throws RemoteException
	 * @see com.sony.ecg.ecg0100.pim.cluster.UserService#set(java.util.Map)
	 */
	public synchronized void set(Map users) throws RemoteException {
		try {
			LoginManager lm = LoginManager.getInstance();
			lm.setMap(users);
		} catch(Exception e) {
			e.printStackTrace();
			String message = SSOMessageResource.getMessage("");
			RemoteException ex = new RemoteException(message);
			ex.initCause(e);
			throw ex;
		}
	}

}
