Merge branch 'release/5.18.0'
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / ui / section / description / detail / DistributionDetailElement.java
index 00b5ca0f599e02744518660d6827cefbd4a003f5..bb8579b15a0bc22eeb546040fe791534e2cc8f4b 100644 (file)
@@ -1,21 +1,36 @@
-// $Id$
 /**
 * Copyright (C) 2007 EDIT
-* European Distributed Institute of Taxonomy 
+* European Distributed Institute of Taxonomy
 * http://www.e-taxonomy.eu
-* 
+*
 * The contents of this file are subject to the Mozilla Public License Version 1.1
 * See LICENSE.TXT at the top of this package for the full license terms.
 */
-
 package eu.etaxonomy.taxeditor.ui.section.description.detail;
 
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+
+import org.apache.commons.lang3.StringUtils;
+
 import eu.etaxonomy.cdm.model.description.Distribution;
-import eu.etaxonomy.cdm.model.description.PresenceAbsenceTermBase;
+import eu.etaxonomy.cdm.model.description.PresenceAbsenceTerm;
 import eu.etaxonomy.cdm.model.location.NamedArea;
-import eu.etaxonomy.taxeditor.ui.campanula.compatibility.ICdmFormElement;
-import eu.etaxonomy.taxeditor.ui.combo.TermComboElement;
+import eu.etaxonomy.cdm.model.metadata.CdmPreference;
+import eu.etaxonomy.cdm.model.metadata.CdmPreference.PrefKey;
+import eu.etaxonomy.cdm.model.metadata.PreferencePredicate;
+import eu.etaxonomy.cdm.model.metadata.PreferenceSubject;
+import eu.etaxonomy.cdm.model.term.DefinedTermBase;
+import eu.etaxonomy.taxeditor.editor.IDistributionEditorPart;
+import eu.etaxonomy.taxeditor.model.AbstractUtility;
+import eu.etaxonomy.taxeditor.preference.CdmPreferenceCache;
+import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
+import eu.etaxonomy.taxeditor.store.CdmStore;
+import eu.etaxonomy.taxeditor.ui.combo.term.TermComboElement;
 import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
+import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
+import eu.etaxonomy.taxeditor.ui.element.TextWithLabelElement;
 import eu.etaxonomy.taxeditor.ui.selection.EntitySelectionElement;
 
 /**
@@ -29,8 +44,11 @@ public class DistributionDetailElement extends
                AbstractDetailedDescriptionDetailElement<Distribution> {
 
        private EntitySelectionElement<NamedArea> selection_namedArea;
-       private TermComboElement<PresenceAbsenceTermBase> combo_presenceAbsence;
-       
+       private TermComboElement<DefinedTermBase> combo_presenceAbsence;
+       private boolean namedAreaEditable = true;
+
+       private TextWithLabelElement taxonOfDistribtion;
+
 
        /**
         * <p>Constructor for DistributionDetailElement.</p>
@@ -41,30 +59,101 @@ public class DistributionDetailElement extends
         * @param style a int.
         */
        public DistributionDetailElement(CdmFormFactory formFactory,
-                       ICdmFormElement formElement, Distribution entity, int style) {
+                       ICdmFormElement formElement, Distribution entity, boolean enabled, int style) {
                super(formFactory, formElement, entity, style);
+               setEnabled(enabled);
+
        }
-       
+
        /** {@inheritDoc} */
        @Override
        protected void createControls(ICdmFormElement formElement,
                        Distribution entity, int style) {
-               selection_namedArea = formFactory.createSelectionElement(NamedArea.class, getConversationHolder(),
-                               formElement, "Area",
-                               entity.getArea(), EntitySelectionElement.NOTHING, style);
-        combo_presenceAbsence = formFactory.createTermComboElement(PresenceAbsenceTermBase.class, this, "Distribution Status", entity.getStatus(), style);
-        
+
+           if (AbstractUtility.getActivePart() instanceof IDistributionEditorPart){
+               String nameCache = null;
+               nameCache = ((IDistributionEditorPart)AbstractUtility.getActivePart()).getEditor().getActualNameCache();
+               taxonOfDistribtion = formFactory.createTextWithLabelElement(formElement, "Taxon", nameCache, style);
+               taxonOfDistribtion.setEnabled(false);
+           }
+
+           if (PreferencesUtil.getBooleanValue(PreferencePredicate.NamedAreaWithIdInVoc.getKey())) {
+            selection_namedArea = formFactory.createSelectionElementWithIdInVocabulary(NamedArea.class,
+                       formElement, "Area",
+                       entity.getArea(), EntitySelectionElement.NOTHING, style);
+        }else{
+            selection_namedArea = formFactory.createSelectionElement(NamedArea.class,
+                    formElement, "Area",
+                    entity.getArea(), EntitySelectionElement.NOTHING, style);
+        }
+
+               ICdmFormElement parent = this.getParentElement();
+               NamedArea area = entity.getArea();
+               List<DefinedTermBase> inputList = getStatusListForArea(area);
+        combo_presenceAbsence = formFactory.createDefinedTermComboElement(inputList, this, "Distribution Status", entity.getStatus(), style);
+        createTimePeriod(formElement, entity, style);
+        if (entity.getFeature().getRecommendedModifierEnumeration() != null && !entity.getFeature().getRecommendedModifierEnumeration().isEmpty()){
+            createModifier(formElement, entity, style);
+        }else{
+            createFreetextModifier(formElement, entity, style);
+        }
        }
 
+    public List<DefinedTermBase> getStatusListForArea(NamedArea area) {
+        PrefKey key;
+               if (area!= null){
+                   key = CdmPreference.NewKey(PreferenceSubject.NewInstance(PreferenceSubject.ROOT+"NamedArea["+area.getUuid().toString() + "]"+PreferenceSubject.ROOT), PreferencePredicate.AvailableDistributionStatus);
+               }else{
+                   key = CdmPreference.NewKey(PreferenceSubject.NewTaxEditorInstance(), PreferencePredicate.AvailableDistributionStatus);
+               }
+        CdmPreference pref = CdmPreferenceCache.instance().get(key);
+        // if there is no preference for the area, look for the general
+        if (pref == null || pref.isAllowOverride()){
+            pref = CdmPreference.NewTaxEditorInstance(PreferencePredicate.AvailableDistributionStatus, PreferencesUtil.getStringValue(PreferencePredicate.AvailableDistributionStatus.getKey()));
+        }
+
+        String [] statusArray = null;
+        List<UUID> uuidList = new ArrayList<>();
+        if (pref.getValue() != null){
+            statusArray = pref.getValue().split(";");
+            for (String status: statusArray){
+                if (StringUtils.isNotBlank(status)){
+                       uuidList.add(UUID.fromString(status));
+                }
+            }
+        }
+
+
+
+        List<DefinedTermBase> inputList = CdmStore.getTermManager().getTerms(uuidList, PresenceAbsenceTerm.class);
+        return inputList;
+    }
+
        /** {@inheritDoc} */
        @Override
        public void handleEvent(Object eventSource) {
-               if(eventSource == selection_namedArea){
+           super.handleEvent(eventSource);
+           if(eventSource == selection_namedArea){
                        getEntity().setArea(selection_namedArea.getEntity());
+
+               if (selection_namedArea.getEntity()!= null){
+                   List<DefinedTermBase> inputList = getStatusListForArea(selection_namedArea.getEntity());
+                   DefinedTermBase selectedTerm = combo_presenceAbsence.getSelection();
+                   if (!inputList.equals(combo_presenceAbsence.getTerms())){
+                       combo_presenceAbsence.setTerms(inputList);
+                       if (inputList.contains(selectedTerm)){
+                           combo_presenceAbsence.setSelection(selectedTerm);
+                       }
+                   }
+               }
+
                }else if(eventSource == combo_presenceAbsence){
-                       getEntity().setStatus(combo_presenceAbsence.getSelection());
+                       getEntity().setStatus((PresenceAbsenceTerm)combo_presenceAbsence.getSelection());
                }
        }
 
-       
+       public void setName(String nameCache){
+           taxonOfDistribtion.setText(nameCache);
+       }
+
 }