]>
git.argeo.org Git - gpl/argeo-suite.git/blob - org.argeo.app.jcr/src/org/argeo/app/jcr/terms/SuiteTermsManager.java
1 package org
.argeo
.app
.jcr
.terms
;
3 import java
.util
.ArrayList
;
4 import java
.util
.HashMap
;
8 import java
.util
.TreeSet
;
10 import javax
.jcr
.Node
;
11 import javax
.jcr
.NodeIterator
;
12 import javax
.jcr
.Repository
;
13 import javax
.jcr
.RepositoryException
;
14 import javax
.jcr
.Session
;
16 import org
.argeo
.api
.cms
.CmsConstants
;
17 import org
.argeo
.app
.api
.EntityNames
;
18 import org
.argeo
.app
.api
.EntityType
;
19 import org
.argeo
.app
.api
.Term
;
20 import org
.argeo
.app
.api
.TermsManager
;
21 import org
.argeo
.app
.api
.Typology
;
22 import org
.argeo
.cms
.jcr
.CmsJcrUtils
;
23 import org
.argeo
.jcr
.Jcr
;
24 import org
.argeo
.jcr
.JcrException
;
26 /** Argeo Suite implementation of terms manager. */
27 public class SuiteTermsManager
implements TermsManager
{
28 private final Map
<String
, SuiteTerm
> terms
= new HashMap
<>();
29 private final Map
<String
, SuiteTypology
> typologies
= new HashMap
<>();
32 private Repository repository
;
33 private Session adminSession
;
36 adminSession
= CmsJcrUtils
.openDataAdminSession(repository
, CmsConstants
.SYS_WORKSPACE
);
40 public List
<Term
> listAllTerms(String typology
) {
41 List
<Term
> res
= new ArrayList
<>();
42 SuiteTypology t
= getTypology(typology
);
43 for (SuiteTerm term
: t
.getAllTerms()) {
50 public SuiteTerm
getTerm(String termId
) {
51 return terms
.get(termId
);
55 public SuiteTypology
getTypology(String typology
) {
56 SuiteTypology t
= typologies
.get(typology
);
58 Node termsNode
= Jcr
.getNode(adminSession
, "SELECT * FROM [{0}] WHERE NAME()=\"{1}\"",
59 EntityType
.terms
.get(), typology
);
60 if (termsNode
== null)
61 throw new IllegalArgumentException("Typology " + typology
+ " not found.");
62 t
= loadTypology(termsNode
);
68 public Set
<Typology
> getTypologies() {
69 Set
<Typology
> res
= new TreeSet
<>((o1
, o2
) -> o1
.getId().compareTo(o2
.getId()));
70 NodeIterator termsNodes
= Jcr
.executeQuery(adminSession
, "SELECT * FROM [{0}]", EntityType
.terms
.get());
71 for (Node termsNode
: Jcr
.iterate(termsNodes
)) {
72 res
.add(loadTypology(termsNode
));
77 SuiteTypology
loadTypology(Node termsNode
) {
79 SuiteTypology typology
= new SuiteTypology(termsNode
);
80 for (Node termNode
: Jcr
.iterate(termsNode
.getNodes())) {
81 if (termNode
.isNodeType(EntityType
.term
.get())) {
82 SuiteTerm term
= loadTerm(typology
, termNode
, null);
83 if (!term
.getSubTerms().isEmpty())
84 typology
.markNotFlat();
85 typology
.getSubTerms().add(term
);
88 typologies
.put(typology
.getName(), typology
);
90 } catch (RepositoryException e
) {
91 throw new JcrException("Cannot load typology from " + termsNode
, e
);
95 SuiteTerm
loadTerm(SuiteTypology typology
, Node termNode
, SuiteTerm parentTerm
) throws RepositoryException
{
96 String name
= termNode
.getProperty(EntityNames
.NAME
).getString();
97 String relativePath
= parentTerm
== null ? name
: parentTerm
.getRelativePath() + '/' + name
;
98 SuiteTerm term
= new SuiteTerm(typology
, relativePath
, parentTerm
);
99 terms
.put(term
.getId(), term
);
100 for (Node subTermNode
: Jcr
.iterate(termNode
.getNodes())) {
101 if (termNode
.isNodeType(EntityType
.term
.get())) {
102 SuiteTerm subTerm
= loadTerm(typology
, subTermNode
, term
);
103 term
.getSubTerms().add(subTerm
);
109 public void destroy() {
110 Jcr
.logout(adminSession
);
113 public void setRepository(Repository repository
) {
114 this.repository
= repository
;