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