X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.api%2Fsrc%2Forg%2Fargeo%2Fapi%2Fgcr%2FContent.java;h=e35f42f27ab7519d1122790b009ac3b65121d6ff;hb=e5a22cdc7d0f4918f2740c626e1ab6384bd5ee44;hp=c5cee9f0e6676495acd7f791a98204bec9f6c8d8;hpb=06af25d84c049b149ee9db2235faeff3170b4f7e;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.api/src/org/argeo/api/gcr/Content.java b/org.argeo.api/src/org/argeo/api/gcr/Content.java index c5cee9f0e..e35f42f27 100644 --- a/org.argeo.api/src/org/argeo/api/gcr/Content.java +++ b/org.argeo.api/src/org/argeo/api/gcr/Content.java @@ -2,38 +2,83 @@ package org.argeo.api.gcr; import java.util.Map; -public interface Content extends Iterable, Map { +import javax.xml.XMLConstants; +import javax.xml.namespace.QName; - String getName(); +/** + * A semi-structured content, with attributes, within a hierarchical structure. + */ +public interface Content extends Iterable, Map { -// Iterable keys(); + QName getName(); - A get(String key, Class clss); + String getPath(); - ContentSession getSession(); + Content getParent(); /* - * DEFAULT METHODS + * ATTRIBUTES OPERATIONS */ - default A adapt(Class clss) { - return null; + + A get(QName key, Class 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)); } /* - * CONVENIENCE METHODS + * CONTENT OPERATIONS */ - default String attr(String key) { - return get(key, String.class); + 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); } - default String attr(Enum key) { - return attr(key.name()); + void remove(); + + /* + * DEFAULT METHODS + */ + default A adapt(Class clss) throws IllegalArgumentException { + throw new IllegalArgumentException("Cannot adapt content " + this + " to " + clss.getName()); } - default A get(Enum key, Class clss) { - return get(key.name(), clss); + default C open(Class clss) throws Exception, IllegalArgumentException { + throw new IllegalArgumentException("Cannot open content " + this + " as " + clss.getName()); } + /* + * 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 get(Object key, Class clss) { +// return key != null ? get(key.toString(), clss) : get(null, clss); +// } + /* * EXPERIMENTAL UNSUPPORTED */