]> git.argeo.org Git - gpl/argeo-suite.git/blob - org.argeo.app.core/src/org/argeo/app/acr/terms/TermsContentProvider.java
Revert loading of XSD
[gpl/argeo-suite.git] / org.argeo.app.core / src / org / argeo / app / acr / terms / TermsContentProvider.java
1 package org.argeo.app.acr.terms;
2
3 import java.util.Iterator;
4 import java.util.List;
5
6 import org.argeo.api.acr.Content;
7 import org.argeo.api.acr.ContentNotFoundException;
8 import org.argeo.api.acr.spi.ProvidedContent;
9 import org.argeo.api.acr.spi.ProvidedSession;
10 import org.argeo.api.app.EntityType;
11 import org.argeo.api.app.Term;
12 import org.argeo.api.app.TermsManager;
13 import org.argeo.api.app.Typology;
14 import org.argeo.cms.acr.AbstractSimpleContentProvider;
15 import org.argeo.cms.acr.ContentUtils;
16
17 public class TermsContentProvider extends AbstractSimpleContentProvider<TermsManager> {
18
19 public TermsContentProvider() {
20 super(EntityType.ENTITY_NAMESPACE_URI, EntityType.ENTITY_DEFAULT_PREFIX);
21 }
22
23 @Override
24 protected Iterator<Content> firstLevel(ProvidedSession session) {
25 return getService().getTypologies().stream().map((t) -> (Content) new TypologyContent(session, this, t))
26 .iterator();
27 }
28
29 @Override
30 public ProvidedContent get(ProvidedSession session, List<String> segments) {
31 String typologyName = segments.get(0);
32 Typology typology = getService().getTypology(typologyName);
33 if (segments.size() == 1)
34 return new TypologyContent(session, this, typology);
35 Term currTerm = null;
36 terms: for (Term term : typology.getSubTerms()) {
37 if (term.getName().equals(segments.get(1))) {
38 currTerm = term;
39 break terms;
40 }
41 }
42 if (currTerm == null)
43 throw new ContentNotFoundException(session,
44 getMountPath() + "/" + ContentUtils.toPath(segments) + " cannot be found");
45 if (segments.size() == 1)
46 return new TermContent(session, this, currTerm);
47
48 for (int i = 2; i < segments.size(); i++) {
49 String termName = segments.get(i);
50 Term nextTerm = null;
51 terms: for (Term term : currTerm.getSubTerms()) {
52 if (term.getName().equals(termName)) {
53 nextTerm = term;
54 break terms;
55 }
56 }
57 if (nextTerm == null)
58 throw new ContentNotFoundException(session,
59 getMountPath() + "/" + ContentUtils.toPath(segments) + " cannot be found");
60 currTerm = nextTerm;
61 }
62 return new TermContent(session, this, currTerm);
63 }
64
65 ServiceContent getRootContent(ProvidedSession session) {
66 return new ServiceContent(session);
67 }
68
69 }