3d5ff45829b1e28255e05f2c68d7d1175b3c7619
[javainspect.git] / src / main / java / eu / svjatoslav / inspector / xml / xsd / XSD.java
1 package eu.svjatoslav.inspector.xml.xsd;
2
3 import java.io.FileInputStream;
4 import java.io.FileNotFoundException;
5 import java.io.IOException;
6 import java.io.InputStream;
7 import java.util.HashMap;
8 import java.util.Map;
9
10 import javax.xml.parsers.DocumentBuilder;
11 import javax.xml.parsers.DocumentBuilderFactory;
12 import javax.xml.parsers.ParserConfigurationException;
13
14 import org.w3c.dom.Document;
15 import org.xml.sax.SAXException;
16
17 public class XSD {
18
19         private static final String XMLNS_PREFIX = "xmlns:";
20         Map<String, String> namespaces = new HashMap<String, String>();
21
22         private void detectNamespaces(final XmlElement xsdSchema) {
23                 for (final String attributeName : xsdSchema.getAttributeNames())
24
25                         if (attributeName.startsWith(XMLNS_PREFIX)) {
26                                 final String nameSpaceName = attributeName
27                                                 .substring(XMLNS_PREFIX.length());
28                                 namespaces.put(nameSpaceName,
29                                                 xsdSchema.getAttributeValue(attributeName));
30                         }
31         }
32
33         public void parse(final InputStream inputStream) {
34
35                 final DocumentBuilderFactory builderFactory = DocumentBuilderFactory
36                                 .newInstance();
37
38                 DocumentBuilder builder = null;
39                 try {
40                         builder = builderFactory.newDocumentBuilder();
41                 } catch (final ParserConfigurationException e) {
42                         e.printStackTrace();
43                 }
44
45                 Document document;
46                 try {
47                         document = builder.parse(inputStream);
48                 } catch (final SAXException e) {
49                         e.printStackTrace();
50                         return;
51                 } catch (final IOException e) {
52                         e.printStackTrace();
53                         return;
54                 }
55
56                 final XmlElement xsdSchema = new XmlElement(
57                                 document.getDocumentElement());
58
59                 detectNamespaces(xsdSchema);
60
61                 System.out.println(xsdSchema.toString());
62         }
63
64         public void parse(final String filePath) throws FileNotFoundException {
65
66                 final FileInputStream inputStream = new FileInputStream(filePath);
67
68                 parse(inputStream);
69         }
70
71         @Override
72         public String toString() {
73                 final StringBuffer result = new StringBuffer();
74
75                 result.append("namespaces:\n");
76
77                 for (final Map.Entry<String, String> entry : namespaces.entrySet())
78                         result.append("    " + entry.getKey() + " = " + entry.getValue()
79                                         + "\n");
80
81                 return result.toString();
82         }
83
84 }