/*
 * LOGICAL-PARADOX.ORG
 * Copyright (C)2005 satoshi akabane(akabane@logical-paradox.org)
 * $Id: RMILookup.java,v 1.2 2005/09/07 13:38:06 rampil Exp $
 */
package org.logical_paradox.vsan.lookup;

import java.rmi.Naming;
import java.rmi.RemoteException;

import org.logical_paradox.vsan.dfs.DomainFileSystem;
import org.logical_paradox.vsan.domain.DomainController;

/**
 * RMIを使用するタイプのサービス検索オブジェクト
 * @author satoshi akabane@logical-paradox.org
 * @version $Revision: 1.2 $
 */
public class RMILookup implements Lookup {
	/**
	 * ドメインをバインドする
	 * @param dcn ドメイン名
	 * @param dc ドメインコントローラー
	 * @throws バインドに失敗した
	 */
	public void registerDomainController(DomainController dc) throws LookupException {
		try {
			Naming.rebind(dc.getName(), dc);
		} catch (Exception e) {
			throw new LookupException(e.getMessage());
		}
	}
	/**
	 * ドメインファイルシステムをバインドする
	 * @param domain ドメイン名
	 * @param dfs ドメインファイルシステム
	 * @throws LookupException バインドに失敗した
	 */
	public void registerDomainFileSystem(DomainFileSystem dfs) throws LookupException {
		try {
			Naming.rebind(dfs.getNodeId(), dfs);
		} catch (Exception e) {
			throw new LookupException(e.getMessage());
		}
	}
	/**
	 * rmiregistryを検索する
	 * @param name サーバー名
	 * @return 取得できたオブジェクト
	 * @throws RemoteException 検索処理中に発生した例外
	 */
	protected Object rmiLookup(String name) throws RemoteException {
		try {
			Object o = Naming.lookup(name);
			return o;
		} catch (RemoteException e) {
			throw e;
		} catch (Exception e) {
			e.printStackTrace();
			throw new RemoteException(e.getMessage());
		}
	}
	/**
	 * 指定名称のドメインコントローラーを探す
	 * @param dcn ドメインコントローラーの識別子
	 * @return 取得できたドメインコントローラーのスタブ
	 * @throws LookupException 検索に失敗した
	 */
	public DomainController lookupDomainController(String dcn) throws LookupException {
		try {
			DomainController dc = (DomainController)rmiLookup(dcn);
			return dc;
		} catch(RemoteException e) {
			throw new LookupException(e.getMessage());
		}
	}
	/**
	 * 指定名称のドメインファイルシステムを探す
	 * @param domain ドメイン名
	 * @return 取得できたドメインファイルシステムのスタブ
	 * @throws LookupException 検索に失敗した
	 */
	public DomainFileSystem lookupDomainFileSystem(String domain) throws LookupException {
		try {
			DomainFileSystem dfs = (DomainFileSystem)rmiLookup(domain);
			return dfs;
		} catch(RemoteException e) {
			throw new LookupException(e.getMessage());
		}
	}

}
