--- /dev/null
+package mir.util.xml;\r
+\r
+import java.util.*;\r
+\r
+import org.xml.sax.InputSource;\r
+import org.xml.sax.SAXException;\r
+import org.xml.sax.Locator;\r
+import org.xml.sax.SAXParseException;\r
+import mir.util.ExceptionFunctions;\r
+\r
+/**\r
+ *\r
+ * <p>Title: </p>\r
+ * <p>Description: </p>\r
+ * <p>Copyright: Copyright (c) 2003</p>\r
+ * <p>Company: </p>\r
+ * @author not attributable\r
+ * @version 1.0\r
+ */\r
+class XMLSAXParserProvider implements XMLParserEngine.XMLParserProvider {\r
+ private boolean nameSpaceAware;\r
+\r
+ public XMLSAXParserProvider(boolean aNameSpaceAware) {\r
+ nameSpaceAware = aNameSpaceAware;\r
+ }\r
+\r
+ public void parse(java.io.Reader aReader, XMLParserEngine.XMLParserReceiver aReceiver) throws XMLParserExc, XMLParserFailure {\r
+ try {\r
+ javax.xml.parsers.SAXParserFactory parserFactory = javax.xml.parsers.SAXParserFactory.newInstance();\r
+\r
+ parserFactory.setNamespaceAware(true);\r
+ parserFactory.setValidating(true);\r
+ javax.xml.parsers.SAXParser parser = parserFactory.newSAXParser();\r
+\r
+ parser.parse(new InputSource(aReader), new SAXHandler(aReceiver));\r
+ }\r
+ catch (org.xml.sax.SAXException e) {\r
+ Throwable t = ExceptionFunctions.traceCauseException(e);\r
+\r
+ if (t instanceof XMLParserExc) {\r
+ throw (XMLParserExc) t;\r
+ }\r
+\r
+ if (t instanceof XMLParserFailure) {\r
+ throw (XMLParserFailure) t;\r
+ }\r
+\r
+ if (t instanceof SAXParseException) {\r
+ throw new XMLParserExc(t.getMessage());\r
+ }\r
+\r
+ throw new XMLParserFailure(t);\r
+ }\r
+ catch (Throwable t) {\r
+ throw new XMLParserFailure(t);\r
+ }\r
+ }\r
+\r
+ private class SAXHandler extends org.xml.sax.helpers.DefaultHandler {\r
+ private XMLParserEngine.XMLParserReceiver receiver;\r
+\r
+ public SAXHandler(XMLParserEngine.XMLParserReceiver aReceiver) throws XMLParserExc, XMLParserFailure {\r
+ super();\r
+\r
+ receiver = aReceiver;\r
+ receiver.startDocument();\r
+ }\r
+\r
+ public void setDocumentLocator(final Locator aLocator) {\r
+ receiver.setLocator(\r
+ new XMLParserEngine.XMLLocator() {\r
+ public int getLineNr() {\r
+ return aLocator.getLineNumber();\r
+ }\r
+\r
+ public int getColumnNr() {\r
+ return aLocator.getColumnNumber();\r
+ }\r
+ }\r
+ );\r
+ }\r
+\r
+ public void startElement(String aUri, String aLocalName, String aQualifiedName, org.xml.sax.Attributes anAttributes) throws org.xml.sax.SAXException {\r
+ try {\r
+ Map attributes = new java.util.HashMap();\r
+\r
+ XMLName tag;\r
+ if (nameSpaceAware) {\r
+ tag = new XMLName(aUri, XMLReaderTool.getPrefixFromQualifiedName(aQualifiedName), aLocalName);\r
+ for (int i=0; i<anAttributes.getLength(); i++)\r
+ attributes.put(\r
+ new XMLName(anAttributes.getURI(i),\r
+ XMLReaderTool.getPrefixFromQualifiedName(anAttributes.getQName(i)),\r
+ anAttributes.getLocalName(i)),\r
+ anAttributes.getValue(i));\r
+ }\r
+ else {\r
+ tag = new XMLName(aUri, XMLReaderTool.getPrefixFromQualifiedName(aQualifiedName),\r
+ XMLReaderTool.getLocalNameFromQualifiedName(aQualifiedName));\r
+ for (int i=0; i<anAttributes.getLength(); i++)\r
+ attributes.put(\r
+ new XMLName(anAttributes.getURI(i),\r
+ XMLReaderTool.getPrefixFromQualifiedName(anAttributes.getQName(i)),\r
+ XMLReaderTool.getLocalNameFromQualifiedName(anAttributes.getQName(i))),\r
+ anAttributes.getValue(i));\r
+ }\r
+\r
+ receiver.startElement(tag, attributes);\r
+ }\r
+ catch (XMLParserExc e) {\r
+ throw new org.xml.sax.SAXParseException(e.getMessage(), null, e);\r
+ }\r
+ catch (Exception e) {\r
+ throw new SAXException(e);\r
+ }\r
+ }\r
+\r
+ public void endElement(String aUri, String aLocalName, String aQualifiedName) throws org.xml.sax.SAXException {\r
+ try\r
+ {\r
+ XMLName element = new XMLName(aUri, XMLReaderTool.getPrefixFromQualifiedName(aQualifiedName), aLocalName);\r
+\r
+ receiver.endElement(element);\r
+ }\r
+ catch (XMLParserExc e) {\r
+ throw new org.xml.sax.SAXParseException(e.getMessage(), null, e);\r
+ }\r
+ catch (Exception e) {\r
+ throw new org.xml.sax.SAXException(e);\r
+ }\r
+ }\r
+\r
+ public void endDocument() throws org.xml.sax.SAXException {\r
+ try\r
+ {\r
+ receiver.endDocument();\r
+ }\r
+ catch (XMLParserExc e) {\r
+ throw new org.xml.sax.SAXParseException(e.getMessage(), null, e);\r
+ }\r
+ catch (Exception e) {\r
+ throw new org.xml.sax.SAXException(e);\r
+ }\r
+ }\r
+\r
+ public void characters(char[] aBuffer, int aStart, int anEnd) throws org.xml.sax.SAXException {\r
+ try {\r
+ String text = new String(aBuffer, aStart, anEnd);\r
+\r
+ receiver.text(text);\r
+ }\r
+ catch (XMLParserExc e) {\r
+ throw new org.xml.sax.SAXParseException(e.getMessage(), null, e);\r
+ }\r
+ catch (Exception e) {\r
+ throw new org.xml.sax.SAXException(e);\r
+ }\r
+ }\r
+ }\r
+}\r