import javax.xml.namespace.QName;
/**
- * A semi-structured content, with attributes, within a hierarchical structure.
+ * A semi-structured content, with attributes, within a hierarchical structure
+ * whose nodes are named.
*/
-public interface Content extends Iterable<Content>, Map<QName, Object> {
+public interface Content extends QualifiedData<Content> {
/** The base of a repository path. */
String ROOT_PATH = "/";
* CONTENT OPERATIONS
*/
/** Adds a new empty {@link Content} to this {@link Content}. */
- Content add(QName name, QName... classes);
+ Content add(QName name, QName... contentClass);
+
+ default Content add(QName name, QNamed... contentClass) {
+ return add(name, toQNames(contentClass));
+ }
/**
* Adds a new {@link Content} to this {@link Content}, setting the provided
/** AND */
default boolean isContentClass(QNamed... contentClass) {
- List<QName> lst = new ArrayList<>();
- for (QNamed qNamed : contentClass)
- lst.add(qNamed.qName());
- return isContentClass(lst.toArray(new QName[lst.size()]));
+ return isContentClass(toQNames(contentClass));
}
/** OR */
/** OR */
default boolean hasContentClass(QNamed... contentClass) {
- List<QName> lst = new ArrayList<>();
- for (QNamed qNamed : contentClass)
- lst.add(qNamed.qName());
- return hasContentClass(lst.toArray(new QName[lst.size()]));
+ return hasContentClass(toQNames(contentClass));
+ }
+
+ static QName[] toQNames(QNamed... names) {
+ QName[] res = new QName[names.length];
+ for (int i = 0; i < names.length; i++)
+ res[i] = names[i].qName();
+ return res;
}
/*
return Optional.of(res.get(0));
}
+ default Content soleOrAddChild(QName name, QName... classes) {
+ return soleChild(name).orElseGet(() -> this.add(name, classes));
+ }
+
default Content child(QName name) {
return soleChild(name).orElseThrow();
}