1
2
3
4
5
6
7
8
9 package tsukuba_bunko.peko.scenario.util;
10
11 import org.xml.sax.Attributes;
12
13 import tsukuba_bunko.peko.Logger;
14
15 import tsukuba_bunko.peko.scenario.ElementHandler;
16 import tsukuba_bunko.peko.scenario.FlagScope;
17 import tsukuba_bunko.peko.scenario.PSMLUtil;
18
19
20 /***
21 * <samp>flag</samp> 要素を処理する ElementHandler 実装です。
22 * @author $Author: ppoi $
23 * @version $Revision: 1.1 $
24 */
25 public class FlagHandler extends ElementHandler {
26
27 /***
28 * フラグ ID
29 */
30 private String _flagID = null;
31
32 /***
33 * フラグスコープ
34 */
35 private FlagScope _scope = null;
36
37 /***
38 * フラグを立てるか降ろすか
39 */
40 private boolean _declare = true;
41
42
43 /***
44 * <code>FlagHandler</code> のインスタンスを生成します。
45 */
46 public FlagHandler()
47 {
48 super();
49 }
50
51
52
53
54
55 public void startDocument()
56 {
57 _flagID = null;
58 _declare = true;
59 _scope = null;
60 }
61
62 public void endDocument()
63 {
64 if( _flagID != null ) {
65 if( _declare ) {
66 getSceneContext().declareFlag( _flagID, _scope );
67 }
68 else {
69 getSceneContext().undeclareFlag( _flagID, _scope );
70 }
71 }
72 }
73
74 public void startElement( String namespaceURI, String localname, String qName, Attributes attrs )
75 {
76 String flagID = PSMLUtil.getAttributeValue( attrs, "id" );
77 if( flagID == null ) {
78 Logger.error( MessageIDs.SCN6002W, new Object[]{getSceneContext().getCurrentPath()} );
79 }
80 else {
81 _flagID = flagID;
82 }
83
84 String scope = PSMLUtil.getAttributeValue( attrs, "scope" );
85 if( "scene".equals(scope) ) {
86 _scope = FlagScope.SCENE;
87 }
88 else if( "session".equals(scope) ) {
89 _scope = FlagScope.SESSION;
90 }
91 else if( "system".equals(scope) ) {
92 _scope = FlagScope.SYSTEM;
93 }
94 else {
95 Logger.error( MessageIDs.SCN6003W, new Object[]{((scope == null)?"null":scope), getSceneContext().getCurrentPath()} );
96 _flagID = null;
97 }
98
99 String action = PSMLUtil.getAttributeValue( attrs, "action" );
100 if( action != null ) {
101 if( "undeclare".equals(action) ) {
102 _declare = false;
103 }
104 else if( "declare".equals(action) ) {
105 _declare = true;
106 }
107 else {
108 Logger.warn( MessageIDs.SCN6004W, new Object[]{getSceneContext().getCurrentPath()} );
109 _flagID = null;
110 }
111 }
112 else {
113 _declare = true;
114 }
115 }
116 }