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
.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
;
44 public class StatusComboBoxDataProvider
implements IComboBoxDataProvider
{
46 private DistributionEditor editor
;
47 private int maxVisibleItems
;
49 public StatusComboBoxDataProvider(DistributionEditor editor
) {
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
62 pref
= CdmPreference
.NewTaxEditorInstance(PreferencePredicate
.AvailableDistributionStatus
, PreferencesUtil
.getStringValue(PreferencePredicate
.AvailableDistributionStatus
.getKey()));
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);
69 // pref = CdmPreference.NewTaxEditorInstance(PreferencePredicate.AvailableDistributionStatus, PreferencePredicate.AvailableDistributionStatus.getDefaultValue() != null ? PreferencePredicate.AvailableDistributionStatus.getDefaultValue().toString(): null);
72 return getValues(pref
);
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();
85 List
<PresenceAbsenceTerm
> inputList
;
86 if (!StringUtils
.isBlank(statusString
)){
88 String
[] statusArray
= statusString
.split(";");
89 List
<UUID
> uuidList
= new ArrayList
<>();
90 for (String status
: statusArray
){
91 uuidList
.add(UUID
.fromString(status
));
94 inputList
= CdmStore
.getTermManager().getTerms(uuidList
, PresenceAbsenceTerm
.class);
97 inputList
= CdmStore
.getTermManager().getPreferredTerms(PresenceAbsenceTerm
.class);
101 Comparator
<DefinedTermBase
> comp
= new OrderedTermComparator
<>();
102 //check the status order preference
103 TermOrder order
= null;
105 order
= TermOrder
.valueOf(PreferencesUtil
.getStringValue(PreferencePredicate
.StatusSortedInDistributionEditor
.getKey()));
106 }catch (IllegalArgumentException e
){
107 order
= TermOrder
.Label
;
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
>();
119 Collections
.sort(inputList
, comp
);
120 // Collections.sort(inputList, Collections.reverseOrder());
122 for (PresenceAbsenceTerm term
: inputList
){
123 inputAll
.add(index
, new StatusHelper(term
));
126 // inputAll.addAll(1, inputList);
130 public int getMaxVisibleItems(){
131 return maxVisibleItems
;