Project

General

Profile

Download (4.12 KB) Statistics
| Branch: | Tag: | Revision:
1 aab82329 Patrick Plitzner
package eu.etaxonomy.cdm.vaadin.container;
2
3 fc53e2e8 Andreas Müller
import java.util.Arrays;
4 32bf574c Patrick Plitzner
import java.util.Collection;
5 83e3c490 Fabian Reimeier
import java.util.Comparator;
6 3b0bc0db Patrick Plitzner
import java.util.HashSet;
7 fc53e2e8 Andreas Müller
import java.util.List;
8 32bf574c Patrick Plitzner
import java.util.Set;
9 fc53e2e8 Andreas Müller
import java.util.UUID;
10 83e3c490 Fabian Reimeier
import java.util.stream.Collectors;
11 aab82329 Patrick Plitzner
12 5f031b4f Patrick Plitzner
import com.vaadin.data.util.BeanItemContainer;
13 32bf574c Patrick Plitzner
import com.vaadin.server.VaadinSession;
14 aab82329 Patrick Plitzner
15 19eaf51a Fabian Reimeier
import eu.etaxonomy.cdm.model.common.TermType;
16 aab82329 Patrick Plitzner
import eu.etaxonomy.cdm.model.description.PresenceAbsenceTerm;
17 fc53e2e8 Andreas Müller
import eu.etaxonomy.cdm.model.metadata.CdmPreference;
18
import eu.etaxonomy.cdm.model.metadata.PreferencePredicate;
19 6e9595e7 Patrick Plitzner
import eu.etaxonomy.cdm.vaadin.util.CdmSpringContextHelper;
20 32bf574c Patrick Plitzner
import eu.etaxonomy.cdm.vaadin.util.DistributionEditorUtil;
21 aab82329 Patrick Plitzner
22 5f031b4f Patrick Plitzner
public class PresenceAbsenceTermContainer extends BeanItemContainer<PresenceAbsenceTerm> {
23 aab82329 Patrick Plitzner
24
	private static final long serialVersionUID = -7891310979870159325L;
25 f9837f2a Patrick Plitzner
26 3b0bc0db Patrick Plitzner
	private static PresenceAbsenceTermContainer instance;
27 fd9cf932 Andreas Kohlbecker
28 3b0bc0db Patrick Plitzner
	private static Collection<PresenceAbsenceTerm> defaultDistributionStatus;
29
30 c226920a Fabian Reimeier
	/**
31
	 * A comparator to sort {@link PresenceAbsenceTerm}s contained in {@link PresenceAbsenceTermContainer}s.
32
	 *
33
	 */
34 83e3c490 Fabian Reimeier
    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 c226920a Fabian Reimeier
    /**
43
     * Creates and initializes a new {@link PresenceAbsenceTermContainer}.
44
     * @throws IllegalArgumentException
45
     */
46 3b0bc0db Patrick Plitzner
	private PresenceAbsenceTermContainer()
47 aab82329 Patrick Plitzner
			throws IllegalArgumentException {
48
		super(PresenceAbsenceTerm.class);
49 3b0bc0db Patrick Plitzner
		initDataModel();
50
	}
51
52 c226920a Fabian Reimeier
	/**
53
	 * Initializes the data model of the container and adds all allowed {@link PresenceAbsenceTerm}s to the bean.
54
	 */
55 3b0bc0db Patrick Plitzner
    private void initDataModel() {
56 fc53e2e8 Andreas Müller
        Collection<PresenceAbsenceTerm> distributionStatus = getDistributionStatusList(TERMS_INIT_STRATEGY);
57 3b0bc0db Patrick Plitzner
        defaultDistributionStatus = distributionStatus;
58
		addAll(distributionStatus);
59
    }
60
61 c226920a Fabian Reimeier
    /**
62
     * Gets an existing instance of the {@link PresenceAbsenceTermContainer} or creates a new one.
63
     * @return Instance of {@link PresenceAbsenceTermContainer}.
64
     */
65 3b0bc0db Patrick Plitzner
	public static PresenceAbsenceTermContainer getInstance(){
66 fc53e2e8 Andreas Müller
	    if(instance == null){
67 3b0bc0db Patrick Plitzner
	        instance = new PresenceAbsenceTermContainer();
68
	    }
69
        Collection<PresenceAbsenceTerm> distributionStatus = new HashSet<>();
70
        Object attribute = VaadinSession.getCurrent().getAttribute(DistributionEditorUtil.SATTR_DISTRIBUTION_STATUS);
71 fc53e2e8 Andreas Müller
        if(attribute != null){
72 3b0bc0db Patrick Plitzner
            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 aab82329 Patrick Plitzner
	}
81 f9837f2a Patrick Plitzner
82 c226920a Fabian Reimeier
	/**
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 fc53e2e8 Andreas Müller
    public static List<PresenceAbsenceTerm> getDistributionStatusList(List<String> propertyPath){
88
        CdmPreference statusPref = CdmSpringContextHelper.getPreferenceService().findVaadin(PreferencePredicate.AvailableDistributionStatus);
89 83e3c490 Fabian Reimeier
        List<PresenceAbsenceTerm> paList;
90 fc53e2e8 Andreas Müller
        if (statusPref != null){
91
            List<UUID> uuidList = statusPref.getValueUuidList();
92 83e3c490 Fabian Reimeier
            paList = CdmSpringContextHelper.getTermService().load(uuidList, propertyPath).stream().map(db -> (PresenceAbsenceTerm)db).collect(Collectors.toList());
93
            paList.sort(new PresenceAbsenceTermComparator());
94
            return paList;
95 fc53e2e8 Andreas Müller
        }else{
96 19eaf51a Fabian Reimeier
            paList = CdmSpringContextHelper.getTermService().listByTermType(TermType.PresenceAbsenceTerm, null, null, null,propertyPath);
97 83e3c490 Fabian Reimeier
            paList.sort(new PresenceAbsenceTermComparator());
98
            return paList;
99 fc53e2e8 Andreas Müller
        }
100
    }
101
102
    protected static final List<String> TERMS_INIT_STRATEGY = Arrays.asList(new String []{
103
            "$",
104
            "representations",
105
    });
106 aab82329 Patrick Plitzner
}