/*
 * LOGICAL-PARADOX.ORG
 * Copyright (C)2005 satoshi akabane(akabane@logical-paradox.org)
 * $Id: DomainController.java,v 1.3 2005/09/28 16:14:44 rampil Exp $
 */
package org.logical_paradox.vsan.domain;

import java.rmi.Remote;
import java.rmi.RemoteException;

import org.logical_paradox.vsan.node.DiskArrayNode;

/**
 * ドメインコントローラー
 * ドメインに関する情報を一元管理します
 * @author satoshi akabane@logical-paradox.org
 * @version $Revision: 1.3 $
 */
public interface DomainController extends Remote {
	/**
	 * 登録されているドメイン名を返す．
	 * @return ドメイン名
	 * @throws RemoteException 情報の取得に失敗
	 */
	public String[] getDomainNames() throws RemoteException;
	/**
	 * ドメイン情報を取得する
	 * @param name ドメイン名
	 * @return ドメイン情報
	 * @throws RemoteException 情報の取得に失敗
	 */
	public Domain getDomain(String name) throws RemoteException;
	/**
	 * 指定ドメインにノードを追加する
	 * @param domainname ドメイン名
	 * @param node ディスクアレイノードの情報
	 * @throws RemoteException 追加に失敗
	 */
	public void join(String domainname, DiskArrayNode node) throws RemoteException;
	/**
	 * 指定ドメインから離脱する
	 * @param domainname ドメイン名
	 * @param host ノードのホストアドレス
	 * @throws RemoteException 離脱に失敗
	 */
	public void leave(String domainname, String host) throws RemoteException;
	/**
	 * ドメインコントローラーの識別名を返す．
	 * @return 識別名
	 * @throws RemoteException 取得に失敗
	 */
	public String getName() throws RemoteException;
}
