Project

General

Profile

Download (2.02 KB) Statistics
| Branch: | Tag: | Revision:
1
package eu.etaxonomy.cdm.vaadin.container;
2

    
3
import java.util.ArrayList;
4
import java.util.Collections;
5
import java.util.Comparator;
6
import java.util.List;
7

    
8
import com.vaadin.data.util.BeanItemContainer;
9

    
10
import eu.etaxonomy.cdm.model.common.CdmBase;
11
import eu.etaxonomy.cdm.model.common.OrderedTermVocabulary;
12
import eu.etaxonomy.cdm.model.common.TermVocabulary;
13
import eu.etaxonomy.cdm.model.location.NamedArea;
14

    
15
/**
16
 * A container containing the {@link NamedArea}s of a specified {@link TermVocabulary}.
17
 * @author fabreim
18
 * @since May 17, 2018
19
 */
20
public class NamedAreaContainer extends BeanItemContainer<NamedArea> {
21

    
22
    private static final long serialVersionUID = 9150424479597481361L;
23

    
24
    /**
25
     * Creates a NamedAreaContainer containing all {@link NamedArea}s of the given {@code vocabulary} 
26
     * in alphabetically ascending order.
27
     * @param vocabulary The vocabulary containing the {@link NamedArea}s to populate the container with.
28
     * @throws IllegalArgumentException
29
     */
30
	public NamedAreaContainer(TermVocabulary<NamedArea> vocabulary)
31
	        throws IllegalArgumentException {
32
	    super(NamedArea.class);
33
	    List<NamedArea> namedAreas;
34
	    if (vocabulary.isInstanceOf(OrderedTermVocabulary.class)) {
35
	        OrderedTermVocabulary orderedVoc = CdmBase.deproxy(vocabulary, OrderedTermVocabulary.class);
36
	        namedAreas = new ArrayList<>(orderedVoc.getOrderedTerms());
37
	        Collections.reverse(namedAreas);
38
	    }else {
39
	        namedAreas = new ArrayList<>(vocabulary.getTerms());
40
	        Collections.sort(namedAreas, new AlphabeticallyAscendingNamedAreaComparator());
41
	    }
42

    
43
	    for (NamedArea namedArea: namedAreas) {
44
	        addBean(namedArea);
45
	    }
46
	}
47

    
48
	/**
49
	 * Comparator to sort the {@link NamedArea}s contained in {@link NamedAreaContainer}s.
50
	 *
51
	 */
52
	private class AlphabeticallyAscendingNamedAreaComparator implements Comparator<NamedArea>{
53

    
54
		/**
55
		 * 
56
		 * {@inheritDoc}
57
		 */
58
        @Override
59
        public int compare(NamedArea o1, NamedArea o2) {
60
            return o2.compareTo(o1);
61
        }
62

    
63
	}
64

    
65
}
(5-5/7)