package jp.cssj.driver.ctip;

import java.io.IOException;
import java.net.URI;
import java.util.Map;

import jp.cssj.cti2.CTIDriver;
import jp.cssj.cti2.CTISession;
import jp.cssj.driver.ctip.v1.V1Session;
import jp.cssj.driver.ctip.v2.V2Session;

/**
 * <p>
 * ソケット通信を利用するドライバです。
 * </p>
 * <p>
 * URIの形式は <tt>ctip://ホスト名:ポート番号/</tt> です。
 * </p>
 * 
 * @author <a href="mailto:miyabe at gnn.co.jp">MIYABE Tatsuhiko </a>
 * @version $Id: CTIPDriver.java 549 2011-02-24 08:23:55Z miyabe $
 */
public class CTIPDriver implements CTIDriver {
	public static final String ENCODING = "UTF-8";

	public boolean match(Object key) {
		URI uri = (URI) key;
		if (uri == null) {
			return false;
		}
		// ctip: または ctips:で始まる透明URI
		return !uri.isOpaque()
				&& ("ctip".equals(uri.getScheme()) || "ctips".equals(uri
						.getScheme()));
	}

	public CTISession getSession(URI uri, Map props) throws IOException {
		String query = uri.getQuery();
		String user = null;
		String password = null;
		if (props != null) {
			user = (String) props.get("user");
			password = (String) props.get("password");
		}
		if (query != null && query.indexOf("version=1") != -1) {
			return new V1Session(uri, ENCODING, user, password);
		}
		return new V2Session(uri, ENCODING, user, password);
	}
}