/*
 * @(#)LoginManager.java
 *
 * Copyright (C) 2006 Infocity Inc. All Rights Reserved.
 */
package info.dragonlady.sso.helper;

import java.util.Collections;
import java.util.HashMap;
import java.util.Map;

/**
 * ログイン管理クラス。
 * 
 * @author Hiroshi.Ebata(INFOCITY)
 * @version $Revision: 1.0 $ $Date: 2006/09/27 19:18:36 $
 */
public class LoginManager {

	private static final LoginManager lm = new LoginManager();

	private volatile Map<String, String> userMap = Collections.synchronizedMap(new HashMap<String, String>());

	/**
	 * コンストラクタ。
	 */
	private LoginManager() {
		super();
	}

	/**
	 * インスタンス取得。
	 * 
	 * @return LoginManager インスタンス
	 */
	public static final LoginManager getInstance() {
		return lm;
	}

	/**
	 * ユーザを追加する。
	 * 
	 * @param user ユーザ
	 * @param relationId 関連するID
	 */
	public synchronized void add(String user, String relationId) {
		if(!userMap.containsKey(user)) {
			userMap.put(user, relationId);
		}
	}

	/**
	 * ユーザを削除する。
	 * 
	 * @param user ユーザ
	 */
	public synchronized void remove(String user) {
		userMap.remove(user);
	}

	/**
	 * ユーザを削除する。
	 * 
	 * @param relationId 関連するID
	 */
	public synchronized void removeById(String relationId) {
		userMap.values().remove(relationId);
	}

	/**
	 * 指定されたユーザのログイン状態を調べる。
	 * 
	 * @param user ユーザ
	 * @return boolean true：ログイン状態／false：ログアウト状態
	 */
	public synchronized boolean isLoggedIn(String user) {
		return userMap.containsKey(user);
	}

	/**
	 * ユーザ管理マップを取得する。
	 * 
	 * @return Map<String, String> ユーザ管理マップ
	 */
	public synchronized Map<String, String> getMap() {
		return Collections.unmodifiableMap(userMap);
	}

	/**
	 * ユーザ管理マップを設定する。
	 * 
	 * @param map ユーザ管理マップ
	 */
	public synchronized void setMap(Map<String, String> map) {
		clear();
		userMap.putAll(map);
	}

	/**
	 * ユーザ管理情報を消去する。
	 * 
	 * @param map ユーザ管理マップ
	 */
	public synchronized void clear() {
		userMap.clear();
	}

}
