Merge branch 'release/5.18.0'
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / ui / section / description / detail / DistributionDetailElement.java
1 /**
2 * Copyright (C) 2007 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.ui.section.description.detail;
10
11 import java.util.ArrayList;
12 import java.util.List;
13 import java.util.UUID;
14
15 import org.apache.commons.lang3.StringUtils;
16
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;
35
36 /**
37 * <p>DistributionDetailElement class.</p>
38 *
39 * @author n.hoffmann
40 * @created Jun 10, 2010
41 * @version 1.0
42 */
43 public class DistributionDetailElement extends
44 AbstractDetailedDescriptionDetailElement<Distribution> {
45
46 private EntitySelectionElement<NamedArea> selection_namedArea;
47 private TermComboElement<DefinedTermBase> combo_presenceAbsence;
48 private boolean namedAreaEditable = true;
49
50 private TextWithLabelElement taxonOfDistribtion;
51
52
53 /**
54 * <p>Constructor for DistributionDetailElement.</p>
55 *
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.
59 * @param style a int.
60 */
61 public DistributionDetailElement(CdmFormFactory formFactory,
62 ICdmFormElement formElement, Distribution entity, boolean enabled, int style) {
63 super(formFactory, formElement, entity, style);
64 setEnabled(enabled);
65
66 }
67
68 /** {@inheritDoc} */
69 @Override
70 protected void createControls(ICdmFormElement formElement,
71 Distribution entity, int style) {
72
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);
78 }
79
80 if (PreferencesUtil.getBooleanValue(PreferencePredicate.NamedAreaWithIdInVoc.getKey())) {
81 selection_namedArea = formFactory.createSelectionElementWithIdInVocabulary(NamedArea.class,
82 formElement, "Area",
83 entity.getArea(), EntitySelectionElement.NOTHING, style);
84 }else{
85 selection_namedArea = formFactory.createSelectionElement(NamedArea.class,
86 formElement, "Area",
87 entity.getArea(), EntitySelectionElement.NOTHING, style);
88 }
89
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);
97 }else{
98 createFreetextModifier(formElement, entity, style);
99 }
100 }
101
102 public List<DefinedTermBase> getStatusListForArea(NamedArea area) {
103 PrefKey key;
104 if (area!= null){
105 key = CdmPreference.NewKey(PreferenceSubject.NewInstance(PreferenceSubject.ROOT+"NamedArea["+area.getUuid().toString() + "]"+PreferenceSubject.ROOT), PreferencePredicate.AvailableDistributionStatus);
106 }else{
107 key = CdmPreference.NewKey(PreferenceSubject.NewTaxEditorInstance(), PreferencePredicate.AvailableDistributionStatus);
108 }
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()));
113 }
114
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));
122 }
123 }
124 }
125
126
127
128 List<DefinedTermBase> inputList = CdmStore.getTermManager().getTerms(uuidList, PresenceAbsenceTerm.class);
129 return inputList;
130 }
131
132 /** {@inheritDoc} */
133 @Override
134 public void handleEvent(Object eventSource) {
135 super.handleEvent(eventSource);
136 if(eventSource == selection_namedArea){
137 getEntity().setArea(selection_namedArea.getEntity());
138
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);
146 }
147 }
148 }
149
150 }else if(eventSource == combo_presenceAbsence){
151 getEntity().setStatus((PresenceAbsenceTerm)combo_presenceAbsence.getSelection());
152 }
153 }
154
155 public void setName(String nameCache){
156 taxonOfDistribtion.setText(nameCache);
157 }
158
159 }