OSDN Git Service

本番スキーマ移行
[mikutoga/Vmd2XML.git] / src / main / java / jp / sfjp / mikutoga / vmd / model / xml / XmlVmdLoader.java
1 /*
2  * xml 2 vmd loader
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.io.IOException;
11 import jp.sfjp.mikutoga.vmd.model.VmdMotion;
12 import jp.sfjp.mikutoga.xml.TogaXmlException;
13 import org.xml.sax.InputSource;
14 import org.xml.sax.SAXException;
15 import org.xml.sax.XMLReader;
16
17 /**
18  * XMLモーションファイルを読み込むためのローダ。
19  */
20 public class XmlVmdLoader {
21
22     private final XMLReader reader;
23     private final XmlHandler handler = new XmlHandler();
24
25
26     /**
27      * コンストラクタ。
28      * <p>XMLリーダは名前空間をサポートしていなければならない。
29      * @param reader XMLリーダ
30      * @throws NullPointerException 引数がnull
31      */
32     public XmlVmdLoader(XMLReader reader) throws NullPointerException{
33         super();
34         if(reader == null) throw new NullPointerException();
35         this.reader = reader;
36         return;
37     }
38
39
40     /**
41      * XMLのパースを開始する。
42      * @param source XML入力
43      * @return モーションデータ
44      * @throws SAXException 構文エラー
45      * @throws IOException 入力エラー
46      * @throws TogaXmlException 構文エラー
47      */
48     public VmdMotion parse(InputSource source)
49             throws SAXException, IOException, TogaXmlException{
50         this.reader.setContentHandler(this.handler);
51
52         try{
53             this.reader.parse(source);
54         }catch(SAXException e){
55             Throwable cause = e.getCause();
56             if(cause instanceof TogaXmlException){
57                 throw (TogaXmlException) cause;
58             }
59             throw e;
60         }
61
62         return this.handler.getVmdMotion();
63     }
64
65 }