2 * Copyright (C) 2018 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
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.
9 package eu
.etaxonomy
.taxeditor
.editor
.view
.checklist
.e4
;
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
;
17 import org
.apache
.commons
.lang3
.StringUtils
;
18 import org
.eclipse
.nebula
.widgets
.nattable
.edit
.editor
.IComboBoxDataProvider
;
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
;
42 public class StatusComboBoxDataProvider
implements IComboBoxDataProvider
{
44 private DistributionEditor editor
;
45 private int maxVisibleItems
;
47 public StatusComboBoxDataProvider(DistributionEditor editor
) {
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
60 pref
= CdmPreference
.NewTaxEditorInstance(PreferencePredicate
.AvailableDistributionStatus
, PreferencesUtil
.getStringValue(PreferencePredicate
.AvailableDistributionStatus
.getKey()));
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);
67 // pref = CdmPreference.NewTaxEditorInstance(PreferencePredicate.AvailableDistributionStatus, PreferencePredicate.AvailableDistributionStatus.getDefaultValue() != null ? PreferencePredicate.AvailableDistributionStatus.getDefaultValue().toString(): null);
70 return getValues(pref
);
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();
83 List
<PresenceAbsenceTerm
> inputList
;
84 if (!StringUtils
.isBlank(statusString
)){
86 String
[] statusArray
= statusString
.split(";");
87 List
<UUID
> uuidList
= new ArrayList
<>();
88 for (String status
: statusArray
){
89 uuidList
.add(UUID
.fromString(status
));
92 inputList
= CdmStore
.getTermManager().getTerms(uuidList
, PresenceAbsenceTerm
.class);
95 inputList
= CdmStore
.getTermManager().getPreferredTerms(PresenceAbsenceTerm
.class);
99 Comparator
<DefinedTermBase
> comp
= new OrderedTermComparator
<>();
100 //check the status order preference
101 TermOrder order
= TermOrder
.valueOf(PreferencesUtil
.getStringValue(PreferencePredicate
.StatusSortedInDistributionEditor
.getKey()));
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());
108 Collections
.sort(inputList
, comp
);
109 // Collections.sort(inputList, Collections.reverseOrder());
111 for (PresenceAbsenceTerm term
: inputList
){
112 inputAll
.add(index
, new StatusHelper(term
));
115 // inputAll.addAll(1, inputList);
119 public int getMaxVisibleItems(){
120 return maxVisibleItems
;