1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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 }