X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms%2Fsrc%2Forg%2Fargeo%2Fcms%2Facr%2FAbstractContent.java;h=7eb4138ab64c8183a94143e8ff0780b0765540e4;hb=HEAD;hp=1cffef40ef5cc77f5be0783bfd5087ba48c1a565;hpb=975fb5e581d0650768afc68a0e839657f318e77a;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.cms/src/org/argeo/cms/acr/AbstractContent.java b/org.argeo.cms/src/org/argeo/cms/acr/AbstractContent.java index 1cffef40e..7eb4138ab 100644 --- a/org.argeo.cms/src/org/argeo/cms/acr/AbstractContent.java +++ b/org.argeo.cms/src/org/argeo/cms/acr/AbstractContent.java @@ -13,14 +13,15 @@ import java.util.Set; import javax.xml.namespace.QName; import org.argeo.api.acr.Content; +import org.argeo.api.acr.CrAttributeType; import org.argeo.api.acr.CrName; import org.argeo.api.acr.NamespaceUtils; import org.argeo.api.acr.spi.ProvidedContent; import org.argeo.api.acr.spi.ProvidedSession; -import org.argeo.util.LangUtils; +import org.argeo.cms.util.LangUtils; /** Partial reference implementation of a {@link ProvidedContent}. */ -public abstract class AbstractContent extends AbstractMap implements ProvidedContent { +public abstract class AbstractContent extends AbstractMap implements CmsContent { private final ProvidedSession session; // cache @@ -31,18 +32,22 @@ public abstract class AbstractContent extends AbstractMap impleme } /* - * ATTRIBUTES OPERATIONS + * ATTRIBUTES MAP IMPLEMENTATION */ -// protected abstract Iterable keys(); -// -// protected abstract void removeAttr(QName key); - @Override public Set> entrySet() { Set> result = new AttrSet(); return result; } + @Override + public Object get(Object key) { + return get((QName) key, Object.class).orElse(null); + } + + /* + * ATTRIBUTES OPERATIONS + */ @Override public Class getType(QName key) { return String.class; @@ -55,34 +60,23 @@ public abstract class AbstractContent extends AbstractMap impleme @SuppressWarnings("unchecked") @Override - public Optional> getMultiple(QName key, Class clss) { + public List getMultiple(QName key, Class clss) { Object value = get(key); if (value == null) - return Optional.empty(); + return new ArrayList<>(); if (value instanceof List) { - try { - List res = (List) value; - return Optional.of(res); - } catch (ClassCastException e) { - List res = new ArrayList<>(); - List lst = (List) value; - try { - for (Object o : lst) { - A item = (A) o; - res.add(item); - } - return Optional.of(res); - } catch (ClassCastException e1) { - return Optional.empty(); - } + if (clss.isAssignableFrom(Object.class)) + return (List) value; + List res = new ArrayList<>(); + List lst = (List) value; + for (Object o : lst) { + A item = CrAttributeType.cast(clss, o).get(); + res.add(item); } + return res; } else {// singleton - try { - A res = (A) value; - return Optional.of(Collections.singletonList(res)); - } catch (ClassCastException e) { - return Optional.empty(); - } + A res = CrAttributeType.cast(clss, value).get(); + return Collections.singletonList(res); } } @@ -102,7 +96,7 @@ public abstract class AbstractContent extends AbstractMap impleme if (CrName.root.qName().equals(name)) continue ancestors; - path.append('/'); + path.append(PATH_SEPARATOR); path.append(NamespaceUtils.toPrefixedName(name)); int siblingIndex = c.getSiblingIndex(); if (siblingIndex != 1) @@ -127,6 +121,11 @@ public abstract class AbstractContent extends AbstractMap impleme return ancestors.size(); } + @Override + public boolean isRoot() { + return CrName.root.qName().equals(getName()); + } + @Override public String getSessionLocalId() { return getPath(); @@ -153,10 +152,10 @@ public abstract class AbstractContent extends AbstractMap impleme /* * UTILITIES */ - protected boolean isDefaultAttrTypeRequested(Class clss) { - // check whether clss is Object.class - return clss.isAssignableFrom(Object.class); - } +// protected boolean isDefaultAttrTypeRequested(Class clss) { +// // check whether clss is Object.class +// return clss.isAssignableFrom(Object.class); +// } // @Override // public String toString() { @@ -190,7 +189,7 @@ public abstract class AbstractContent extends AbstractMap impleme @Override public Optional get(QName key, Class clss) { - return null; + return Optional.empty(); } protected void removeAttr(QName key) {