X-Git-Url: https://git.argeo.org/?p=gpl%2Fargeo-suite.git;a=blobdiff_plain;f=org.argeo.app.core%2Fsrc%2Forg%2Fargeo%2Fapp%2Facr%2Fterms%2FTermsContentProvider.java;fp=org.argeo.app.core%2Fsrc%2Forg%2Fargeo%2Fapp%2Facr%2Fterms%2FTermsContentProvider.java;h=2d7a5d1a615ab1b111fa40eae5a723fe61584464;hp=0000000000000000000000000000000000000000;hb=59ba52ac31cac753961fe9e2e55bbae21735ea96;hpb=ad42f2e927cb1eea17db610e76e13f0ac11b6080 diff --git a/org.argeo.app.core/src/org/argeo/app/acr/terms/TermsContentProvider.java b/org.argeo.app.core/src/org/argeo/app/acr/terms/TermsContentProvider.java new file mode 100644 index 0000000..2d7a5d1 --- /dev/null +++ b/org.argeo.app.core/src/org/argeo/app/acr/terms/TermsContentProvider.java @@ -0,0 +1,69 @@ +package org.argeo.app.acr.terms; + +import java.util.Iterator; +import java.util.List; + +import org.argeo.api.acr.Content; +import org.argeo.api.acr.ContentNotFoundException; +import org.argeo.api.acr.spi.ProvidedContent; +import org.argeo.api.acr.spi.ProvidedSession; +import org.argeo.app.api.EntityType; +import org.argeo.app.api.Term; +import org.argeo.app.api.TermsManager; +import org.argeo.app.api.Typology; +import org.argeo.cms.acr.AbstractSimpleContentProvider; +import org.argeo.cms.acr.ContentUtils; + +public class TermsContentProvider extends AbstractSimpleContentProvider { + + public TermsContentProvider() { + super(EntityType.ENTITY_NAMESPACE_URI, EntityType.ENTITY_DEFAULT_PREFIX); + } + + @Override + protected Iterator firstLevel(ProvidedSession session) { + return getService().getTypologies().stream().map((t) -> (Content) new TypologyContent(session, this, t)) + .iterator(); + } + + @Override + public ProvidedContent get(ProvidedSession session, List segments) { + String typologyName = segments.get(0); + Typology typology = getService().getTypology(typologyName); + if (segments.size() == 1) + return new TypologyContent(session, this, typology); + Term currTerm = null; + terms: for (Term term : typology.getSubTerms()) { + if (term.getName().equals(segments.get(1))) { + currTerm = term; + break terms; + } + } + if (currTerm == null) + throw new ContentNotFoundException(session, + getMountPath() + "/" + ContentUtils.toPath(segments) + " cannot be found"); + if (segments.size() == 1) + return new TermContent(session, this, currTerm); + + for (int i = 2; i < segments.size(); i++) { + String termName = segments.get(i); + Term nextTerm = null; + terms: for (Term term : currTerm.getSubTerms()) { + if (term.getName().equals(termName)) { + nextTerm = term; + break terms; + } + } + if (nextTerm == null) + throw new ContentNotFoundException(session, + getMountPath() + "/" + ContentUtils.toPath(segments) + " cannot be found"); + currTerm = nextTerm; + } + return new TermContent(session, this, currTerm); + } + + ServiceContent getRootContent(ProvidedSession session) { + return new ServiceContent(session); + } + +}