X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms%2Fsrc%2Forg%2Fargeo%2Fcms%2Facr%2FAbstractContent.java;h=c6e07e638b9b24b7bd0ebee667446b5de25b05ed;hb=e5f2dcdb553b5da76c7727af8aa24c83ed397d35;hp=0aa4e9d4f783d770d9c2e1b44ecdef76ec854129;hpb=1d9f61172318be0dbf7f219d140ba01c4c29cdc9;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 0aa4e9d4f..c6e07e638 100644 --- a/org.argeo.cms/src/org/argeo/cms/acr/AbstractContent.java +++ b/org.argeo.cms/src/org/argeo/cms/acr/AbstractContent.java @@ -14,16 +14,17 @@ import javax.xml.namespace.QName; import org.argeo.api.acr.Content; 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 { private final ProvidedSession session; // cache - private String _path = null; +// private String _path = null; public AbstractContent(ProvidedSession session) { this.session = session; @@ -54,34 +55,27 @@ 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 null; + 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 (isDefaultAttrTypeRequested(clss)) + return (List) value; + List res = new ArrayList<>(); + List lst = (List) value; + for (Object o : lst) { + A item = clss.isAssignableFrom(String.class) ? (A) o.toString() : (A) o; + res.add(item); } + return res; } else {// singleton - try { - A res = (A) value; - return Optional.of(Collections.singletonList(res)); - } catch (ClassCastException e) { - return Optional.empty(); - } +// try { + A res = (A) value; + return Collections.singletonList(res); +// } catch (ClassCastException e) { +// return Optional.empty(); +// } } } @@ -91,19 +85,25 @@ public abstract class AbstractContent extends AbstractMap impleme @Override public String getPath() { - if (_path != null) - return _path; +// if (_path != null) +// return _path; List ancestors = new ArrayList<>(); collectAncestors(ancestors, this); StringBuilder path = new StringBuilder(); - for (Content c : ancestors) { + ancestors: for (Content c : ancestors) { QName name = c.getName(); - // FIXME - if (!CrName.root.qName().equals(name)) - path.append('/').append(name); + if (CrName.root.qName().equals(name)) + continue ancestors; + + path.append('/'); + path.append(NamespaceUtils.toPrefixedName(name)); + int siblingIndex = c.getSiblingIndex(); + if (siblingIndex != 1) + path.append('[').append(siblingIndex).append(']'); } - _path = path.toString(); - return _path; +// _path = path.toString(); +// return _path; + return path.toString(); } private void collectAncestors(List ancestors, Content content) { @@ -120,6 +120,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();