4 package eu
.etaxonomy
.cdm
.model
.common
;
6 import java
.util
.HashSet
;
7 import java
.util
.Iterator
;
9 import java
.util
.NoSuchElementException
;
11 import java
.util
.SortedSet
;
12 import java
.util
.TreeSet
;
14 import org
.apache
.log4j
.Logger
;
20 public class OrderedTermVocabulary
<T
extends OrderedTermBase
> extends TermVocabulary
<T
> {
21 private static final Logger logger
= Logger
.getLogger(OrderedTermVocabulary
.class);
26 public OrderedTermVocabulary() {
33 * @param termSourceUri
35 public OrderedTermVocabulary(String term
, String label
, String termSourceUri
) {
36 super(term
, label
, termSourceUri
);
40 protected Set
<T
> getNewTermSet(){
41 return new TreeSet
<T
>();
44 public SortedSet
<T
> getHigherAndEqualTerms(T otb
) {
45 SortedSet
<T
> result
= new TreeSet
<T
>();
46 result
.addAll( ((SortedSet
<T
>)terms
).tailSet(otb
));
49 public SortedSet
<T
> getHigherTerms(T otb
) {
50 SortedSet
<T
> result
= getHigherAndEqualTerms(otb
);
51 for (T setObject
: terms
){
52 if (setObject
.compareTo(otb
) == 0){
53 result
.remove(setObject
);
59 public SortedSet
<T
> getLowerAndEqualTerms(T otb
) {
60 SortedSet
<T
> result
= new TreeSet
<T
>();
61 result
.addAll( ((SortedSet
<T
>)terms
).headSet(otb
));
65 public SortedSet
<T
> getLowerTerms(T otb
) {
66 SortedSet
<T
> result
= getLowerAndEqualTerms(otb
);
67 for (T setObject
: terms
){
68 if (setObject
.compareTo(otb
) == 0){
69 result
.remove(setObject
);
75 public SortedSet
<T
> getEqualTerms(T otb
) {
76 SortedSet
<T
> result
= new TreeSet
<T
>();
77 for (T setObject
: terms
){
78 if (setObject
.compareTo(otb
) == 0){
79 result
.add(setObject
);
85 public T
getNextHigherTerm(T otb
) {
87 return getHigherTerms(otb
).first();
88 } catch (NoSuchElementException e
) {
92 public T
getNextLowerTerm(T otb
) {
94 return getLowerTerms(otb
).last();
95 } catch (NoSuchElementException e
) {
100 public T
getLowestTerm() {
102 return ((SortedSet
<T
>)terms
).first();
103 } catch (NoSuchElementException e
) {
109 public T
getHighestTerm() {
111 return ((SortedSet
<T
>)terms
).last();
112 } catch (NoSuchElementException e
) {
118 public void addTerm(T term
) throws WrongTermTypeException
{
119 SortedSet sortedTerms
= ((SortedSet
<T
>)terms
);
120 int lowestOrderIndex
;
121 if (sortedTerms
.size() == 0){
122 lowestOrderIndex
= 0;
124 Object first
= (T
)sortedTerms
.first();
125 lowestOrderIndex
= ((T
)first
).orderIndex
;
127 term
.orderIndex
= lowestOrderIndex
+ 1;
131 public void addTermAbove(T termToBeAdded
, T lowerTerm
) throws WrongTermTypeException
{
132 int orderInd
= lowerTerm
.orderIndex
;
133 termToBeAdded
.orderIndex
= orderInd
;
134 //increment all orderIndexes of terms below
135 Iterator
<T
> iterator
= terms
.iterator();
136 while(iterator
.hasNext()){
137 T term
= iterator
.next();
138 if (term
.orderIndex
>= orderInd
){ //should always be true
142 super.addTerm(termToBeAdded
);
145 public void addTermBelow(T termToBeAdded
, T higherTerm
) throws WrongTermTypeException
{
146 int orderInd
= higherTerm
.orderIndex
;
147 termToBeAdded
.orderIndex
= orderInd
+ 1;
148 //increment all orderIndexes of terms below
149 Iterator
<T
> iterator
= getLowerTerms(higherTerm
).iterator();
150 while(iterator
.hasNext()){
151 T term
= iterator
.next();
152 if (term
.orderIndex
> orderInd
){
156 super.addTerm(termToBeAdded
);
159 public void addTermEqualLevel(T termToBeAdded
, T equalLevelTerm
) throws WrongTermTypeException
{
160 int orderInd
= equalLevelTerm
.orderIndex
;
161 termToBeAdded
.orderIndex
= orderInd
;
162 super.addTerm(termToBeAdded
);
166 public void removeTerm(T term
) {
170 if (this.getEqualTerms(term
).size() == 0){
171 Iterator
<T
> iterator
= getLowerTerms(term
).iterator();
172 while (iterator
.hasNext()){
173 T otb
= iterator
.next();
174 toBeChangedByObject
= otb
;
175 otb
.decreaseIndex(this);
176 toBeChangedByObject
= null;
179 term
.setVocabulary(null);
182 private T toBeChangedByObject
;
184 public boolean indexChangeAllowed(T otb
){
185 return otb
== toBeChangedByObject
;