cleanup / abuse system fix / prepping for a release
[mir.git] / source / mir / util / xml / XMLSAXParserProvider.java
1 package mir.util.xml;
2
3 import java.util.Map;
4
5 import mir.util.ExceptionRoutines;
6
7 import org.xml.sax.InputSource;
8 import org.xml.sax.Locator;
9 import org.xml.sax.SAXException;
10 import org.xml.sax.SAXParseException;
11
12 /**
13  *
14  * <p>Title: </p>
15  * <p>Description: </p>
16  * <p>Copyright: Copyright (c) 2003</p>
17  * <p>Company: </p>
18  * @author not attributable
19  * @version 1.0
20  */
21 class XMLSAXParserProvider implements XMLParserEngine.XMLParserProvider {
22   private boolean nameSpaceAware;
23
24   public XMLSAXParserProvider(boolean aNameSpaceAware) {
25     nameSpaceAware = aNameSpaceAware;
26   }
27
28   public void parse(java.io.Reader aReader, XMLParserEngine.XMLParserReceiver aReceiver) throws XMLParserExc, XMLParserFailure {
29     try {
30       javax.xml.parsers.SAXParserFactory parserFactory = javax.xml.parsers.SAXParserFactory.newInstance();
31
32       parserFactory.setNamespaceAware(true);
33       parserFactory.setValidating(true);
34       javax.xml.parsers.SAXParser parser = parserFactory.newSAXParser();
35
36       parser.parse(new InputSource(aReader), new SAXHandler(aReceiver));
37     }
38     catch (org.xml.sax.SAXException e) {
39       Throwable t = ExceptionRoutines.traceCauseException(e);
40
41       if (t instanceof XMLParserExc) {
42         throw (XMLParserExc) t;
43       }
44
45       if (t instanceof XMLParserFailure) {
46         throw (XMLParserFailure) t;
47       }
48
49       if (t instanceof SAXParseException) {
50         throw new XMLParserExc(t.getMessage());
51       }
52
53       throw new XMLParserFailure(t);
54     }
55     catch (Throwable t) {
56       throw new XMLParserFailure(t);
57     }
58   }
59
60   private class SAXHandler extends org.xml.sax.helpers.DefaultHandler {
61     private XMLParserEngine.XMLParserReceiver receiver;
62
63     public SAXHandler(XMLParserEngine.XMLParserReceiver aReceiver) throws XMLParserExc, XMLParserFailure {
64       super();
65
66       receiver = aReceiver;
67       receiver.startDocument();
68    }
69
70     public void setDocumentLocator(final Locator aLocator) {
71       receiver.setLocator(
72           new XMLParserEngine.XMLLocator() {
73             public int getLineNr() {
74               return aLocator.getLineNumber();
75             }
76
77             public int getColumnNr() {
78               return aLocator.getColumnNumber();
79             }
80           }
81       );
82     }
83
84     public void startElement(String aUri, String aLocalName, String aQualifiedName, org.xml.sax.Attributes anAttributes) throws org.xml.sax.SAXException {
85       try {
86         Map attributes = new java.util.HashMap();
87
88         XMLName tag;
89         if (nameSpaceAware) {
90           tag = new XMLName(aUri, XMLReaderTool.getPrefixFromQualifiedName(aQualifiedName), aLocalName);
91           for (int i=0; i<anAttributes.getLength(); i++)
92             attributes.put(
93                 new XMLName(anAttributes.getURI(i),
94                             XMLReaderTool.getPrefixFromQualifiedName(anAttributes.getQName(i)),
95                             anAttributes.getLocalName(i)),
96                 anAttributes.getValue(i));
97         }
98         else {
99           tag = new XMLName(aUri, XMLReaderTool.getPrefixFromQualifiedName(aQualifiedName),
100                       XMLReaderTool.getLocalNameFromQualifiedName(aQualifiedName));
101           for (int i=0; i<anAttributes.getLength(); i++)
102             attributes.put(
103                 new XMLName(anAttributes.getURI(i),
104                            XMLReaderTool.getPrefixFromQualifiedName(anAttributes.getQName(i)),
105                            XMLReaderTool.getLocalNameFromQualifiedName(anAttributes.getQName(i))),
106                 anAttributes.getValue(i));
107         }
108
109         receiver.startElement(tag, attributes);
110       }
111       catch (XMLParserExc e) {
112         throw new org.xml.sax.SAXParseException(e.getMessage(), null, e);
113       }
114       catch (Exception e) {
115         throw new SAXException(e);
116       }
117     }
118
119     public void endElement(String aUri, String aLocalName, String aQualifiedName) throws org.xml.sax.SAXException {
120       try
121       {
122         XMLName element = new XMLName(aUri, XMLReaderTool.getPrefixFromQualifiedName(aQualifiedName), aLocalName);
123
124         receiver.endElement(element);
125       }
126       catch (XMLParserExc e) {
127         throw new org.xml.sax.SAXParseException(e.getMessage(), null, e);
128       }
129       catch (Exception e) {
130         throw new org.xml.sax.SAXException(e);
131       }
132     }
133
134     public void endDocument() throws org.xml.sax.SAXException {
135       try
136       {
137         receiver.endDocument();
138       }
139       catch (XMLParserExc e) {
140         throw new org.xml.sax.SAXParseException(e.getMessage(), null, e);
141       }
142       catch (Exception e) {
143         throw new org.xml.sax.SAXException(e);
144       }
145     }
146
147     public void characters(char[] aBuffer, int aStart, int anEnd) throws org.xml.sax.SAXException {
148       try {
149         String text = new String(aBuffer, aStart, anEnd);
150
151         receiver.text(text);
152       }
153       catch (XMLParserExc e) {
154         throw new org.xml.sax.SAXParseException(e.getMessage(), null, e);
155       }
156       catch (Exception e) {
157         throw new org.xml.sax.SAXException(e);
158       }
159     }
160   }
161 }