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

import java.rmi.RemoteException;
import java.util.HashMap;

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

/**
 * HashMapを使用した、サービス検索オブジェクト
 * @author satoshi akabane@logical-paradox.org
 * @version $Revision: 1.2 $
 */
public class HashMapLookup implements Lookup {
	/** レジストリ */
	private static final HashMap registry = new HashMap();

	/**
	 * ドメインをバインドする
	 * @param dc ドメインコントローラー
	 * @throws バインドに失敗した
	 */
	public void registerDomainController(DomainController dc) throws LookupException {
		try {
			registry.put(dc.getName(), dc);
		} catch (RemoteException e) {
			throw new LookupException(e.getMessage());
		}
	}
	/**
	 * ドメインファイルシステムをバインドする
	 * @param dfs ドメインファイルシステム
	 * @throws LookupException バインドに失敗した
	 */
	public void registerDomainFileSystem(DomainFileSystem dfs) throws LookupException {
		try {
			registry.put(dfs.getNodeId(), dfs);
		} catch (RemoteException e) {
			throw new LookupException(e.getMessage());
		}
	}
	/**
	 * 指定名称のドメインコントローラーを探す
	 * @param dcn ドメインコントローラーの識別子
	 * @return 取得できたドメインコントローラーのスタブ
	 * @throws LookupException 検索に失敗した
	 */
	public DomainController lookupDomainController(String dcn) throws LookupException {
		DomainController dc = (DomainController)registry.get(dcn);
		if(dc == null) {
			throw new LookupException();
		}
		return dc;
	}
	/**
	 * 指定名称のドメインファイルシステムを探す
	 * @param domain ドメイン名
	 * @return 取得できたドメインファイルシステムのスタブ
	 * @throws LookupException 検索に失敗した
	 */
	public DomainFileSystem lookupDomainFileSystem(String domain) throws LookupException {
		DomainFileSystem dfs = (DomainFileSystem)registry.get(domain);
		if(dfs == null) {
			throw new LookupException();
		}
		return dfs;
	}

}
