Introduce namespace support
[lgpl/argeo-commons.git] / org.argeo.api / src / org / argeo / api / gcr / Content.java
index 9ce6ea4f6b3f70f4add3ac5895c5e603523622de..e35f42f27ab7519d1122790b009ac3b65121d6ff 100644 (file)
@@ -2,12 +2,15 @@ package org.argeo.api.gcr;
 
 import java.util.Map;
 
+import javax.xml.XMLConstants;
+import javax.xml.namespace.QName;
+
 /**
  * A semi-structured content, with attributes, within a hierarchical structure.
  */
-public interface Content extends Iterable<Content>, Map<String, Object> {
+public interface Content extends Iterable<Content>, Map<QName, Object> {
 
-       String getName();
+       QName getName();
 
        String getPath();
 
@@ -17,12 +20,36 @@ public interface Content extends Iterable<Content>, Map<String, Object> {
         * ATTRIBUTES OPERATIONS
         */
 
-       <A> A get(String key, Class<A> clss) throws IllegalArgumentException;
+       <A> A get(QName key, Class<A> clss) throws IllegalArgumentException;
+
+       default Object get(String key) {
+               if (key.indexOf(':') >= 0)
+                       throw new IllegalArgumentException("Name " + key + " has a prefix");
+               return get(new QName(XMLConstants.NULL_NS_URI, key, XMLConstants.DEFAULT_NS_PREFIX));
+       }
+
+       default Object put(String key, Object value) {
+               if (key.indexOf(':') >= 0)
+                       throw new IllegalArgumentException("Name " + key + " has a prefix");
+               return put(new QName(XMLConstants.NULL_NS_URI, key, XMLConstants.DEFAULT_NS_PREFIX), value);
+       }
+
+       default Object remove(String key) {
+               if (key.indexOf(':') >= 0)
+                       throw new IllegalArgumentException("Name " + key + " has a prefix");
+               return remove(new QName(XMLConstants.NULL_NS_URI, key, XMLConstants.DEFAULT_NS_PREFIX));
+       }
 
        /*
         * CONTENT OPERATIONS
         */
-       Content add(String name, ContentName... classes);
+       Content add(QName name, QName... classes);
+
+       default Content add(String name, QName... classes) {
+               if (name.indexOf(':') >= 0)
+                       throw new IllegalArgumentException("Name " + name + " has a prefix");
+               return add(new QName(XMLConstants.NULL_NS_URI, name, XMLConstants.DEFAULT_NS_PREFIX), classes);
+       }
 
        void remove();
 
@@ -40,17 +67,17 @@ public interface Content extends Iterable<Content>, Map<String, Object> {
        /*
         * CONVENIENCE METHODS
         */
-       default String attr(String key) {
-               return get(key, String.class);
-       }
-
-       default String attr(Object key) {
-               return key != null ? attr(key.toString()) : attr(null);
-       }
-
-       default <A> A get(Object key, Class<A> clss) {
-               return key != null ? get(key.toString(), clss) : get(null, clss);
-       }
+//     default String attr(String key) {
+//             return get(key, String.class);
+//     }
+//
+//     default String attr(Object key) {
+//             return key != null ? attr(key.toString()) : attr(null);
+//     }
+//
+//     default <A> A get(Object key, Class<A> clss) {
+//             return key != null ? get(key.toString(), clss) : get(null, clss);
+//     }
 
        /*
         * EXPERIMENTAL UNSUPPORTED