1 |
|
|
2 |
|
|
3 |
|
|
4 |
|
|
5 |
|
|
6 |
|
|
7 |
|
|
8 |
|
|
9 |
|
package tsukuba_bunko.peko.scenario.structure; |
10 |
|
|
11 |
|
import java.io.InputStream; |
12 |
|
|
13 |
|
import java.net.URL; |
14 |
|
|
15 |
|
import java.util.Iterator; |
16 |
|
import java.util.Properties; |
17 |
|
|
18 |
|
import org.xml.sax.Attributes; |
19 |
|
|
20 |
|
import tsukuba_bunko.peko.Logger; |
21 |
|
import tsukuba_bunko.peko.PekoSystem; |
22 |
|
|
23 |
|
import tsukuba_bunko.peko.resource.ResourceManager; |
24 |
|
|
25 |
|
|
26 |
|
import tsukuba_bunko.peko.scenario.ElementHandler; |
27 |
|
import tsukuba_bunko.peko.scenario.NextSceneMapping; |
28 |
|
import tsukuba_bunko.peko.scenario.PSMLUtil; |
29 |
|
import tsukuba_bunko.peko.scenario.SceneContext; |
30 |
|
|
31 |
|
|
32 |
|
|
33 |
|
|
34 |
|
|
35 |
|
|
36 |
|
|
37 |
|
public class HeadHandler extends ElementHandler { |
38 |
|
|
39 |
|
|
40 |
|
|
41 |
|
|
42 |
0 |
protected StringBuffer _text = null; |
43 |
|
|
44 |
|
|
45 |
|
|
46 |
|
|
47 |
0 |
protected NextSceneMapping _nextSceneMapping = null; |
48 |
|
|
49 |
|
|
50 |
|
|
51 |
0 |
protected String _condition = null; |
52 |
|
|
53 |
|
|
54 |
|
|
55 |
|
|
56 |
|
|
57 |
|
public HeadHandler() |
58 |
|
{ |
59 |
0 |
super(); |
60 |
0 |
} |
61 |
|
|
62 |
|
|
63 |
|
|
64 |
|
|
65 |
|
|
66 |
|
public void endDocument() |
67 |
|
{ |
68 |
0 |
SceneContext context = getSceneContext(); |
69 |
0 |
if( context.getSceneTitle() == null ) { |
70 |
0 |
Logger.warn( MessageIDs.SCN5001W ); |
71 |
0 |
context.setSceneTitle( context.getSceneName() ); |
72 |
|
} |
73 |
0 |
ResourceManager resources = ResourceManager.getInstance(); |
74 |
0 |
PekoSystem.getInstance().getMainWindow().setTitle( context.getSceneTitle() + " - " + resources.getResource("game-info.title") ); |
75 |
0 |
} |
76 |
|
|
77 |
|
public void startElement( String namespaceURI, String localName, String qName, Attributes attrs ) |
78 |
|
{ |
79 |
0 |
if( localName.equals("property") ) { |
80 |
0 |
String name = PSMLUtil.getAttributeValue( attrs, "name" ); |
81 |
0 |
String file = PSMLUtil.getAttributeValue( attrs, "file" ); |
82 |
0 |
if( (name != null) && (name.length() > 0) ) { |
83 |
0 |
getSceneContext().setProperty( name, PSMLUtil.getAttributeValue(attrs, "value") ); |
84 |
0 |
} |
85 |
0 |
else if( (file != null) && (file.length() > 0) ) { |
86 |
0 |
ResourceManager resources = ResourceManager.getInstance(); |
87 |
0 |
URL sceneDir = resources.getLocationResources().getScenesDirecotryURL(); |
88 |
0 |
URL fileURL = null; |
89 |
|
try { |
90 |
0 |
fileURL = new URL( sceneDir, file ); |
91 |
|
} |
92 |
0 |
catch( Exception e ) { |
93 |
0 |
Logger.warn( MessageIDs.SCN5002W, new Object[]{getSceneContext().getCurrentPath()}, e ); |
94 |
0 |
return; |
95 |
0 |
} |
96 |
|
|
97 |
0 |
Properties properties = new Properties(); |
98 |
0 |
InputStream is = null; |
99 |
|
try { |
100 |
0 |
is = fileURL.openStream(); |
101 |
0 |
properties.load( is ); |
102 |
|
} |
103 |
0 |
catch( Exception e ) { |
104 |
0 |
Logger.warn( MessageIDs.SCN5002W, new Object[]{getSceneContext().getCurrentPath()}, e ); |
105 |
|
return; |
106 |
|
} |
107 |
|
finally { |
108 |
0 |
if( is != null ) { |
109 |
|
try { |
110 |
0 |
is.close(); |
111 |
|
} |
112 |
0 |
catch( Exception e ) { |
113 |
0 |
} |
114 |
0 |
} |
115 |
0 |
} |
116 |
|
|
117 |
0 |
SceneContext context = getSceneContext(); |
118 |
0 |
Iterator itr = properties.keySet().iterator(); |
119 |
0 |
String key = null; |
120 |
0 |
while( itr.hasNext() ) { |
121 |
0 |
key = (String)itr.next(); |
122 |
0 |
context.setProperty( key, properties.getProperty(key) ); |
123 |
0 |
} |
124 |
|
} |
125 |
0 |
} |
126 |
0 |
else if( "next-scene".equals(localName) ) { |
127 |
0 |
_nextSceneMapping = getSceneContext().getNextSceneMapping(); |
128 |
0 |
} |
129 |
0 |
else if( localName.equals("title") ) { |
130 |
0 |
_text = new StringBuffer(); |
131 |
0 |
} |
132 |
0 |
else if( localName.equals("scene-ref") ) { |
133 |
0 |
_text = new StringBuffer(); |
134 |
0 |
_condition = PSMLUtil.getAttributeValue( attrs, "if" ); |
135 |
0 |
if( _condition != null ) { |
136 |
0 |
_condition = _condition.trim(); |
137 |
|
} |
138 |
|
} |
139 |
0 |
} |
140 |
|
|
141 |
|
public void endElement( String namespaceURI, String localName, String qName ) |
142 |
|
{ |
143 |
0 |
if( localName.equals("title") ) { |
144 |
0 |
if( _text.length() == 0 ) { |
145 |
0 |
Logger.warn( MessageIDs.SCN5001W ); |
146 |
0 |
getSceneContext().setSceneTitle( getSceneContext().getSceneName() ); |
147 |
0 |
} |
148 |
|
else { |
149 |
0 |
getSceneContext().setSceneTitle( new String(_text) ); |
150 |
|
} |
151 |
0 |
} |
152 |
0 |
else if( localName.equals("scene-ref") ) { |
153 |
0 |
if( _text.length() > 0 ) { |
154 |
0 |
NextSceneMapping mapping = getSceneContext().getNextSceneMapping(); |
155 |
0 |
String sceneName = new String(_text).trim(); |
156 |
0 |
if( (_condition == null) || (_condition.length() == 0) ) { |
157 |
0 |
mapping.setDefaultSceneMapping( sceneName ); |
158 |
0 |
} |
159 |
|
else { |
160 |
0 |
mapping.addNextSceneMapping( _condition, sceneName ); |
161 |
|
} |
162 |
0 |
_condition = null; |
163 |
0 |
} |
164 |
|
} |
165 |
0 |
else if( localName.equals("next-scene") ) { |
166 |
0 |
_nextSceneMapping = null; |
167 |
|
} |
168 |
0 |
_text = null; |
169 |
0 |
} |
170 |
|
|
171 |
|
public void characters( char[] ch, int begin, class="keyword">int length ) |
172 |
|
{ |
173 |
0 |
if( _text != null ) { |
174 |
0 |
_text.append( ch, begin, length ); |
175 |
|
} |
176 |
0 |
} |
177 |
|
} |