/*
 * LOGICAL-PARADOX.ORG
 * Copyright (C)2006 satoshi akabane(akabane@logical-paradox.org)
 * $Id: ContentsRegisterFactory.java,v 1.2 2006/01/23 02:46:11 rampil Exp $
 */
package org.logical_paradox.rss.lcmgr;

import org.logical_paradox.rss.dsr.RSSDistributedServiceRegistry;
import org.logical_paradox.rss.lookup.LookupFactory;
import org.logical_paradox.rss.rcm.ContentsRegister;
import org.logical_paradox.rss.rcm.RSSContentsMngrService;
import org.logical_paradox.rss.robot.RSSNavigatorConfig;

/**
 * ContentsRegisterFactory
 * コンテンツ登録クライアント生成器．<br>
 * 引数によって，Webコンテンツサーバーとの仲介をするタイプと，スタンドアローンのタイプを生成する
 * @author satoshi akabane@logical-paradox.org
 * @version $Revision: 1.2 $
 */
public final class ContentsRegisterFactory {
	/**
	 * コンストラクタ
	 */
	private ContentsRegisterFactory() {
	}

	/**
	 * コンテンツ登録クライアントのインスタンスを生成する．
	 * このメソッドはデフォルトタイプのコンテンツ登録クライアントを生成する
	 * @param config ローカルコンテンツ管理システムのコンフィグ
	 * @return 生成されたコンテンツ登録クライアント
	 */
	public static final ContentsRegister getContentsRegister(RSSLCConfig config) {
		try {
			return getContentsRegister(config, RSSNavigatorConfig.NAVIMODE_DISTRIB);
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

	/**
	 * コンテンツ登録クライアントのインスタンスを生成する．
	 * こっちのメソッドは任意のタイプのクライアントオブジェクトを作成する
	 * @param config ローカルコンテンツ管理システムのコンフィグ
	 * @param ctype 動作モード
	 * @return 生成されたコンテンツ登録クライアント
	 */
	public static final ContentsRegister getContentsRegister(RSSLCConfig config, boolean ctype) throws Exception {
		if(ctype == RSSNavigatorConfig.NAVIMODE_DISTRIB) {
			// Webコンテンツサーバーとの仲介を行なうクライアント
			return createRemoteContentsRegister(config);
		} else if(ctype == RSSNavigatorConfig.NAVIMODE_STANDALONE) {
			// スタンドアローンの場合
			return new StandAloneContentsRegister(config);
		} else {
			// 引数がおかしい場合はオブジェクトを生成しないで例外を投げる
			throw new IllegalArgumentException();
		}
	}
	/**
	 * リモートコンテンツ管理システムからコンテンツ登録クライアントを取得して返す．
	 * @param config ローカルコンテンツ管理システムのコンフィグ
	 * @return 生成されたコンテンツ登録クライアント
	 */
	public static ContentsRegister createRemoteContentsRegister(RSSLCConfig config) throws Exception {
		int serviceType = RSSDistributedServiceRegistry.RSS_SERVID_REMOTE_CONTENTS_MGR;
		RSSContentsMngrService rcm = (RSSContentsMngrService)LookupFactory.getLookup(config.getContentsConnStr()).lookup(serviceType);

		return rcm.getRegister();
	}
}

// end of ContentsRegisterFactory.java
