package #1.#z#2;

import #1.*;
import #1.#x.*;
import paraselene.*;
import paraselene.supervisor.*;
import java.io.*;

/**
 * #3
 */
public class #4 extends #1.#y#2.#4 implements Downloadable {
	private static final long serialVersionUID = 1L;

	/**
	 * コンストラクタ。
	 */
	public #4() {
		super();
		init();
	}

	/**
	 * 初期化。
	 */
	public void init(){
	}

	/**
	 * 別名URI設定。nullを返すと別名は設定しません。
	 * 最低４文字指定して下さい。
	 * ".na"で終えると完全一致となりますが、".na"で無ければ先頭一致となります。
	 * @return URI。
	 */
	public String getAliasURI() {
		return null;
	}

	/**
	 * 出力情報の設定を行う。
	 * @param from 遷移元ページ。直接呼ばれている場合はnullです。
	 * @param req リクエスト内容。
	 * @return 出力ページ。
	 * nullを返すとthisをリターンしたのと同じ扱いにされます。
	 * @exception PageException 処理の継続が不可能(ブラウザには500を返す)。
	 */
	public Page outputMain( Page from, RequestParameter req ) throws PageException {
		// 引数より出力対象を特定して下さい。
		return this;
	}

	/**
	 * 出力コンテントタイプ。
	 * @return コンテントタイプ。
	 */
	public String getContentType() {
		// 適切なものを返して下さい。
		return "application/octet-stream";
	}

	/**
	 * 更新日時を返す。
	 * @return 常にnullを返しキャッシュを禁止します。
	 * 必要に応じ変更して下さい。
	 */
	public HTTPDate getLastModified() {
		return null;
	}

	/**
	 * GZIP圧縮応答を許可するか？
	 * 圧縮ファイルを応答する場合等は、falseを返して下さい。
	 * ZIP系の圧縮ファイルを更に圧縮すると、却ってサイズが大きくなります。
	 * @return 常に true を返し、GZIP圧縮応答を許可する。
	 */
	public boolean isGZIP() {
		return true;
	}

	/**
	 * 出力内容の取得。
	 * @return ストリーム。最終的にフレームワークによりcloseされます。
	 * @exception PageException 処理の継続が不可能(ブラウザには500を返す)。
	 */
	public InputStream getInputStream() throws PageException {
		// ダウンロード対象を返して下さい。
		try {
			return new FileInputStream( "download file" );
		}
		catch( Exception e ) {
			throw new PageException( e );
		}
	}
}

