rebuilding head
[mir.git] / source / mir / util / xml / XMLSAXParserProvider.java
diff --git a/source/mir/util/xml/XMLSAXParserProvider.java b/source/mir/util/xml/XMLSAXParserProvider.java
new file mode 100755 (executable)
index 0000000..0e8a851
--- /dev/null
@@ -0,0 +1,160 @@
+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