/*
 * Common Library for TBAS Softwares
 * Language: Java
 *
 * All Rights Reserved.
 * (c) Copyright 2002 by Tsukuba Bunko.
 *
 * $Id: SimpleDeserializer.java,v 1.1 2003/08/31 08:20:49 ppoi Exp $
 */
package tsukuba_bunko.resource;

import	org.xml.sax.Attributes;
import	org.xml.sax.SAXException;


/**
 * 階層構造を持たない，シンプルな値のデシリアライズを行う <code>ResourceDeserializer</code> です.
 * @author	$Author
 */
public abstract class SimpleDeserializer extends BasicDeserializer	{

	/**
	 * テキストバッファ
	 */
	protected StringBuffer	_text = null;


	/**
	 * <code>SimpleDeserializer</code> のインスタンスを作成します.
	 */
	protected SimpleDeserializer()
	{
		super();
	}

	/**
	 * 文字列から適切な型のオブジェクトへ変換します.
	 * @param	source	変換元の文字列
	 * @return	変換結果
	 * @exception	SAXException	変換に失敗した場合
	 */
	protected abstract Object convertValue( String source )
		throws SAXException;


//
//	ContentHandler の実装
//
	public void startElement( String namespaceURI, String localName, String qName, Attributes attrs )
		throws SAXException
	{
		if( _text == null )	{
			_text = new StringBuffer();
		}
		else	{
			throw new SAXException( "illegal structure.(nested element was illegal structure)" );
		}
	}

	public void endElement( String namespaceURI, String localName, String qName )
		throws SAXException
	{
		setValue( convertValue(new String(_text)) );
		_text = null;
	}

	public void characters( char[] ch, int begin, int length )
	{
		if( _text != null )	{
			_text.append( ch, begin, length );
		}
	}
}
