package jp.cssj.cti.resolver;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;

/**
 * リソースの入力元です。
 * 
 * @author <a href="mailto:miyabe at gnn.co.jp">MIYABE Tatsuhiko</a>
 * @version $Id: Source.java,v 1.3 2005/08/18 04:51:26 harumanx Exp $
 */
public interface Source {
	/**
	 * リソースのURIを返します。
	 * 
	 * @return
	 */
	public String getURI();

	/**
	 * リソースのMIMEタイプを返します。 不明な場合はnullを返します。
	 * 
	 * @return
	 */
	public String getMimeType();

	/**
	 * リソースのエンコーディングを返します。 nullでない場合は、入力はこのエンコーディングに強制されます。
	 * そのとき、isCharacterStreamは常にtrueです。
	 * 
	 * @return
	 */
	public String getEncoding();

	/**
	 * キャラクタストリームであればtrueを返します。
	 * 
	 * @return
	 */
	public boolean isCharacterStream();

	/**
	 * isCharacterStreamがfalseのとき、バイナリストリームを返します。
	 * 
	 * @return
	 * @throws IOException
	 */
	public InputStream getInputStream() throws IOException;

	/**
	 * isCharacterStreamがtrueのとき、キャラクタストリームを返します。
	 * 
	 * @return
	 * @throws IOException
	 */
	public Reader getReader() throws IOException;

	/**
	 * ファイルであればtrueを返します。
	 * 
	 * @return
	 */
	public boolean isFile();

	/**
	 * ファイルであればファイルを返します。 そうでない場合の動作は未定義です。
	 * 
	 * @return
	 */
	public File getFile();
}
