X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.api.acr%2Fsrc%2Forg%2Fargeo%2Fapi%2Facr%2FContent.java;h=f7600f540e63ea3b20311c94f2824cd2c7703151;hb=7b9869409642fbad1d219b2f7caec25b7a35c4aa;hp=df5c149e6fc1fc696187d197766ad5f9cf0c2c52;hpb=0bccba2b9f1ac5d0be1a06dcb4fe56859f641b9a;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.api.acr/src/org/argeo/api/acr/Content.java b/org.argeo.api.acr/src/org/argeo/api/acr/Content.java index df5c149e6..f7600f540 100644 --- a/org.argeo.api.acr/src/org/argeo/api/acr/Content.java +++ b/org.argeo.api.acr/src/org/argeo/api/acr/Content.java @@ -89,12 +89,29 @@ public interface Content extends Iterable, Map { /* * CONTENT OPERATIONS */ + /** Adds a new empty {@link Content} to this {@link Content}. */ Content add(QName name, QName... classes); + /** + * Adds a new {@link Content} to this {@link Content}, setting the provided + * attributes. The provided attributes can be used as hints by the + * implementation. In particular, setting {@link DName#getcontenttype} will + * imply that this content has a file semantic. + */ + default Content add(QName name, Map attrs, QName... classes) { + Content child = add(name, classes); + putAll(attrs); + return child; + } + default Content add(String name, QName... classes) { return add(unqualified(name), classes); } + default Content add(String name, Map attrs, QName... classes) { + return add(unqualified(name), attrs, classes); + } + void remove(); /* @@ -227,6 +244,10 @@ public interface Content extends Iterable, Map { 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(); }