Merge branch 'release/5.18.0'
[taxeditor.git] / eu.etaxonomy.taxeditor.editor / src / main / java / eu / etaxonomy / taxeditor / editor / view / checklist / e4 / StatusComboBoxDataProvider.java
1 /**
2 * Copyright (C) 2018 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
5 *
6 * The contents of this file are subject to the Mozilla Public License Version 1.1
7 * See LICENSE.TXT at the top of this package for the full license terms.
8 */
9 package eu.etaxonomy.taxeditor.editor.view.checklist.e4;
10
11 import java.util.ArrayList;
12 import java.util.Collections;
13 import java.util.Comparator;
14 import java.util.List;
15 import java.util.UUID;
16
17 import org.apache.commons.lang3.StringUtils;
18 import org.eclipse.nebula.widgets.nattable.edit.editor.IComboBoxDataProvider;
19
20 import eu.etaxonomy.cdm.model.description.PresenceAbsenceTerm;
21 import eu.etaxonomy.cdm.model.location.NamedArea;
22 import eu.etaxonomy.cdm.model.metadata.CdmPreference;
23 import eu.etaxonomy.cdm.model.metadata.CdmPreference.PrefKey;
24 import eu.etaxonomy.cdm.model.metadata.PreferencePredicate;
25 import eu.etaxonomy.cdm.model.metadata.PreferenceSubject;
26 import eu.etaxonomy.cdm.model.metadata.TermOrder;
27 import eu.etaxonomy.cdm.model.term.DefinedTermBase;
28 import eu.etaxonomy.cdm.model.term.OrderedTermComparator;
29 import eu.etaxonomy.cdm.model.term.Representation;
30 import eu.etaxonomy.cdm.model.term.TermIdInVocabularyComparator;
31 import eu.etaxonomy.cdm.model.term.TermLanguageComparator;
32 import eu.etaxonomy.taxeditor.preference.CdmPreferenceCache;
33 import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
34 import eu.etaxonomy.taxeditor.store.CdmStore;
35
36 /**
37 * @author k.luther
38 * @since 05.12.2018
39 *
40 */
41 public class StatusComboBoxDataProvider implements IComboBoxDataProvider {
42
43 private DistributionEditor editor;
44 private int maxVisibleItems;
45
46 public StatusComboBoxDataProvider(DistributionEditor editor) {
47 super();
48 this.editor = editor;
49
50 }
51
52 @Override
53 public List<?> getValues(int columnIndex, int rowIndex) {
54 NamedArea area = editor.getAreaToColumnIndexMap().get(columnIndex);
55 PrefKey key = CdmPreference.NewKey(PreferenceSubject.NewInstance(PreferenceSubject.ROOT+"NamedArea["+area.getUuid().toString() + "]"+PreferenceSubject.ROOT), PreferencePredicate.AvailableDistributionStatus);
56 CdmPreference pref = CdmPreferenceCache.instance().get(key);
57 // if there is no preference for the area, look for the general
58 if (pref == null){
59 pref = CdmPreference.NewTaxEditorInstance(PreferencePredicate.AvailableDistributionStatus, PreferencesUtil.getStringValue(PreferencePredicate.AvailableDistributionStatus.getKey()));
60 }
61 // if (pref == null) {
62 // key = CdmPreference.NewKey(PreferenceSubject.NewTaxEditorInstance(), PreferencePredicate.AvailableDistributionStatus);
63 // //pref = PreferenceResolver.resolve(preferenceCache.get(predicate), CdmPreference.NewKey(PreferenceSubject.NewTaxEditorInstance(), PreferencePredicate.getByKey(predicate)));
64 // pref = CdmPreferenceCache.instance().get(key);
65 // if (pref == null){
66 // pref = CdmPreference.NewTaxEditorInstance(PreferencePredicate.AvailableDistributionStatus, PreferencePredicate.AvailableDistributionStatus.getDefaultValue() != null ? PreferencePredicate.AvailableDistributionStatus.getDefaultValue().toString(): null);
67 // }
68 // }
69 return getValues(pref);
70
71 }
72
73
74 public static List<?> getValues(CdmPreference pref){
75 List<StatusHelper> inputAll = new ArrayList<>();
76 PresenceAbsenceTerm noneTerm = PresenceAbsenceTerm.NewInstance();
77 noneTerm.setTitleCache(" - ", true);
78 noneTerm.addRepresentation(Representation.NewInstance(" - ", " ", " ", CdmStore.getDefaultLanguage()));
79 inputAll.add(new StatusHelper(noneTerm));
80 String statusString = pref.getValue();
81
82 List<PresenceAbsenceTerm> inputList;
83 if (!StringUtils.isBlank(statusString)){
84
85 String [] statusArray = statusString.split(";");
86 List<UUID> uuidList = new ArrayList();
87 for (String status: statusArray){
88 uuidList.add(UUID.fromString(status));
89 }
90
91 inputList = CdmStore.getTermManager().getTerms(uuidList, PresenceAbsenceTerm.class);
92 }else{
93
94 inputList = CdmStore.getTermManager().getPreferredTerms(PresenceAbsenceTerm.class);
95 }
96
97
98 Comparator<DefinedTermBase> comp = new OrderedTermComparator<>();
99 //check the status order preference
100 TermOrder order = TermOrder.valueOf(PreferencesUtil.getStringValue(PreferencePredicate.StatusSortedInDistributionEditor.getKey()));
101
102 if (order.equals(TermOrder.IdInVoc)){
103 comp = new TermIdInVocabularyComparator();
104 }else if(order.equals(TermOrder.Label)){
105 comp = new TermLanguageComparator();
106 }
107 Collections.sort(inputList, comp);
108 // Collections.sort(inputList, Collections.reverseOrder());
109 int index = 1;
110 for (PresenceAbsenceTerm term: inputList){
111 inputAll.add(index, new StatusHelper(term));
112 index++;
113 }
114 // inputAll.addAll(1, inputList);
115 return inputAll;
116 }
117
118 public int getMaxVisibleItems(){
119 return maxVisibleItems;
120 }
121
122 }