OSDN Git Service

modify javadoc paragraph.
[mikutoga/Pmd2XML.git] / src / main / java / jp / sfjp / mikutoga / pmd / model / xml / XmlPmdLoader.java
1 /*
2  * xml to pmd loader
3  *
4  * License : The MIT License
5  * Copyright(c) 2013 MikuToga Partners
6  */
7
8 package jp.sfjp.mikutoga.pmd.model.xml;
9
10 import java.io.IOException;
11 import jp.sfjp.mikutoga.pmd.model.PmdModel;
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 XmlPmdLoader {
21
22     private static final String SAXFEATURES_NAMESPACES =
23             "http://xml.org/sax/features/namespaces";
24
25     private final XMLReader reader;
26
27
28     /**
29      * コンストラクタ。
30      *
31      * <p>XMLリーダは名前空間をサポートしていなければならない。
32      *
33      * @param reader XMLリーダ
34      * @throws NullPointerException 引数がnull
35      * @throws SAXException 機能不足のXMLリーダが渡された
36      */
37     public XmlPmdLoader(XMLReader reader)
38             throws NullPointerException, SAXException {
39         super();
40
41         if(reader == null) throw new NullPointerException();
42         if( ! reader.getFeature(SAXFEATURES_NAMESPACES) ){
43             throw new SAXException();
44         }
45
46         this.reader = reader;
47
48         return;
49     }
50
51
52     /**
53      * XMLのパースを開始する。
54      *
55      * @param source XML入力
56      * @return モデルデータ
57      * @throws SAXException 構文エラー
58      * @throws IOException 入力エラー
59      * @throws TogaXmlException 構文エラー
60      */
61     public PmdModel parse(InputSource source)
62             throws SAXException, IOException, TogaXmlException{
63         XmlHandler saxHandler = new XmlHandler();
64         this.reader.setContentHandler(saxHandler);
65
66         try{
67             this.reader.parse(source);
68         }catch(SAXException e){
69             Throwable cause = e.getCause();
70             if(cause instanceof TogaXmlException){
71                 throw (TogaXmlException) cause;
72             }
73             throw e;
74         }
75
76         return saxHandler.getPmdModel();
77     }
78
79 }