Introduce terms content provider
[gpl/argeo-suite.git] / org.argeo.app.core / src / org / argeo / app / acr / terms / TypologyContent.java
diff --git a/org.argeo.app.core/src/org/argeo/app/acr/terms/TypologyContent.java b/org.argeo.app.core/src/org/argeo/app/acr/terms/TypologyContent.java
new file mode 100644 (file)
index 0000000..63bb8a3
--- /dev/null
@@ -0,0 +1,45 @@
+package org.argeo.app.acr.terms;
+
+import java.util.Iterator;
+
+import javax.xml.namespace.QName;
+
+import org.argeo.api.acr.Content;
+import org.argeo.api.acr.NamespaceUtils;
+import org.argeo.api.acr.spi.ContentProvider;
+import org.argeo.api.acr.spi.ProvidedSession;
+import org.argeo.app.api.Typology;
+import org.argeo.cms.acr.AbstractContent;
+
+public class TypologyContent extends AbstractContent {
+       private TermsContentProvider provider;
+       private Typology typology;
+
+       public TypologyContent(ProvidedSession session, TermsContentProvider provider, Typology typology) {
+               super(session);
+               this.provider = provider;
+               this.typology = typology;
+       }
+
+       @Override
+       public ContentProvider getProvider() {
+               return provider;
+       }
+
+       @Override
+       public QName getName() {
+               return NamespaceUtils.unqualified(typology.getId());
+       }
+
+       @Override
+       public Content getParent() {
+               return provider.getRootContent(getSession());
+       }
+
+       @Override
+       public Iterator<Content> iterator() {
+               return typology.getSubTerms().stream().map((t) -> (Content) new TermContent(getSession(), provider, t))
+                               .iterator();
+       }
+
+}