]> git.argeo.org Git - gpl/argeo-suite.git/blob - core/org.argeo.suite.core/src/org/argeo/suite/core/SuiteTypology.java
[maven-release-plugin] prepare for next development iteration
[gpl/argeo-suite.git] / core / org.argeo.suite.core / src / org / argeo / suite / core / SuiteTypology.java
1 package org.argeo.suite.core;
2
3 import java.util.ArrayList;
4 import java.util.List;
5
6 import javax.jcr.Node;
7
8 import org.argeo.entity.Term;
9 import org.argeo.entity.Typology;
10 import org.argeo.jcr.Jcr;
11
12 /** A typology. Helper to optimise {@link SuiteTermsManager} implementation. */
13 class SuiteTypology implements Typology {
14 private final String name;
15 private final Node node;
16 private boolean isFlat = true;
17
18 private final List<SuiteTerm> subTerms = new ArrayList<>();
19
20 public SuiteTypology(Node node) {
21 this.node = node;
22 this.name = Jcr.getName(this.node);
23 }
24
25 @Override
26 public String getId() {
27 return name;
28 }
29
30 public String getName() {
31 return name;
32 }
33
34 public Node getNode() {
35 return node;
36 }
37
38 void markNotFlat() {
39 if (isFlat)
40 isFlat = false;
41 }
42
43 @Override
44 public boolean isFlat() {
45 return isFlat;
46 }
47
48 @Override
49 public List<SuiteTerm> getSubTerms() {
50 return subTerms;
51 }
52
53 public List<SuiteTerm> getAllTerms() {
54 if (isFlat)
55 return subTerms;
56 else {
57 List<SuiteTerm> terms = new ArrayList<>();
58 for (SuiteTerm subTerm : subTerms) {
59 terms.add(subTerm);
60 collectSubTerms(terms, subTerm);
61 }
62 return terms;
63 }
64 }
65
66 private void collectSubTerms(List<SuiteTerm> terms, SuiteTerm term) {
67 for (SuiteTerm subTerm : term.getSubTerms()) {
68 terms.add(subTerm);
69 collectSubTerms(terms, subTerm);
70 }
71 }
72
73 }