package jp.cssj.cti;

import java.lang.reflect.Constructor;

/**
 * CSSJドライバの窓口クラスです。
 * 
 * @author <a href="mailto:miyabe at gnn.co.jp">MIYABE Tatsuhiko </a>
 * @version $Id: CTIDriverManager.java,v 1.2 2005/08/18 04:51:26 harumanx Exp $
 */
public class CTIDriverManager {
	private CTIDriverManager() {
		// hidden
	}

	/**
	 * 指定されたホスト・ポートへ接続するためのドライバを返します。
	 * 
	 * @param host
	 *            ホスト名またはIPアドレス。直接接続の場合はnull。
	 * @param port
	 *            リモートポート番号。
	 * @return ドライバ。
	 */
	public static CTIDriver createDriverFor(String host, int port) {
		try {
			if (host == null) {
				String className = System.getProperty("jp.cssj.cti.direct",
						"jp.cssj.cti.ctip.server.DirectDriver");
				Class clazz = Class.forName(className);
				return (CTIDriver) clazz.newInstance();
			}

			String className = System.getProperty("jp.cssj.cti.driver",
					"jp.cssj.cti.ctip.driver.CTIPDriver");
			Class clazz = Class.forName(className);
			Constructor constructor = clazz.getConstructor(new Class[] {
					String.class, Integer.TYPE });
			return (CTIDriver) constructor.newInstance(new Object[] { host,
					new Integer(port) });
		} catch (Exception e) {
			throw new RuntimeException("CSSJドライバを作成できません", e);
		}
	}
}