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 }