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<QName, Object> implements ProvidedContent {
}
/*
- * ATTRIBUTES OPERATIONS
+ * ATTRIBUTES MAP IMPLEMENTATION
*/
-// protected abstract Iterable<QName> keys();
-//
-// protected abstract void removeAttr(QName key);
-
@Override
public Set<Entry<QName, Object>> entrySet() {
Set<Entry<QName, Object>> 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;
@SuppressWarnings("unchecked")
@Override
- public <A> Optional<List<A>> getMultiple(QName key, Class<A> clss) {
+ public <A> List<A> getMultiple(QName key, Class<A> clss) {
Object value = get(key);
if (value == null)
- return Optional.empty();
+ return new ArrayList<>();
if (value instanceof List) {
- try {
- List<A> res = (List<A>) value;
- return Optional.of(res);
- } catch (ClassCastException e) {
- List<A> 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<A>) value;
+ List<A> 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);
}
}
return ancestors.size();
}
+ @Override
+ public boolean isRoot() {
+ return CrName.root.qName().equals(getName());
+ }
+
@Override
public String getSessionLocalId() {
return getPath();
/*
* 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() {
@Override
public <A> Optional<A> get(QName key, Class<A> clss) {
- return null;
+ return Optional.empty();
}
protected void removeAttr(QName key) {