First draft of GCR API
[lgpl/argeo-commons.git] / org.argeo.api / src / org / argeo / api / gcr / Content.java
diff --git a/org.argeo.api/src/org/argeo/api/gcr/Content.java b/org.argeo.api/src/org/argeo/api/gcr/Content.java
new file mode 100644 (file)
index 0000000..c5cee9f
--- /dev/null
@@ -0,0 +1,48 @@
+package org.argeo.api.gcr;
+
+import java.util.Map;
+
+public interface Content extends Iterable<Content>, Map<String, Object> {
+
+       String getName();
+
+//     Iterable<String> keys();
+
+       <A> A get(String key, Class<A> clss);
+
+       ContentSession getSession();
+
+       /*
+        * DEFAULT METHODS
+        */
+       default <A> A adapt(Class<A> clss) {
+               return null;
+       }
+
+       /*
+        * CONVENIENCE METHODS
+        */
+       default String attr(String key) {
+               return get(key, String.class);
+       }
+
+       default String attr(Enum<?> key) {
+               return attr(key.name());
+       }
+
+       default <A> A get(Enum<?> key, Class<A> clss) {
+               return get(key.name(), clss);
+       }
+
+       /*
+        * EXPERIMENTAL UNSUPPORTED
+        */
+       default boolean hasText() {
+               return false;
+       }
+
+       default String getText() {
+               throw new UnsupportedOperationException();
+       }
+
+}