/*
 * $Id$
 * Copyright (c) 2006 LOGICAL-PARADOX.ORG
 */
package org.logical_paradox.rss.http.contents;

import javax.swing.text.MutableAttributeSet;
import javax.swing.text.html.HTMLEditorKit;
import javax.swing.text.html.HTML.Tag;

/**
 * ドキュメントタイトル取得用のParserCallback．
 * @author satoshi akabane@logical-paradox.org
 * @versiop $Revision$
 */
public class DocumentTitleCollectionCallback extends HTMLEditorKit.ParserCallback {
	/** titleタグの中を解析しているかどうか(true:そう / false:違う) */
	private boolean inTitleTag = false;
	/** 収集されたドキュメントタイトル */
	private String title;

	/**
	 * コンストラクタ．
	 */
	public DocumentTitleCollectionCallback() {
	}
	/**
	 * ドキュメントタイトルを返す．
	 * @return ドキュメントタイトル
	 */
	public String getDocumentTitle() {
		return title;
	}
	/**
	 * 終了タグ検出時のイベントハンドラ．
	 * @param t 終了タグ
	 * @param pos 位置
	 */
	@Override
	public void handleEndTag(Tag t, int pos) {
		if(t != Tag.TITLE) {
			return;
		}
		// <TITLE>タグ解析中フラグをリセット．
		inTitleTag = false;
	}
	/**
	 * 開始タグ検出時のイベントハンドラ．
	 * @param t 開始タグ
	 * @param a 属性
	 * @param pos 位置
	 */
	@Override
	public void handleStartTag(Tag t, MutableAttributeSet a, int pos) {
		if(t != Tag.TITLE) {
			return;
		}
		// <TITLE>タグ解析中フラグをセット．
		inTitleTag = true;
		title = "";
	}
	/**
	 * タグBODY検出時のイベントハンドラ．
	 * @param data テキストの内容
	 * @param pos 位置
	 */
	@Override
	public void handleText(char[] data, int pos) {
		if(inTitleTag == false) {
			return;
		}
		// <TITLE>タグのタグBODY部を取得する．
		// 何回も呼ばれた場合は，以前の値に対して連結する
		// そんなことがありえるのかどうか知らんが．
		title += new String(data);
	}
}
