Project

General

Profile

Download (3.25 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.vaadin.util.CdmSpringContextHelper;
19
import eu.etaxonomy.cdm.vaadin.util.DistributionEditorUtil;
20
import eu.etaxonomy.cdm.vaadin.util.TermCacher;
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
    static class PresenceAbsenceTermComparator implements Comparator<PresenceAbsenceTerm> {
31
        @Override
32
        public int compare(PresenceAbsenceTerm pa1, PresenceAbsenceTerm pa2) {
33
            return pa1.compareTo(pa2);
34
        }
35

    
36
    }
37

    
38
	private PresenceAbsenceTermContainer()
39
			throws IllegalArgumentException {
40
		super(PresenceAbsenceTerm.class);
41
		initDataModel();
42
	}
43

    
44
    private void initDataModel() {
45
        Collection<PresenceAbsenceTerm> distributionStatus = getDistributionStatusList(TERMS_INIT_STRATEGY);
46
        defaultDistributionStatus = distributionStatus;
47
		addAll(distributionStatus);
48
    }
49

    
50
	public static PresenceAbsenceTermContainer getInstance(){
51
	    if(instance == null){
52
	        instance = new PresenceAbsenceTermContainer();
53
	    }
54
        Collection<PresenceAbsenceTerm> distributionStatus = new HashSet<>();
55
        Object attribute = VaadinSession.getCurrent().getAttribute(DistributionEditorUtil.SATTR_DISTRIBUTION_STATUS);
56
        if(attribute != null){
57
            distributionStatus = (Set<PresenceAbsenceTerm>) attribute;
58
        }
59
        if(!distributionStatus.isEmpty() && !distributionStatus.equals(defaultDistributionStatus)){
60
            instance.removeAllItems();
61
            instance.addAll(distributionStatus);
62
            defaultDistributionStatus = distributionStatus;
63
        }
64
	    return instance;
65
	}
66

    
67
    public static List<PresenceAbsenceTerm> getDistributionStatusList(List<String> propertyPath){
68
        CdmPreference statusPref = CdmSpringContextHelper.getPreferenceService().findVaadin(PreferencePredicate.AvailableDistributionStatus);
69
        List<PresenceAbsenceTerm> paList;
70
        if (statusPref != null){
71
            List<UUID> uuidList = statusPref.getValueUuidList();
72
            paList = CdmSpringContextHelper.getTermService().load(uuidList, propertyPath).stream().map(db -> (PresenceAbsenceTerm)db).collect(Collectors.toList());
73
            paList.sort(new PresenceAbsenceTermComparator());
74
            return paList;
75
        }else{
76
            paList = TermCacher.getInstance().getDistributionStatusTermList();
77
            paList.sort(new PresenceAbsenceTermComparator());
78
            return paList;
79
        }
80
    }
81

    
82
    protected static final List<String> TERMS_INIT_STRATEGY = Arrays.asList(new String []{
83
            "$",
84
            "representations",
85
    });
86
}
(6-6/7)