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
.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
;
41 public class StatusComboBoxDataProvider
implements IComboBoxDataProvider
{
43 private DistributionEditor editor
;
44 private int maxVisibleItems
;
46 public StatusComboBoxDataProvider(DistributionEditor editor
) {
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
59 pref
= CdmPreference
.NewTaxEditorInstance(PreferencePredicate
.AvailableDistributionStatus
, PreferencesUtil
.getStringValue(PreferencePredicate
.AvailableDistributionStatus
.getKey()));
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);
66 // pref = CdmPreference.NewTaxEditorInstance(PreferencePredicate.AvailableDistributionStatus, PreferencePredicate.AvailableDistributionStatus.getDefaultValue() != null ? PreferencePredicate.AvailableDistributionStatus.getDefaultValue().toString(): null);
69 return getValues(pref
);
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();
82 List
<PresenceAbsenceTerm
> inputList
;
83 if (!StringUtils
.isBlank(statusString
)){
85 String
[] statusArray
= statusString
.split(";");
86 List
<UUID
> uuidList
= new ArrayList();
87 for (String status
: statusArray
){
88 uuidList
.add(UUID
.fromString(status
));
91 inputList
= CdmStore
.getTermManager().getTerms(uuidList
, PresenceAbsenceTerm
.class);
94 inputList
= CdmStore
.getTermManager().getPreferredTerms(PresenceAbsenceTerm
.class);
98 Comparator
<DefinedTermBase
> comp
= new OrderedTermComparator
<>();
99 //check the status order preference
100 TermOrder order
= TermOrder
.valueOf(PreferencesUtil
.getStringValue(PreferencePredicate
.StatusSortedInDistributionEditor
.getKey()));
102 if (order
.equals(TermOrder
.IdInVoc
)){
103 comp
= new TermIdInVocabularyComparator();
104 }else if(order
.equals(TermOrder
.Label
)){
105 comp
= new TermLanguageComparator();
107 Collections
.sort(inputList
, comp
);
108 // Collections.sort(inputList, Collections.reverseOrder());
110 for (PresenceAbsenceTerm term
: inputList
){
111 inputAll
.add(index
, new StatusHelper(term
));
114 // inputAll.addAll(1, inputList);
118 public int getMaxVisibleItems(){
119 return maxVisibleItems
;