View Javadoc

    1   /*
    2    * All Rights Reserved.
    3    * Copyright (C) 1999-2005 Tsukuba Bunko.
    4    *
    5    * Licensed under the BSD License ("the License"); you may not use
    6    * this file except in compliance with the License.
    7    * You may obtain a copy of the License at
    8    *
    9    *       http://www.tsukuba-bunko.org/licenses/LICENSE.txt
    10   *
    11   * Unless required by applicable law or agreed to in writing, software
    12   * distributed under the License is distributed on an "AS IS" BASIS,
    13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    14   * See the License for the specific language governing permissions and
    15   * limitations under the License.
    16   *
    17   * $Id: HandlerRegistry.java,v 1.2 2005/07/24 20:55:57 ppoi Exp $
    18   */
    19  package tsukuba_bunko.peko.scenario;
    20
    21  import	java.util.Map;
    22
    23
    24  import	tsukuba_bunko.peko.scenario.select.SelectHandler;
    25
    26  import	tsukuba_bunko.peko.scenario.stage.ActorHandler;
    27  import	tsukuba_bunko.peko.scenario.stage.AtOnceHandler;
    28  import	tsukuba_bunko.peko.scenario.stage.BackgroundHandler;
    29  import	tsukuba_bunko.peko.scenario.stage.SlideHandler;
    30  import	tsukuba_bunko.peko.scenario.stage.SoundHandler;
    31
    32  import	tsukuba_bunko.peko.scenario.structure.HeadHandler;
    33
    34  import	tsukuba_bunko.peko.scenario.text.NewPageHandler;
    35  import	tsukuba_bunko.peko.scenario.text.ParagraphHandler;
    36
    37  import	tsukuba_bunko.peko.scenario.util.FlagHandler;
    38  import	tsukuba_bunko.peko.scenario.util.SceneFlowHandler;
    39  import	tsukuba_bunko.peko.scenario.util.WaitHandler;
    40
    41
    42  /***
    43   * 要素と ElementHandler の関連づけを管理します。
    44   * @author	$Author: ppoi $
    45   * @version	$Revision: 1.2 $
    46   */
    47  public class HandlerRegistry	{
    48
    49  	/***
    50  	 * handler registries per namespace
    51  	 */
    52  	private Map	_registry = new java.util.HashMap( 89 );
    53
    54
    55  	/***
    56  	 * <code>HandlerRegistry</code> のインスタンスを作成します。
    57  	 */
    58  	public HandlerRegistry()
    59  	{
    60  		super();
    61  	}
    62
    63  	/***
    64  	 * 指定された要素に対して ElementHandler を関連づけます。
    65  	 * @param	elementName	要素名
    66  	 * @param	handler	関連づける ElementHandler
    67  	 */
    68  	public void register( String elementName, ElementHandler handler )
    69  	{
    70  		register( ElementHandler.NAMESPACE_SCENE, elementName, handler );
    71  	}
    72
    73  	/***
    74  	 * 指定された要素に対して ElementHandler を関連づけます。
    75  	 * @param	namespaceURI	XML ネームスペース URI
    76  	 * @param	localName	要素名
    77  	 * @param	handler	関連づける ElementHandler
    78  	 */
    79  	public void register( String namespaceURI, String localName, ElementHandler handler )
    80  	{
    81  		Map	handlers = getElementHandlers( namespaceURI );
    82  		handlers.put( localName, handler );
    83  	}
    84
    85  	/***
    86  	 * 指定された要素に対する関連づけを削除します。
    87  	 * @param	elementName	要素名
    88  	 */
    89  	public void unregister( String elementName )
    90  	{
    91  		unregister( ElementHandler.NAMESPACE_SCENE, elementName );
    92  	}
    93
    94  	/***
    95  	 * 指定された要素に対する関連づけを削除します。
    96  	 * @param	namespaceURI	要素のネームスペース URI
    97  	 * @param	localName	要素名
    98  	 */
    99  	public void unregister( String namespaceURI, String localName )
    100 	{
    101 		Map	handlers = getElementHandlers( namespaceURI );
    102 		handlers.remove( localName );
    103 	}
    104
    105 	/***
    106 	 * 指定された要素に関連づけられた ElementHandler を取得します。
    107 	 * @param	elementName	要素名
    108 	 * @return	関連づけられた ElementHandler。関連づけが存在しない場合は <code>null</code>
    109 	 */
    110 	public ElementHandler getElementHandler( String elementName )
    111 	{
    112 		return getElementHandler( ElementHandler.NAMESPACE_SCENE, elementName );
    113 	}
    114
    115 	/***
    116 	 * 指定された要素に関連づけられた ElementHandler を取得します。
    117 	 * @param	namespaceURI	要素のネームスペース URI
    118 	 * @param	localName	要素名
    119 	 * @return	関連づけられた ElementHandler。関連づけが存在しない場合は <code>null</code>
    120 	 */
    121 	public ElementHandler getElementHandler( String namespaceURI, String localName )
    122 	{
    123 		Map	handlers = getElementHandlers( namespaceURI );
    124 		return (ElementHandler)handlers.get( localName );
    125 	}
    126
    127 	/***
    128 	 * 指定されたネームスペース用の ElementHandler マップを取得します。
    129 	 * @param	namespaceURI	ネームスペースの URI
    130 	 * @return	ElementHandler マップ
    131 	 */
    132 	private Map getElementHandlers( String namespaceURI )
    133 	{
    134 		Map	handlers = (Map)_registry.get( namespaceURI );
    135 		if( handlers == null )	{
    136 			handlers = new java.util.HashMap( 89 );
    137 			_registry.put( namespaceURI, handlers );
    138 		}
    139 		return handlers;
    140 	}
    141
    142
    143
    144 	/***
    145 	 * <code>HandlerRegistry</code> の新しいインスタンスを生成します。
    146 	 */
    147 	public static HandlerRegistry newInstance()
    148 	{
    149 		HandlerRegistry	instance = new HandlerRegistry();
    150
    151 		instance.register( ElementHandler.NAMESPACE_SCENE, "select", new SelectHandler() );
    152
    153 		instance.register( ElementHandler.NAMESPACE_SCENE, "flag", new FlagHandler() );
    154 		instance.register( ElementHandler.NAMESPACE_SCENE, "wait", new WaitHandler() );
    155 		instance.register( ElementHandler.NAMESPACE_SCENE, "scene-flow", new SceneFlowHandler() );
    156
    157 		instance.register( ElementHandler.NAMESPACE_SCENE, "np", new NewPageHandler() );
    158 		instance.register( ElementHandler.NAMESPACE_SCENE, "p", new ParagraphHandler() );
    159
    160 		instance.register( ElementHandler.NAMESPACE_SCENE, "head", new HeadHandler() );
    161
    162 		ActorHandler	actorHandler = new ActorHandler();
    163 		instance.register( ElementHandler.NAMESPACE_SCENE, "enter", actorHandler );
    164 		instance.register( ElementHandler.NAMESPACE_SCENE, "action", actorHandler );
    165 		instance.register( ElementHandler.NAMESPACE_SCENE, "exit", actorHandler );
    166
    167 		instance.register( ElementHandler.NAMESPACE_SCENE, "background", new BackgroundHandler() );
    168
    169 		SlideHandler	slideHandler = new SlideHandler();
    170 		instance.register( ElementHandler.NAMESPACE_SCENE, "show-slide", slideHandler );
    171 		instance.register( ElementHandler.NAMESPACE_SCENE, "hide-slide", slideHandler );
    172
    173 		instance.register( ElementHandler.NAMESPACE_SCENE, "at-once", new AtOnceHandler() );
    174
    175 		SoundHandler	soundHandler = new SoundHandler();
    176 		instance.register( ElementHandler.NAMESPACE_SCENE, "play-bgm", soundHandler );
    177 		instance.register( ElementHandler.NAMESPACE_SCENE, "stop-bgm", soundHandler );
    178 		instance.register( ElementHandler.NAMESPACE_SCENE, "play-se", soundHandler );
    179 		instance.register( ElementHandler.NAMESPACE_SCENE, "stop-se", soundHandler );
    180
    181 		return instance;
    182 	}
    183 }