]> git.argeo.org Git - gpl/argeo-suite.git/blob - SuiteTypology.java
e84066cfe43504c2796fb578ec4e601e1b20544e
[gpl/argeo-suite.git] / 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.jcr.Jcr;
9
10 /** A typology. Helper to optimise {@link SuiteTermsManager} implementation. */
11 class SuiteTypology {
12 private final String name;
13 private final Node node;
14 private boolean isFlat = true;
15
16 private final List<SuiteTerm> subTerms = new ArrayList<>();
17
18 public SuiteTypology(Node node) {
19 this.node = node;
20 this.name = Jcr.getName(this.node);
21 }
22
23 public String getName() {
24 return name;
25 }
26
27 public Node getNode() {
28 return node;
29 }
30
31 void markNotFlat() {
32 if (isFlat)
33 isFlat = false;
34 }
35
36 public boolean isFlat() {
37 return isFlat;
38 }
39
40 public List<SuiteTerm> getSubTerms() {
41 return subTerms;
42 }
43
44 public List<SuiteTerm> getAllTerms() {
45 if (isFlat)
46 return subTerms;
47 else {
48 List<SuiteTerm> terms = new ArrayList<>();
49 for (SuiteTerm subTerm : subTerms) {
50 terms.add(subTerm);
51 collectSubTerms(terms, subTerm);
52 }
53 return terms;
54 }
55 }
56
57 private void collectSubTerms(List<SuiteTerm> terms, SuiteTerm term) {
58 for (SuiteTerm subTerm : term.getSubTerms()) {
59 terms.add(subTerm);
60 collectSubTerms(terms, subTerm);
61 }
62 }
63
64 }