4 package eu
.etaxonomy
.cdm
.model
.common
;
6 import java
.util
.Iterator
;
7 import java
.util
.NoSuchElementException
;
9 import java
.util
.SortedSet
;
10 import java
.util
.TreeSet
;
12 import javax
.persistence
.Entity
;
13 import javax
.persistence
.Transient
;
15 import org
.apache
.log4j
.Logger
;
22 public class OrderedTermVocabulary
<T
extends OrderedTermBase
> extends TermVocabulary
<T
> {
23 private static final Logger logger
= Logger
.getLogger(OrderedTermVocabulary
.class);
28 public OrderedTermVocabulary() {
35 * @param termSourceUri
37 public OrderedTermVocabulary(String term
, String label
, String termSourceUri
) {
38 super(term
, label
, termSourceUri
);
43 protected Set
<T
> getNewTermSet(){
44 return new TreeSet
<T
>();
48 public SortedSet
<T
> getHigherAndEqualTerms(T otb
) {
49 SortedSet
<T
> result
= new TreeSet
<T
>();
50 SortedSet
<T
> sortedSet
= new TreeSet
<T
>();
51 sortedSet
.addAll(terms
);
52 result
.addAll( sortedSet
.tailSet(otb
));
56 public SortedSet
<T
> getHigherTerms(T otb
) {
57 SortedSet
<T
> result
= getHigherAndEqualTerms(otb
);
58 for (T setObject
: terms
){
59 if (setObject
.compareTo(otb
) == 0){
60 result
.remove(setObject
);
67 public SortedSet
<T
> getLowerAndEqualTerms(T otb
) {
68 SortedSet
<T
> result
= new TreeSet
<T
>();
69 SortedSet
<T
> sortedSet
= new TreeSet
<T
>();
70 sortedSet
.addAll(terms
);
71 result
.addAll( sortedSet
.headSet(otb
));
76 public SortedSet
<T
> getLowerTerms(T otb
) {
77 SortedSet
<T
> result
= getLowerAndEqualTerms(otb
);
78 for (T setObject
: terms
){
79 if (setObject
.compareTo(otb
) == 0){
80 result
.remove(setObject
);
87 public SortedSet
<T
> getEqualTerms(T otb
) {
88 SortedSet
<T
> result
= new TreeSet
<T
>();
89 for (T setObject
: terms
){
90 if (setObject
.compareTo(otb
) == 0){
91 result
.add(setObject
);
98 public T
getNextHigherTerm(T otb
) {
100 return getHigherTerms(otb
).first();
101 } catch (NoSuchElementException e
) {
107 public T
getNextLowerTerm(T otb
) {
109 return getLowerTerms(otb
).last();
110 } catch (NoSuchElementException e
) {
116 public T
getLowestTerm() {
118 SortedSet
<T
> sortedSet
= new TreeSet
<T
>();
119 sortedSet
.addAll(terms
);
120 return sortedSet
.first();
121 //return ((SortedSet<T>)terms).first();
122 } catch (NoSuchElementException e
) {
128 public T
getHighestTerm() {
130 SortedSet
<T
> sortedSet
= new TreeSet
<T
>();
131 sortedSet
.addAll(terms
);
132 return sortedSet
.last();
133 } catch (NoSuchElementException e
) {
139 public void addTerm(T term
) throws WrongTermTypeException
{
140 SortedSet sortedTerms
= ((SortedSet
<T
>)terms
);
141 int lowestOrderIndex
;
142 if (sortedTerms
.size() == 0){
143 lowestOrderIndex
= 0;
145 Object first
= (T
)sortedTerms
.first();
146 lowestOrderIndex
= ((T
)first
).orderIndex
;
148 term
.orderIndex
= lowestOrderIndex
+ 1;
152 public void addTermAbove(T termToBeAdded
, T lowerTerm
) throws WrongTermTypeException
{
153 int orderInd
= lowerTerm
.orderIndex
;
154 termToBeAdded
.orderIndex
= orderInd
;
155 //increment all orderIndexes of terms below
156 Iterator
<T
> iterator
= terms
.iterator();
157 while(iterator
.hasNext()){
158 T term
= iterator
.next();
159 if (term
.orderIndex
>= orderInd
){ //should always be true
163 super.addTerm(termToBeAdded
);
166 public void addTermBelow(T termToBeAdded
, T higherTerm
) throws WrongTermTypeException
{
167 int orderInd
= higherTerm
.orderIndex
;
168 termToBeAdded
.orderIndex
= orderInd
+ 1;
169 //increment all orderIndexes of terms below
170 Iterator
<T
> iterator
= getLowerTerms(higherTerm
).iterator();
171 while(iterator
.hasNext()){
172 T term
= iterator
.next();
173 if (term
.orderIndex
> orderInd
){
177 super.addTerm(termToBeAdded
);
180 // public void addTermEqualLevel(T termToBeAdded, T equalLevelTerm) throws WrongTermTypeException {
181 // int orderInd = equalLevelTerm.orderIndex;
182 // termToBeAdded.orderIndex = orderInd;
183 // super.addTerm(termToBeAdded);
187 public void removeTerm(T term
) {
191 if (this.getEqualTerms(term
).size() == 0){
192 Iterator
<T
> iterator
= getLowerTerms(term
).iterator();
193 while (iterator
.hasNext()){
194 T otb
= iterator
.next();
195 toBeChangedByObject
= otb
;
196 otb
.decreaseIndex(this);
197 toBeChangedByObject
= null;
200 term
.setVocabulary(null);
203 private T toBeChangedByObject
;
205 public boolean indexChangeAllowed(T otb
){
206 return otb
== toBeChangedByObject
;