Project

General

Profile

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

    
3
import java.util.Arrays;
4
import java.util.Collection;
5
import java.util.Comparator;
6
import java.util.HashSet;
7
import java.util.List;
8
import java.util.Set;
9
import java.util.UUID;
10
import java.util.stream.Collectors;
11

    
12
import com.vaadin.data.util.BeanItemContainer;
13
import com.vaadin.server.VaadinSession;
14

    
15
import eu.etaxonomy.cdm.model.description.PresenceAbsenceTerm;
16
import eu.etaxonomy.cdm.model.metadata.CdmPreference;
17
import eu.etaxonomy.cdm.model.metadata.PreferencePredicate;
18
import eu.etaxonomy.cdm.model.term.TermType;
19
import eu.etaxonomy.cdm.vaadin.util.CdmSpringContextHelper;
20
import eu.etaxonomy.cdm.vaadin.util.DistributionEditorUtil;
21

    
22
public class PresenceAbsenceTermContainer extends BeanItemContainer<PresenceAbsenceTerm> {
23

    
24
	private static final long serialVersionUID = -7891310979870159325L;
25

    
26
	private static PresenceAbsenceTermContainer instance;
27

    
28
	private static Collection<PresenceAbsenceTerm> defaultDistributionStatus;
29

    
30
	/**
31
	 * A comparator to sort {@link PresenceAbsenceTerm}s contained in {@link PresenceAbsenceTermContainer}s.
32
	 *
33
	 */
34
    static class PresenceAbsenceTermComparator implements Comparator<PresenceAbsenceTerm> {
35
        @Override
36
        public int compare(PresenceAbsenceTerm pa1, PresenceAbsenceTerm pa2) {
37
            return pa1.compareTo(pa2);
38
        }
39

    
40
    }
41

    
42
    /**
43
     * Creates and initializes a new {@link PresenceAbsenceTermContainer}.
44
     * @throws IllegalArgumentException
45
     */
46
	private PresenceAbsenceTermContainer()
47
			throws IllegalArgumentException {
48
		super(PresenceAbsenceTerm.class);
49
		initDataModel();
50
	}
51

    
52
	/**
53
	 * Initializes the data model of the container and adds all allowed {@link PresenceAbsenceTerm}s to the bean.
54
	 */
55
    private void initDataModel() {
56
        Collection<PresenceAbsenceTerm> distributionStatus = getDistributionStatusList(TERMS_INIT_STRATEGY);
57
        defaultDistributionStatus = distributionStatus;
58
		addAll(distributionStatus);
59
    }
60

    
61
    /**
62
     * Gets an existing instance of the {@link PresenceAbsenceTermContainer} or creates a new one.
63
     * @return Instance of {@link PresenceAbsenceTermContainer}.
64
     */
65
	public static PresenceAbsenceTermContainer getInstance(){
66
	    if(instance == null){
67
	        instance = new PresenceAbsenceTermContainer();
68
	    }
69
        Collection<PresenceAbsenceTerm> distributionStatus = new HashSet<>();
70
        Object attribute = VaadinSession.getCurrent().getAttribute(DistributionEditorUtil.SATTR_DISTRIBUTION_STATUS);
71
        if(attribute != null){
72
            distributionStatus = (Set<PresenceAbsenceTerm>) attribute;
73
        }
74
        if(!distributionStatus.isEmpty() && !distributionStatus.equals(defaultDistributionStatus)){
75
            instance.removeAllItems();
76
            instance.addAll(distributionStatus);
77
            defaultDistributionStatus = distributionStatus;
78
        }
79
	    return instance;
80
	}
81

    
82
	/**
83
	 * Returns a list of all allowed {@link PresenceAbsenceTerm}s.
84
	 * @param propertyPath The property path to use for calling {@link CdmSpringContextHelper} functions to load {@link PresenceAbsenceTerm}s.
85
	 * @return List of all allowed {@link PresenceAbsenceTerm}s.
86
	 */
87
    public static List<PresenceAbsenceTerm> getDistributionStatusList(List<String> propertyPath){
88
        CdmPreference statusPref = CdmSpringContextHelper.getPreferenceService().findVaadin(PreferencePredicate.AvailableDistributionStatus);
89
        List<PresenceAbsenceTerm> paList;
90
        if (statusPref != null){
91
            List<UUID> uuidList = statusPref.getValueUuidList();
92
            paList = CdmSpringContextHelper.getTermService().load(uuidList, propertyPath).stream().map(db -> (PresenceAbsenceTerm)db).collect(Collectors.toList());
93
            paList.sort(new PresenceAbsenceTermComparator());
94
            return paList;
95
        }else{
96
            paList = CdmSpringContextHelper.getTermService().listByTermType(TermType.PresenceAbsenceTerm, null, null, null,propertyPath);
97
            paList.sort(new PresenceAbsenceTermComparator());
98
            return paList;
99
        }
100
    }
101

    
102
    protected static final List<String> TERMS_INIT_STRATEGY = Arrays.asList(new String []{
103
            "$",
104
            "representations",
105
    });
106
}
(6-6/7)