2 * Copyright (C) 2007 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
.ui
.section
.description
.detail
;
11 import java
.util
.ArrayList
;
12 import java
.util
.List
;
13 import java
.util
.UUID
;
15 import org
.apache
.commons
.lang3
.StringUtils
;
17 import eu
.etaxonomy
.cdm
.model
.description
.Distribution
;
18 import eu
.etaxonomy
.cdm
.model
.description
.PresenceAbsenceTerm
;
19 import eu
.etaxonomy
.cdm
.model
.location
.NamedArea
;
20 import eu
.etaxonomy
.cdm
.model
.metadata
.CdmPreference
;
21 import eu
.etaxonomy
.cdm
.model
.metadata
.CdmPreference
.PrefKey
;
22 import eu
.etaxonomy
.cdm
.model
.metadata
.PreferencePredicate
;
23 import eu
.etaxonomy
.cdm
.model
.metadata
.PreferenceSubject
;
24 import eu
.etaxonomy
.cdm
.model
.term
.DefinedTermBase
;
25 import eu
.etaxonomy
.taxeditor
.editor
.IDistributionEditorPart
;
26 import eu
.etaxonomy
.taxeditor
.model
.AbstractUtility
;
27 import eu
.etaxonomy
.taxeditor
.preference
.CdmPreferenceCache
;
28 import eu
.etaxonomy
.taxeditor
.preference
.PreferencesUtil
;
29 import eu
.etaxonomy
.taxeditor
.store
.CdmStore
;
30 import eu
.etaxonomy
.taxeditor
.ui
.combo
.term
.TermComboElement
;
31 import eu
.etaxonomy
.taxeditor
.ui
.element
.CdmFormFactory
;
32 import eu
.etaxonomy
.taxeditor
.ui
.element
.ICdmFormElement
;
33 import eu
.etaxonomy
.taxeditor
.ui
.element
.TextWithLabelElement
;
34 import eu
.etaxonomy
.taxeditor
.ui
.selection
.EntitySelectionElement
;
37 * <p>DistributionDetailElement class.</p>
40 * @created Jun 10, 2010
43 public class DistributionDetailElement
extends
44 AbstractDetailedDescriptionDetailElement
<Distribution
> {
46 private EntitySelectionElement
<NamedArea
> selection_namedArea
;
47 private TermComboElement
<DefinedTermBase
> combo_presenceAbsence
;
48 private boolean namedAreaEditable
= true;
50 private TextWithLabelElement taxonOfDistribtion
;
54 * <p>Constructor for DistributionDetailElement.</p>
56 * @param formFactory a {@link eu.etaxonomy.taxeditor.ui.element.CdmFormFactory} object.
57 * @param formElement a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement} object.
58 * @param entity a {@link eu.etaxonomy.cdm.model.description.Distribution} object.
61 public DistributionDetailElement(CdmFormFactory formFactory
,
62 ICdmFormElement formElement
, Distribution entity
, boolean enabled
, int style
) {
63 super(formFactory
, formElement
, entity
, style
);
70 protected void createControls(ICdmFormElement formElement
,
71 Distribution entity
, int style
) {
73 if (AbstractUtility
.getActivePart() instanceof IDistributionEditorPart
){
74 String nameCache
= null;
75 nameCache
= ((IDistributionEditorPart
)AbstractUtility
.getActivePart()).getEditor().getActualNameCache();
76 taxonOfDistribtion
= formFactory
.createTextWithLabelElement(formElement
, "Taxon", nameCache
, style
);
77 taxonOfDistribtion
.setEnabled(false);
80 if (PreferencesUtil
.getBooleanValue(PreferencePredicate
.NamedAreaWithIdInVoc
.getKey())) {
81 selection_namedArea
= formFactory
.createSelectionElementWithIdInVocabulary(NamedArea
.class,
83 entity
.getArea(), EntitySelectionElement
.NOTHING
, style
);
85 selection_namedArea
= formFactory
.createSelectionElement(NamedArea
.class,
87 entity
.getArea(), EntitySelectionElement
.NOTHING
, style
);
90 ICdmFormElement parent
= this.getParentElement();
91 NamedArea area
= entity
.getArea();
92 List
<DefinedTermBase
> inputList
= getStatusListForArea(area
);
93 combo_presenceAbsence
= formFactory
.createDefinedTermComboElement(inputList
, this, "Distribution Status", entity
.getStatus(), style
);
94 createTimePeriod(formElement
, entity
, style
);
95 if (entity
.getFeature().getRecommendedModifierEnumeration() != null && !entity
.getFeature().getRecommendedModifierEnumeration().isEmpty()){
96 createModifier(formElement
, entity
, style
);
98 createFreetextModifier(formElement
, entity
, style
);
102 public List
<DefinedTermBase
> getStatusListForArea(NamedArea area
) {
105 key
= CdmPreference
.NewKey(PreferenceSubject
.NewInstance(PreferenceSubject
.ROOT
+"NamedArea["+area
.getUuid().toString() + "]"+PreferenceSubject
.ROOT
), PreferencePredicate
.AvailableDistributionStatus
);
107 key
= CdmPreference
.NewKey(PreferenceSubject
.NewTaxEditorInstance(), PreferencePredicate
.AvailableDistributionStatus
);
109 CdmPreference pref
= CdmPreferenceCache
.instance().get(key
);
110 // if there is no preference for the area, look for the general
111 if (pref
== null || pref
.isAllowOverride()){
112 pref
= CdmPreference
.NewTaxEditorInstance(PreferencePredicate
.AvailableDistributionStatus
, PreferencesUtil
.getStringValue(PreferencePredicate
.AvailableDistributionStatus
.getKey()));
115 String
[] statusArray
= null;
116 List
<UUID
> uuidList
= new ArrayList
<>();
117 if (pref
.getValue() != null){
118 statusArray
= pref
.getValue().split(";");
119 for (String status
: statusArray
){
120 if (StringUtils
.isNotBlank(status
)){
121 uuidList
.add(UUID
.fromString(status
));
128 List
<DefinedTermBase
> inputList
= CdmStore
.getTermManager().getTerms(uuidList
, PresenceAbsenceTerm
.class);
134 public void handleEvent(Object eventSource
) {
135 super.handleEvent(eventSource
);
136 if(eventSource
== selection_namedArea
){
137 getEntity().setArea(selection_namedArea
.getEntity());
139 if (selection_namedArea
.getEntity()!= null){
140 List
<DefinedTermBase
> inputList
= getStatusListForArea(selection_namedArea
.getEntity());
141 DefinedTermBase selectedTerm
= combo_presenceAbsence
.getSelection();
142 if (!inputList
.equals(combo_presenceAbsence
.getTerms())){
143 combo_presenceAbsence
.setTerms(inputList
);
144 if (inputList
.contains(selectedTerm
)){
145 combo_presenceAbsence
.setSelection(selectedTerm
);
150 }else if(eventSource
== combo_presenceAbsence
){
151 getEntity().setStatus((PresenceAbsenceTerm
)combo_presenceAbsence
.getSelection());
155 public void setName(String nameCache
){
156 taxonOfDistribtion
.setText(nameCache
);