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

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

import info.dragonlady.sso.AssertionManager;
import info.dragonlady.sso.message.SSOMessageResource;

/**
 * アサーション操作用サービスインターフェース実装クラス。
 * 
 * @author Hiroshi.Ebata(INFOCITY)
 * @version $Revision: 1.4 $ $Date: 2006/06/12 13:27:57 $
 */
public class AssertionServiceImpl extends UnicastRemoteObject implements AssertionService {

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

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

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

	/**
	 * 指定ID、アサーションハンドル、アサーションのマッピングを設定。
	 * 
	 * @param id ID
	 * @param handle アサーションハンドル
	 * @param assertion アサーション
	 * @throws RemoteException
	 * @see info.dragonlady.cluster.AssertionService#put(java.lang.String, java.lang.String, java.lang.String)
	 */
	public synchronized void put(String id, String handle, String assertion) throws RemoteException {
		try {
			AssertionManager am = AssertionManager.getInstance();
			am.getHandleMap().put(id, handle);
			am.getAssertionMap().put(handle, assertion);
		} catch(Exception e) {
			e.printStackTrace();
			String message = SSOMessageResource.getMessage("");
			throw new RemoteException(message, e);
		}
	}

	/**
	 * 指定ハンドルをキーとするアサーション、アサーションハンドルのマッピングを削除。
	 * 
	 * @param handle アサーションハンドル
	 * @throws RemoteException
	 * @see info.dragonlady.cluster.AssertionService#removeByHandle(byte[])
	 */
	public synchronized void removeByHandle(byte[] handle) throws RemoteException {
		try {
			AssertionManager.getInstance().removeByHandle(handle);
		} catch(Exception e) {
			e.printStackTrace();
			String message = SSOMessageResource.getMessage("");
			throw new RemoteException(message, e);
		}
	}

	/**
	 * 指定IDをキーとするアサーション、アサーションハンドルのマッピングを削除。
	 * 
	 * @param id ID
	 * @throws RemoteException
	 * @see info.dragonlady.cluster.AssertionService#removeById(java.lang.String)
	 */
	public synchronized void removeById(String id) throws RemoteException {
		try {
			AssertionManager.getInstance().removeById(id);
		} catch(Exception e) {
			e.printStackTrace();
			String message = SSOMessageResource.getMessage("");
			throw new RemoteException(message, e);
		}
	}

	/**
	 * アサーションマップ取得。
	 * 
	 * @return Map アサーションマップ
	 * @throws RemoteException
	 * @see info.dragonlady.cluster.AssertionService#getAssertionMap()
	 */
	public synchronized Map getAssertionMap() throws RemoteException {
		try {
			Map map = AssertionManager.getInstance().getAssertionMap();
			return map;
		} catch(Exception e) {
			e.printStackTrace();
			String message = SSOMessageResource.getMessage("");
			throw new RemoteException(message, e);
		}
	}

	/**
	 * アサーションハンドルマップ取得。
	 * 
	 * @return Map アサーションハンドルマップ
	 * @throws RemoteException
	 * @see info.dragonlady.cluster.AssertionService#getHandleMap()
	 */
	public synchronized Map getHandleMap() throws RemoteException {
		try {
			Map map = AssertionManager.getInstance().getHandleMap();
			return map;
		} catch(Exception e) {
			e.printStackTrace();
			String message = SSOMessageResource.getMessage("");
			throw new RemoteException(message, e);
		}
	}

	/**
	 * アサーションマップ設定。
	 * 
	 * @param assertionMap アサーションマップ
	 * @throws RemoteException
	 * @see info.dragonlady.cluster.AssertionService#setAssertionMap(java.util.Map)
	 */
	public synchronized void setAssertionMap(Map assertionMap) throws RemoteException {
		try {
			AssertionManager.getInstance().setAssertionMap(assertionMap);
		} catch(Exception e) {
			e.printStackTrace();
			String message = SSOMessageResource.getMessage("");
			throw new RemoteException(message, e);
		}
	}

	/**
	 * アサーションハンドルマップ設定。
	 * 
	 * @param handleMap アサーションハンドルマップ
	 * @throws RemoteException
	 * @see info.dragonlady.cluster.AssertionService#setHandleMap(java.util.Map)
	 */
	public synchronized void setHandleMap(Map handleMap) throws RemoteException {
		try {
			AssertionManager.getInstance().setHandleMap(handleMap);
		} catch(Exception e) {
			e.printStackTrace();
			String message = SSOMessageResource.getMessage("");
			throw new RemoteException(message, e);
		}
	}

}
