OSDN Git Service

1.105.3-SNAPSHOT版開発開始
[mikutoga/TogaGem.git] / src / main / java / jp / sourceforge / mikutoga / pmd / xml / PmdXmlResources.java
1 /*
2  * xml resources for PMD-XML
3  *
4  * License : The MIT License
5  * Copyright(c) 2010 MikuToga Partners
6  */
7
8 package jp.sourceforge.mikutoga.pmd.xml;
9
10 import java.net.URI;
11 import java.net.URISyntaxException;
12 import javax.xml.XMLConstants;
13 import javax.xml.parsers.DocumentBuilder;
14 import javax.xml.parsers.DocumentBuilderFactory;
15 import javax.xml.parsers.ParserConfigurationException;
16 import javax.xml.validation.Schema;
17 import javax.xml.validation.SchemaFactory;
18 import jp.sourceforge.mikutoga.xml.XmlResourceResolver;
19 import org.xml.sax.ErrorHandler;
20 import org.xml.sax.SAXException;
21
22 /**
23  * XML各種リソースの定義。
24  */
25 public final class PmdXmlResources {
26
27     public static final String NS_PMDXML =
28             "http://mikutoga.sourceforge.jp/xml/ns/pmdxml/101009";
29     public static final String SCHEMA_PMDXML =
30             "http://mikutoga.sourceforge.jp/xml/xsd/pmdxml-101009.xsd";
31     public static final String DTD_PMDXML =
32             "http://mikutoga.sourceforge.jp/xml/dtd/pmdxml-101009.dtd";
33     public static final String VER_PMDXML =
34             "101009";
35     public static final String LOCAL_SCHEMA_PMDXML =
36             "resources/pmdxml-101009.xsd";
37     public static final String LOCAL_DTD_PMDXML =
38             "resources/pmdxml-101009.dtd";
39
40     public static final URI URI_SCHEMA_PMDXML = URI.create(SCHEMA_PMDXML);
41     public static final URI URI_DTD_PMDXML = URI.create(DTD_PMDXML);
42     public static final URI RES_SCHEMA_PMDXML;
43     public static final URI RES_DTD_PMDXML;
44
45     private static final Class THISCLASS = PmdXmlResources.class;
46
47     static{
48         Object dummy = new PmdXmlResources();
49
50         try{
51             RES_SCHEMA_PMDXML =
52                     THISCLASS.getResource(LOCAL_SCHEMA_PMDXML).toURI();
53             RES_DTD_PMDXML =
54                     THISCLASS.getResource(LOCAL_DTD_PMDXML).toURI();
55         }catch(URISyntaxException e){
56             throw new ExceptionInInitializerError(e);
57         }
58     }
59
60     /**
61      * 隠しコンストラクタ。
62      */
63     private PmdXmlResources(){
64         super();
65         assert this.getClass().equals(THISCLASS);
66         return;
67     }
68
69     /**
70      * ビルダの生成。
71      * @param handler エラーハンドラ
72      * @return ビルダ
73      * @throws SAXException パースエラー
74      * @throws ParserConfigurationException 構成エラー
75      */
76     public static DocumentBuilder newBuilder(ErrorHandler handler)
77             throws SAXException, ParserConfigurationException {
78         XmlResourceResolver resolver = new XmlResourceResolver();
79         resolver.putURIMap(URI_SCHEMA_PMDXML, RES_SCHEMA_PMDXML);
80         resolver.putURIMap(URI_DTD_PMDXML, RES_DTD_PMDXML);
81
82         SchemaFactory schemaFactory =
83                 SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
84         schemaFactory.setResourceResolver(resolver);
85         schemaFactory.setErrorHandler(handler);
86         Schema schema = schemaFactory.newSchema();
87
88         DocumentBuilderFactory builderFactory =
89                 DocumentBuilderFactory.newInstance();
90         builderFactory.setCoalescing(true);
91         builderFactory.setExpandEntityReferences(true);
92         builderFactory.setIgnoringComments(true);
93         builderFactory.setIgnoringElementContentWhitespace(false);
94         builderFactory.setNamespaceAware(true);
95         builderFactory.setValidating(false);
96         builderFactory.setSchema(schema);
97
98         DocumentBuilder builder = builderFactory.newDocumentBuilder();
99         builder.setEntityResolver(resolver);
100         builder.setErrorHandler(handler);
101
102         return builder;
103     }
104
105 }