rebuilding head
[mir.git] / source / mir / util / xml / XMLReaderTool.java
diff --git a/source/mir/util/xml/XMLReaderTool.java b/source/mir/util/xml/XMLReaderTool.java
new file mode 100755 (executable)
index 0000000..fb4859d
--- /dev/null
@@ -0,0 +1,166 @@
+/*
+ * Copyright (C) 2001, 2002 The Mir-coders group
+ *
+ * This file is part of Mir.
+ *
+ * Mir is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * Mir is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Mir; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * In addition, as a special exception, The Mir-coders gives permission to link
+ * the code of this program with  any library licensed under the Apache Software License,
+ * The Sun (tm) Java Advanced Imaging library (JAI), The Sun JIMI library
+ * (or with modified versions of the above that use the same license as the above),
+ * and distribute linked combinations including the two.  You must obey the
+ * GNU General Public License in all respects for all of the code used other than
+ * the above mentioned libraries.  If you modify this file, you may extend this
+ * exception to your version of the file, but you are not obligated to do so.
+ * If you do not wish to do so, delete this exception statement from your version.
+ */
+package mir.util.xml;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+public class XMLReaderTool {
+  public static void checkValidIdentifier(String anIdentifier) throws XMLParserExc {
+  }
+
+  public static String getStringAttributeWithDefault(java.util.Map anAttributes, String aKey, String aDefault) {
+    if (anAttributes.containsKey(aKey))
+      return (String) anAttributes.get(aKey);
+    else
+      return aDefault;
+  }
+
+  public static void checkIntegerAttribute(java.util.Map anAttributes, String aKey) throws XMLParserExc {
+    try {
+      Integer.parseInt((String) anAttributes.get(aKey));
+    }
+    catch (Throwable t) {
+      throw new XMLParserExc("attribute '"+aKey+"' is not an integer" );
+    }
+  }
+
+  public static int getIntegerAttributeWithDefault(java.util.Map anAttributes, String aKey, int aDefault) throws XMLParserExc  {
+    if (anAttributes.containsKey(aKey)) {
+      checkIntegerAttribute(anAttributes, aKey);
+
+      return Integer.parseInt((String) anAttributes.get(aKey));
+    }
+    else
+      return aDefault;
+  }
+
+  public static void checkAttributes(java.util.Map anAttributes, String[] aRequiredAttributes, String[] anOptionalAttributes)  throws XMLParserExc {
+    checkAttributeSet(anAttributes.keySet(),
+       new java.util.HashSet(java.util.Arrays.asList(aRequiredAttributes)),
+       new java.util.HashSet(java.util.Arrays.asList(anOptionalAttributes)));
+  }
+
+  public static void checkAttributeSet(java.util.Set aSet, java.util.Set aRequiredElements, java.util.Set anOptionalElements) throws XMLParserExc{
+    java.util.Iterator i;
+
+    i = aSet.iterator();
+    while (i.hasNext()) {
+      Object item = i.next();
+
+      if (!(aRequiredElements.contains(item) || anOptionalElements.contains(item)))
+        throw new XMLParserExc("unknown attribute '" + item + "'" );
+    }
+
+    i = aRequiredElements.iterator();
+    while (i.hasNext()) {
+      Object item = i.next();
+
+      if (!(aSet.contains(item)))
+        throw new XMLParserExc("missing required attribute '" + item + "'" );
+    }
+
+  }
+
+  /**
+   * Returns the namespace part of a qualified XML Tag name <br>
+   * Example:<br>
+   * <code>getPrefixFromQualifiedName("dc:creator");</code> <br>
+   * will return <code>"dc"</code>
+   */
+
+  public static String getPrefixFromQualifiedName(String aQualifiedName) {
+    java.util.List parts = mir.util.StringRoutines.splitString(aQualifiedName, ":");
+
+    if (parts.size()<=1)
+      return "";
+    else
+      return (String) parts.get(0);
+  }
+
+  /**
+   * Returns the localname part of a qualified XML Tag name <br>
+   * Example:<br>
+   * <code>getLocalNameFromQualifiedName("dc:creator");</code> <br>
+   * will return <code>"creator"</code>
+   */
+  public static String getLocalNameFromQualifiedName(String aQualifiedName) {
+    java.util.List parts = mir.util.StringRoutines.separateString(aQualifiedName, ":");
+
+    if (parts.size()<1)
+      return null;
+
+    if (parts.size()==1)
+      return (String) parts.get(0);
+    else
+      return (String) parts.get(1);
+  }
+
+  /**
+   * Creates an {@link XMLName} out of qualified name by splitting on the
+   *    <code>:</code>.
+   */
+  public static XMLName getXMLNameForQualifiedName(String aQualifiedName) {
+    return new XMLName(
+        null,
+        getPrefixFromQualifiedName(aQualifiedName),
+        getLocalNameFromQualifiedName(aQualifiedName));
+  }
+
+  /**
+   * Turns a Map with {@link XMLName} keys into a map with {@link String} keys,
+   *    by taking the <code>XMLName</code>'s local name
+   */
+  public static Map convertXMLAttributeMap(Map anXMLAttributeMap) {
+    Map result = new HashMap();
+
+    Iterator i = anXMLAttributeMap.entrySet().iterator();
+
+    while (i.hasNext()) {
+      Map.Entry entry = (Map.Entry) i.next();
+
+      result.put(
+          ((XMLName) entry.getKey()).getLocalName(),
+          entry.getValue());
+    }
+
+    return result;
+  }
+
+  /** formats an XML name as it would look in an XML file */
+  public static String normalizeXMLName(mir.util.xml.XMLName aName) {
+    String result = aName.getLocalName();
+    if (aName.getPrefix().length() > 0)
+      result = aName.getPrefix() + ":" + result;
+
+    return result;
+  }
+}