]>
git.argeo.org Git - gpl/argeo-suite.git/blob - org.argeo.app.core/src/org/argeo/app/core/SuiteTermsManager.java
1 package org
.argeo
.app
.core
;
3 import java
.util
.ArrayList
;
4 import java
.util
.HashMap
;
9 import javax
.jcr
.Repository
;
10 import javax
.jcr
.RepositoryException
;
11 import javax
.jcr
.Session
;
13 import org
.argeo
.api
.cms
.CmsConstants
;
14 import org
.argeo
.app
.api
.EntityNames
;
15 import org
.argeo
.app
.api
.EntityType
;
16 import org
.argeo
.app
.api
.Term
;
17 import org
.argeo
.app
.api
.TermsManager
;
18 import org
.argeo
.cms
.jcr
.CmsJcrUtils
;
19 import org
.argeo
.jcr
.Jcr
;
20 import org
.argeo
.jcr
.JcrException
;
22 /** Argeo Suite implementation of terms manager. */
23 public class SuiteTermsManager
implements TermsManager
{
24 private final Map
<String
, SuiteTerm
> terms
= new HashMap
<>();
25 private final Map
<String
, SuiteTypology
> typologies
= new HashMap
<>();
28 private Repository repository
;
29 private Session adminSession
;
32 adminSession
= CmsJcrUtils
.openDataAdminSession(repository
, CmsConstants
.SYS_WORKSPACE
);
36 public List
<Term
> listAllTerms(String typology
) {
37 List
<Term
> res
= new ArrayList
<>();
38 SuiteTypology t
= getTypology(typology
);
39 for (SuiteTerm term
: t
.getAllTerms()) {
46 public SuiteTerm
getTerm(String termId
) {
47 return terms
.get(termId
);
51 public SuiteTypology
getTypology(String typology
) {
52 SuiteTypology t
= typologies
.get(typology
);
54 Node termsNode
= Jcr
.getNode(adminSession
, "SELECT * FROM [{0}] WHERE NAME()=\"{1}\"",
55 EntityType
.terms
.get(), typology
);
56 if (termsNode
== null)
57 throw new IllegalArgumentException("Typology " + typology
+ " not found.");
58 t
= loadTypology(termsNode
);
63 SuiteTypology
loadTypology(Node termsNode
) {
65 SuiteTypology typology
= new SuiteTypology(termsNode
);
66 for (Node termNode
: Jcr
.iterate(termsNode
.getNodes())) {
67 if (termNode
.isNodeType(EntityType
.term
.get())) {
68 SuiteTerm term
= loadTerm(typology
, termNode
, null);
69 if (!term
.getSubTerms().isEmpty())
70 typology
.markNotFlat();
71 typology
.getSubTerms().add(term
);
74 typologies
.put(typology
.getName(), typology
);
76 } catch (RepositoryException e
) {
77 throw new JcrException("Cannot load typology from " + termsNode
, e
);
81 SuiteTerm
loadTerm(SuiteTypology typology
, Node termNode
, SuiteTerm parentTerm
) throws RepositoryException
{
82 String name
= termNode
.getProperty(EntityNames
.NAME
).getString();
83 String relativePath
= parentTerm
== null ? name
: parentTerm
.getRelativePath() + '/' + name
;
84 SuiteTerm term
= new SuiteTerm(typology
, relativePath
, parentTerm
);
85 terms
.put(term
.getId(), term
);
86 for (Node subTermNode
: Jcr
.iterate(termNode
.getNodes())) {
87 if (termNode
.isNodeType(EntityType
.term
.get())) {
88 SuiteTerm subTerm
= loadTerm(typology
, subTermNode
, term
);
89 term
.getSubTerms().add(subTerm
);
95 public void destroy() {
96 Jcr
.logout(adminSession
);
99 public void setRepository(Repository repository
) {
100 this.repository
= repository
;