OSDN Git Service

本番スキーマ移行
[mikutoga/Vmd2XML.git] / src / main / java / jp / sfjp / mikutoga / vmd / model / xml / SaxFlagListener.java
1 /*
2  * motion flag listener from XML
3  *
4  * License : The MIT License
5  * Copyright(c) 2013 MikuToga Partners
6  */
7
8 package jp.sfjp.mikutoga.vmd.model.xml;
9
10 import java.util.List;
11 import jp.sfjp.mikutoga.vmd.model.IkSwitch;
12 import jp.sfjp.mikutoga.vmd.model.NumberedVmdFlag;
13 import jp.sfjp.mikutoga.vmd.model.VmdMotion;
14 import jp.sfjp.mikutoga.xml.SaxAttr;
15 import org.xml.sax.Attributes;
16
17 /**
18  * モーションフラグ関連のXML要素出現イベントを受信する。
19  */
20 class SaxFlagListener extends SaxVmdListener {
21
22     private NumberedVmdFlag currentFlagMotion = null;
23
24
25     /**
26      * コンストラクタ。
27      */
28     SaxFlagListener(){
29         super();
30         return;
31     }
32
33
34     /**
35      * {@inheritDoc}
36      * @param tag {@inheritDoc}
37      * @param attr {@inheritDoc}
38      */
39     @Override
40     void openTag(VmdTag tag, Attributes attr){
41         switch(tag){
42         case FLAG_MOTION:
43             openFlagMotion(attr);
44             break;
45         case IK_SWITCH:
46             openIkSwitch(attr);
47             break;
48         default:
49             break;
50         }
51
52         return;
53     }
54
55     /**
56      * {@inheritDoc}
57      * @param tag {@inheritDoc}
58      */
59     @Override
60     void closeTag(VmdTag tag){
61         if(tag == VmdTag.FLAG_MOTION){
62             closeFlagMotion();
63         }
64         return;
65     }
66
67     /**
68      * flagMotion要素開始の通知。
69      * @param attr 属性群
70      */
71     private void openFlagMotion(Attributes attr){
72         this.currentFlagMotion = new NumberedVmdFlag();
73
74         int frameNo = SaxAttr.getIntAttr(attr, XmlAttr.ATTR_FRAME);
75         boolean showModel =
76                 SaxAttr.getBooleanAttr(attr, XmlAttr.ATTR_SHOWMODEL);
77
78         this.currentFlagMotion.setFrameNumber(frameNo);
79         this.currentFlagMotion.setModelShown(showModel);
80
81         return;
82     }
83
84     /**
85      * flagMotion要素終了の通知。
86      */
87     private void closeFlagMotion(){
88         VmdMotion motion = getVmdMotion();
89         List<NumberedVmdFlag> flagList = motion.getNumberedFlagList();
90         flagList.add(this.currentFlagMotion);
91
92         this.currentFlagMotion = null;
93
94         return;
95     }
96
97     /**
98      * ikSwitch要素開始の通知。
99      * @param attr 属性群
100      */
101     private void openIkSwitch(Attributes attr){
102         String boneName = SaxAttr.getStringAttr(attr, XmlAttr.ATTR_NAME);
103         boolean valid =
104                 SaxAttr.getBooleanAttr(attr, XmlAttr.ATTR_VALID);
105
106         IkSwitch ikSw = new IkSwitch();
107         ikSw.setBoneName(boneName);
108         ikSw.setValid(valid);
109
110         List<IkSwitch> ikList = this.currentFlagMotion.getIkSwitchList();
111         ikList.add(ikSw);
112
113         return;
114     }
115
116 }