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

import java.rmi.RemoteException;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.logical_paradox.vsan.domain.DomainController;
import org.logical_paradox.vsan.lookup.LookupFactory;

/**
 * ディスクアレイノードの状態をドメインコントローラーへ転送するロジック
 * @author satoshi akabane@logical-paradox.org
 * @version $Revision: 1.1 $
 */
public class DomainSynchronizer {
	/** ロガー */
	private static final Log log = LogFactory.getLog(DomainSynchronizer.class);

	/**
	 * ノード情報をドメインコントローラーへ転送する．
	 * @param context ノードコンテキスト
	 * @throws RemoteException 失敗
	 */
	public static final void sync(NodeContext context) throws RemoteException {
		log.info("ドメインコントローラーにノード情報を転送します");

		DacConfig config = context.getConfig();
		String domain = context.getDatabase().getDomain();

		// ドメインコントローラーを検索する
		DomainController domainController = LookupFactory.getLookup().lookupDomainController(config.getDomainController());
		domainController.join(domain, context.getDatabase().getNodeInfo());

		log.info("ドメインコントローラーにノード情報を転送しました");
	}
	/**
	 * ドメインコントローラーに対して，ドメインからの離脱を通達する．
	 * @param context ノードコンテキスト
	 * @throws RemoteException 失敗
	 */
	public static final void leave(NodeContext context) throws RemoteException {
		log.info("ドメインからノードを離脱しています");

		DacConfig config = context.getConfig();
		String domain = context.getDatabase().getDomain();

		// ドメインコントローラーを検索する
		DomainController domainController = LookupFactory.getLookup().lookupDomainController(config.getDomainController());
		domainController.leave(domain, context.getDatabase().getNodeInfo().getHost());


		log.info("ドメインからノードを離脱しました");
	}
}
