X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;ds=sidebyside;f=org.argeo.api.acr%2Fsrc%2Forg%2Fargeo%2Fapi%2Facr%2FContent.java;h=df5c149e6fc1fc696187d197766ad5f9cf0c2c52;hb=7b90373ca37766e80fa5b127e6a2dcd90a9dc94f;hp=d48f583fd7c84e4fc33c5f97f8493664c609f3b6;hpb=8bbdd7218a657cf3d9ee05521c08051d2577e654;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 d48f583fd..df5c149e6 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 @@ -16,6 +16,8 @@ import javax.xml.namespace.QName; * A semi-structured content, with attributes, within a hierarchical structure. */ public interface Content extends Iterable, Map { + /** The base of a repository path. */ + String ROOT_PATH = "/"; QName getName(); @@ -82,25 +84,11 @@ public interface Content extends Iterable, Map { } List res = getMultiple(key, type); return res; -// if (res == null) -// return null; -// else { -// if (res.isEmpty()) -// throw new IllegalStateException("Metadata " + key + " is not availabel as list of type " + type); -// return res.get(); -// } } /* * CONTENT OPERATIONS */ -// default CompletionStage edit(Consumer work) { -// return CompletableFuture.supplyAsync(() -> { -// work.accept(this); -// return this; -// }).minimalCompletionStage(); -// } - Content add(QName name, QName... classes); default Content add(String name, QName... classes) { @@ -222,6 +210,14 @@ public interface Content extends Iterable, Map { return res; } + default List children(QNamed name) { + return children(name.qName()); + } + + default Optional soleChild(QNamed name) { + return soleChild(name.qName()); + } + default Optional soleChild(QName name) { List res = children(name); if (res.isEmpty()) @@ -251,11 +247,7 @@ public interface Content extends Iterable, Map { * @see Object#toString() */ default String attr(QName key) { - // TODO check String type? - Object obj = get(key); - if (obj == null) - return null; - return obj.toString(); + return get(key, String.class).orElse(null); } /** @@ -282,6 +274,16 @@ public interface Content extends Iterable, Map { return attr(unqualified(key)); } + /* + * CONTEXT + */ + /** + * A content within this repository + * + * @param path either an absolute path or a path relative to this content + */ + Optional getContent(String path); + /* * EXPERIMENTAL UNSUPPORTED */