Merge branch 'release/5.19.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.compare.term.OrderedTermComparator;
21 import eu.etaxonomy.cdm.compare.term.TermIdInVocabularyComparator;
22 import eu.etaxonomy.cdm.compare.term.TermLanguageComparator;
23 import eu.etaxonomy.cdm.model.common.Language;
24 import eu.etaxonomy.cdm.model.description.PresenceAbsenceTerm;
25 import eu.etaxonomy.cdm.model.location.NamedArea;
26 import eu.etaxonomy.cdm.model.metadata.CdmPreference;
27 import eu.etaxonomy.cdm.model.metadata.CdmPreference.PrefKey;
28 import eu.etaxonomy.cdm.model.metadata.PreferencePredicate;
29 import eu.etaxonomy.cdm.model.metadata.PreferenceSubject;
30 import eu.etaxonomy.cdm.model.metadata.TermOrder;
31 import eu.etaxonomy.cdm.model.term.DefinedTermBase;
32 import eu.etaxonomy.cdm.model.term.Representation;
33 import eu.etaxonomy.taxeditor.preference.CdmPreferenceCache;
34 import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
35 import eu.etaxonomy.taxeditor.store.CdmStore;
36
37 /**
38 * @author k.luther
39 * @since 05.12.2018
40 *
41 */
42 public class StatusComboBoxDataProvider implements IComboBoxDataProvider {
43
44 private DistributionEditor editor;
45 private int maxVisibleItems;
46
47 public StatusComboBoxDataProvider(DistributionEditor editor) {
48 super();
49 this.editor = editor;
50
51 }
52
53 @Override
54 public List<?> getValues(int columnIndex, int rowIndex) {
55 NamedArea area = editor.getAreaToColumnIndexMap().get(columnIndex);
56 PrefKey key = CdmPreference.NewKey(PreferenceSubject.NewInstance(PreferenceSubject.ROOT+"NamedArea["+area.getUuid().toString() + "]"+PreferenceSubject.ROOT), PreferencePredicate.AvailableDistributionStatus);
57 CdmPreference pref = CdmPreferenceCache.instance().get(key);
58 // if there is no preference for the area, look for the general
59 if (pref == null){
60 pref = CdmPreference.NewTaxEditorInstance(PreferencePredicate.AvailableDistributionStatus, PreferencesUtil.getStringValue(PreferencePredicate.AvailableDistributionStatus.getKey()));
61 }
62 // if (pref == null) {
63 // key = CdmPreference.NewKey(PreferenceSubject.NewTaxEditorInstance(), PreferencePredicate.AvailableDistributionStatus);
64 // //pref = PreferenceResolver.resolve(preferenceCache.get(predicate), CdmPreference.NewKey(PreferenceSubject.NewTaxEditorInstance(), PreferencePredicate.getByKey(predicate)));
65 // pref = CdmPreferenceCache.instance().get(key);
66 // if (pref == null){
67 // pref = CdmPreference.NewTaxEditorInstance(PreferencePredicate.AvailableDistributionStatus, PreferencePredicate.AvailableDistributionStatus.getDefaultValue() != null ? PreferencePredicate.AvailableDistributionStatus.getDefaultValue().toString(): null);
68 // }
69 // }
70 return getValues(pref);
71
72 }
73
74
75 public static List<?> getValues(CdmPreference pref){
76 List<StatusHelper> inputAll = new ArrayList<>();
77 PresenceAbsenceTerm noneTerm = PresenceAbsenceTerm.NewInstance();
78 noneTerm.setTitleCache(" - ", true);
79 noneTerm.addRepresentation(Representation.NewInstance(" - ", " ", " ", CdmStore.getDefaultLanguage()));
80 inputAll.add(new StatusHelper(noneTerm));
81 String statusString = pref.getValue();
82
83 List<PresenceAbsenceTerm> inputList;
84 if (!StringUtils.isBlank(statusString)){
85
86 String [] statusArray = statusString.split(";");
87 List<UUID> uuidList = new ArrayList<>();
88 for (String status: statusArray){
89 uuidList.add(UUID.fromString(status));
90 }
91
92 inputList = CdmStore.getTermManager().getTerms(uuidList, PresenceAbsenceTerm.class);
93 }else{
94
95 inputList = CdmStore.getTermManager().getPreferredTerms(PresenceAbsenceTerm.class);
96 }
97
98
99 Comparator<DefinedTermBase> comp = new OrderedTermComparator<>();
100 //check the status order preference
101 TermOrder order = TermOrder.valueOf(PreferencesUtil.getStringValue(PreferencePredicate.StatusSortedInDistributionEditor.getKey()));
102
103 if (order.equals(TermOrder.IdInVoc)){
104 comp = new TermIdInVocabularyComparator<DefinedTermBase>();
105 }else if(order.equals(TermOrder.Label)){
106 comp = new TermLanguageComparator<DefinedTermBase>(Language.DEFAULT(), Language.DEFAULT());
107 }
108 Collections.sort(inputList, comp);
109 // Collections.sort(inputList, Collections.reverseOrder());
110 int index = 1;
111 for (PresenceAbsenceTerm term: inputList){
112 inputAll.add(index, new StatusHelper(term));
113 index++;
114 }
115 // inputAll.addAll(1, inputList);
116 return inputAll;
117 }
118
119 public int getMaxVisibleItems(){
120 return maxVisibleItems;
121 }
122 }