X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.api.acr%2Fsrc%2Forg%2Fargeo%2Fapi%2Facr%2FContent.java;h=3cdf8d7dbec044f6a3a0c7a40fbe092b407a2b86;hb=975fb5e581d0650768afc68a0e839657f318e77a;hp=c2202b0fa31e14ad7db87a0f104390beaa792a7f;hpb=e3db2eba9a7f8380a6f76d7b0e6cd4825e91893e;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 c2202b0fa..3cdf8d7db 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 @@ -2,6 +2,7 @@ package org.argeo.api.acr; import java.io.Closeable; import java.io.IOException; +import java.util.Collection; import java.util.List; import java.util.Map; import java.util.Optional; @@ -89,10 +90,47 @@ public interface Content extends Iterable, Map { void remove(); + /* + * TYPING + */ + List getContentClasses(); + + default void addContentClasses(QName... contentClass) { + throw new UnsupportedOperationException("Adding content classes to " + getPath() + " is not supported"); + } + + /** AND */ + default boolean isContentClass(QName... contentClass) { + List contentClasses = getContentClasses(); + for (QName cClass : contentClass) { + if (!contentClasses.contains(cClass)) + return false; + } + return true; + } + + /** OR */ + default boolean hasContentClass(QName... contentClass) { + List contentClasses = getContentClasses(); + for (QName cClass : contentClass) { + if (contentClasses.contains(cClass)) + return true; + } + return false; + } + + /* + * SIBLINGS + */ + + default int getSiblingIndex() { + return 1; + } + /* * DEFAULT METHODS */ - default A adapt(Class clss) throws IllegalArgumentException { + default A adapt(Class clss) { throw new UnsupportedOperationException("Cannot adapt content " + this + " to " + clss.getName()); } @@ -104,12 +142,52 @@ public interface Content extends Iterable, Map { throw new UnsupportedOperationException("Cannot write content " + this + " as " + clss.getName()); } + /* + * CHILDREN + */ + + default boolean hasChild(QName name) { + for (Content child : this) { + if (child.getName().equals(name)) + return true; + } + return false; + } + + default Content anyOrAddChild(QName name, QName... classes) { + Content child = anyChild(name); + if (child != null) + return child; + return this.add(name, classes); + } + + /** Any child with this name, or null if there is none */ + default Content anyChild(QName name) { + for (Content child : this) { + if (child.getName().equals(name)) + return child; + } + return null; + } + /* * CONVENIENCE METHODS */ -// default String attr(String key) { -// return get(key, String.class); -// } + default String attr(String key) { + Object obj = get(key); + if (obj == null) + return null; + return obj.toString(); + + } + + default String attr(QName key) { + Object obj = get(key); + if (obj == null) + return null; + return obj.toString(); + + } // // default String attr(Object key) { // return key != null ? attr(key.toString()) : attr(null);