ref #9033: adapt editor to taxonnode.status
authorKatja Luther <k.luther@bgbm.org>
Wed, 27 May 2020 14:44:49 +0000 (16:44 +0200)
committerKatja Luther <k.luther@bgbm.org>
Wed, 27 May 2020 14:44:49 +0000 (16:44 +0200)
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/operation/ChangeConceptRelationshipTypeOperation.java
eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/operation/SetUnplacedExcludedDoubtfulOperation.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/newWizard/NewTaxonNodeWizard.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/combo/AbstractComboElement.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/combo/EnumComboElement.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/classification/TaxonNodeDetailElement.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/supplemental/AbstractOriginalSourceElement.java

index 285b5b093182c61df844930ddda426e4b49c38b1..8d6672ab78ed186a9ff78a91408ace015f10684e 100644 (file)
@@ -61,7 +61,7 @@ public class ChangeConceptRelationshipTypeOperation extends AbstractPostTaxonOpe
 
                Set<TaxonRelationship> taxonRelationships = taxon.getTaxonRelations(relatedTaxon);
 
-               if(taxonRelationships.size() > 1){
+               if(taxonRelationships != null && taxonRelationships.size() > 1){
                        MessagingUtils.warningDialog(ChangeConceptToSynonymOperation.CHANGE_CONCEPT_TO_SYNONYM_OPERATION_MULTI_REPS, this, ChangeConceptToSynonymOperation.CHANGE_CONCEPT_TO_SYNONYM_OPERATION_MULTI_REPS_MESSAGE);
                        return;
                }
index 4c7355ae4900b84ffc144c42b147496965b343a8..a7dfde200850f00d25a6c532bf56ba6b4dd4a96f 100755 (executable)
@@ -19,6 +19,7 @@ import eu.etaxonomy.cdm.api.application.CdmChangeEvent.Action;
 import eu.etaxonomy.cdm.api.service.ITaxonNodeService;
 import eu.etaxonomy.cdm.api.service.UpdateResult;
 import eu.etaxonomy.cdm.model.taxon.TaxonNode;
+import eu.etaxonomy.cdm.model.taxon.TaxonNodeStatus;
 import eu.etaxonomy.cdm.persistence.dto.MergeResult;
 import eu.etaxonomy.taxeditor.navigation.l10n.Messages;
 import eu.etaxonomy.taxeditor.operation.RemotingCdmUpdateOperation;
@@ -65,13 +66,13 @@ public class SetUnplacedExcludedDoubtfulOperation extends RemotingCdmUpdateOpera
 
         for (TaxonNode node: nodes){
             if (unplaced != null){
-                node.setUnplaced(unplaced);
+                node.setStatus(TaxonNodeStatus.UNPLACED);
             }
             if (excluded != null){
-                node.setExcluded(excluded);
+                node.setStatus(TaxonNodeStatus.EXCLUDED);
             }
             if (doubtful != null){
-                node.setDoubtful(doubtful);
+                node.setStatus(TaxonNodeStatus.DOUBTFUL);
             }
         }
         List<MergeResult<TaxonNode>> results = CdmApplicationState.getService(ITaxonNodeService.class).merge(nodes, true);
index 3572e00cbfd02873089b5b0064feb8c0cf52b776..ae40775d8c33661f629587ab89541e9d1b8ea574 100644 (file)
@@ -18,6 +18,7 @@ import eu.etaxonomy.cdm.model.common.Language;
 import eu.etaxonomy.cdm.model.common.LanguageString;
 import eu.etaxonomy.cdm.model.taxon.ITaxonTreeNode;
 import eu.etaxonomy.cdm.model.taxon.TaxonNode;
+import eu.etaxonomy.cdm.model.taxon.TaxonNodeStatus;
 import eu.etaxonomy.cdm.persistence.dto.TaxonNodeDto;
 import eu.etaxonomy.taxeditor.l10n.Messages;
 import eu.etaxonomy.taxeditor.model.MessagingUtils;
@@ -69,7 +70,18 @@ public class NewTaxonNodeWizard extends AbstractNewEntityWizardParentChild<Taxon
                Map<Language, LanguageString> nodes = ((TaxonNodeDetailElement)taxonNodePage.getDetailElement()).getMultiLanguageTextExcludedNotes();
                UUID refUuid = parent.getReference() != null? parent.getReference().getUuid(): null;
 
-               result = CdmStore.getService(ITaxonNodeService.class).createNewTaxonNode(parent.getUuid(), taxon, refUuid, parent.getMicroReference(), ((TaxonNodeDetailElement)taxonNodePage.getDetailElement()).isUnplaced(), ((TaxonNodeDetailElement)taxonNodePage.getDetailElement()).isPlacementDoubtful(), ((TaxonNodeDetailElement)taxonNodePage.getDetailElement()).isExcluded(), nodes);
+               TaxonNodeStatus status = null;
+               if( ((TaxonNodeDetailElement)taxonNodePage.getDetailElement()).isUnplaced()){
+                   status = TaxonNodeStatus.UNPLACED;
+               }else if( ((TaxonNodeDetailElement)taxonNodePage.getDetailElement()).isPlacementDoubtful()){
+                   status = TaxonNodeStatus.DOUBTFUL;
+               }else if (((TaxonNodeDetailElement)taxonNodePage.getDetailElement()).isExcluded()){
+                   status = TaxonNodeStatus.EXCLUDED;
+               }
+               result = CdmStore.getService(ITaxonNodeService.class).createNewTaxonNode(parent.getUuid(), taxon, refUuid, parent.getMicroReference(),
+                        status, nodes);
+
+
                if (result.isOk()){
                    this.setEntity((TaxonNode)result.getCdmEntity());
                    CdmApplicationState.getCurrentDataChangeService()
index 1fa5aa4b11a33b43d6e2fb276260ebe7cbc4372d..a779789c3db36bedd289a17fd95a129ff2016df6 100644 (file)
@@ -53,12 +53,14 @@ DisposeListener {
 
     protected Label label;
 
-    protected final Combo combo;
+    protected Combo combo;
 
+    public boolean hasNullValue;
 
 
 
-    public AbstractComboElement(CdmFormFactory formFactory, ICdmFormElement formElement) {
+
+    public AbstractComboElement(CdmFormFactory formFactory, ICdmFormElement formElement, boolean hasNullValue) {
         super(formFactory, formElement);
 
         label = formFactory.createLabel(getLayoutComposite(), "");
@@ -74,8 +76,13 @@ DisposeListener {
         combo.setVisibleItemCount(DEFAULT_VISIBLE_ITEMS);
         //disable mouse-wheel selection
         combo.addListener(SWT.MouseWheel, e->e.doit=false);
+        this.hasNullValue = hasNullValue;
+
 
+    }
 
+    public AbstractComboElement(CdmFormFactory formFactory, ICdmFormElement formElement){
+        this(formFactory, formElement, false);
     }
 
 
index ece8043e8a7e470af864bbef055facac3cc79cf2..cbd20ce1886e718c6b1940bc2744a7e8eede655e 100644 (file)
@@ -19,6 +19,7 @@ import java.util.List;
 import java.util.Map.Entry;
 
 import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.widgets.Combo;
 import org.eclipse.ui.forms.widgets.TableWrapData;
 
 import eu.etaxonomy.cdm.model.media.ExternalLinkType;
@@ -29,6 +30,7 @@ import eu.etaxonomy.cdm.model.name.TaxonName;
 import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationType;
 import eu.etaxonomy.cdm.model.reference.OriginalSourceType;
 import eu.etaxonomy.cdm.model.reference.ReferenceType;
+import eu.etaxonomy.cdm.model.taxon.TaxonNodeStatus;
 import eu.etaxonomy.cdm.model.term.IEnumTerm;
 import eu.etaxonomy.taxeditor.model.AbstractUtility;
 import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
@@ -162,6 +164,24 @@ public class EnumComboElement<T extends IEnumTerm<T>> extends
                 return NomenclaturalCodeEdition.class;
             }
 
+        },
+               new CdmEnumDataHolder<TaxonNodeStatus>(){
+
+            @Override
+            public String getName() {
+                return "Taxon Node Status";
+            }
+
+            @Override
+            public Collection<TaxonNodeStatus> getElements() {
+                return Arrays.asList(TaxonNodeStatus.values());
+            }
+
+            @Override
+            public Class<TaxonNodeStatus> getClazz() {
+                return TaxonNodeStatus.class;
+            }
+
         }
 
        };
@@ -171,8 +191,8 @@ public class EnumComboElement<T extends IEnumTerm<T>> extends
        private final Class<T> enumType;
 
        public EnumComboElement(CdmFormFactory formFactory,
-                       ICdmFormElement parentElement, Class<T> enumType, Comparator<T> comparator, int style) {
-               super(formFactory, parentElement);
+                       ICdmFormElement parentElement, Class<T> enumType, Comparator<T> comparator, int style, boolean hasNullValue) {
+               super(formFactory, parentElement, hasNullValue);
                this.enumType = enumType;
                label.setText(getDefaultLabelString());
                populateTypes(comparator);
@@ -188,6 +208,10 @@ public class EnumComboElement<T extends IEnumTerm<T>> extends
         getLayoutComposite().layout();
        }
 
+       public Combo getCombo(){
+           return combo;
+       }
+
 
        private String getDefaultLabelString() {
                if(enumType.equals(ReferenceType.class)){
@@ -202,6 +226,8 @@ public class EnumComboElement<T extends IEnumTerm<T>> extends
             return "Type";
         } else if(enumType.equals(NomenclaturalCodeEdition.class)) {
             return "Code Edition";
+        }else if(enumType.equals(TaxonNodeStatus.class)) {
+            return "Status";
         }
                return "No Label";
        }
@@ -211,12 +237,18 @@ public class EnumComboElement<T extends IEnumTerm<T>> extends
         if(comparator!=null){
             Collections.sort(elementsForClass, comparator);
         }
+        int index = 0;
+        if (hasNullValue){
+            combo.add("", index);
+            index++;
+        }
         // special hierarchical order for specimens
         if(enumType.equals(SpecimenOrObservationType.class)){
             LinkedHashMap<T, String> orderedTerms = AbstractUtility.orderTerms(elementsForClass);
             for(Entry<T, String> keyLabelPair : orderedTerms.entrySet()){
                 elementTypeList.add(keyLabelPair.getKey());
-                combo.add(keyLabelPair.getValue());
+                combo.add(keyLabelPair.getValue(), index);
+                index++;
             }
         }else if(enumType.equals(NomenclaturalCodeEdition.class)){
             NomenclaturalCode code = null;
@@ -234,7 +266,8 @@ public class EnumComboElement<T extends IEnumTerm<T>> extends
             LinkedHashMap<NomenclaturalCodeEdition, String> orderedTerms = AbstractUtility.orderTerms(elements);
             for (NomenclaturalCodeEdition codeEdition: elements){
                     elementTypeList.add((T)codeEdition);
-                    combo.add(codeEdition.getMessage());
+                    combo.add(codeEdition.getMessage(), index);
+                    index++;
             }
         }
         // default order
@@ -242,9 +275,11 @@ public class EnumComboElement<T extends IEnumTerm<T>> extends
             for(T enumElement : elementsForClass){
                 elementTypeList.add(enumElement);
                 if (enumElement instanceof IEnumTerm)  {
-                    combo.add(((IEnumTerm) enumElement).getMessage());
+                    combo.add(((IEnumTerm) enumElement).getMessage(), index);
+                    index++;
                 }else{
-                    combo.add(((Enum) enumElement).name());
+                    combo.add(((Enum) enumElement).name(), index);
+                    index++;
                 }
             }
         }
@@ -253,12 +288,26 @@ public class EnumComboElement<T extends IEnumTerm<T>> extends
        @Override
     public void setSelection(T selection) {
                this.selection = selection;
-               combo.select(elementTypeList.indexOf(selection));
+               int index = elementTypeList.indexOf(selection);
+               if (hasNullValue && selection != null){
+                   index++;
+               }
+               combo.select(index);
        }
        /** {@inheritDoc} */
        @Override
     public void widgetSelected(SelectionEvent e) {
-               selection = elementTypeList.get(combo.getSelectionIndex());
+
+        int index = combo.getSelectionIndex();
+        if (hasNullValue ){
+            index--;
+        }
+        if (index<0){
+            selection = null;
+        }else{
+            selection = elementTypeList.get(index);
+        }
+
                firePropertyChangeEvent(new CdmPropertyChangeEvent(this, e));
        }
 
index 245d3440dc7777bf5515f015e47a3b4d2dc0773c..be990632f7c0dee84f44d2fbcf6d2f151bb63bd2 100644 (file)
@@ -30,10 +30,12 @@ import eu.etaxonomy.cdm.model.reference.Reference;
 import eu.etaxonomy.cdm.model.taxon.Classification;
 import eu.etaxonomy.cdm.model.taxon.Taxon;
 import eu.etaxonomy.cdm.model.taxon.TaxonNode;
+import eu.etaxonomy.cdm.model.taxon.TaxonNodeStatus;
 import eu.etaxonomy.taxeditor.preference.CdmPreferenceCache;
 import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
 import eu.etaxonomy.taxeditor.store.CdmStore;
 import eu.etaxonomy.taxeditor.store.StoreUtil;
+import eu.etaxonomy.taxeditor.ui.combo.EnumComboElement;
 import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
 import eu.etaxonomy.taxeditor.ui.element.CheckboxElement;
 import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
@@ -75,21 +77,17 @@ public class TaxonNodeDetailElement extends AbstractCdmDetailElement<TaxonNode>
 
        private TaxonNodeAgentRelationCollectionSection selectionNodeAgentRelation;
 
-       private CheckboxElement checkbox_unplaced;
-       private CheckboxElement checkbox_excluded;
+       private EnumComboElement combo_status;
+//     private CheckboxElement checkbox_excluded;
        private CheckboxElement checkbox_publish;
-       private CheckboxElement checkbox_placementDoubtful;
+//     private CheckboxElement checkbox_placementDoubtful;
 
-    private MultilanguageTextElement multiLanguageTextExcludedNotes;
+    private MultilanguageTextElement multiLanguageTextStatusNotes;
 
 
        private boolean complete;
 
-       private boolean excluded = false;
-       private boolean unplaced = false;
-       private boolean placementDoubtful = false;
-
-
+       private TaxonNodeStatus status = null;
 
        public TaxonNodeDetailElement(CdmFormFactory formFactory,
                        ICdmFormElement formElement, boolean isCreateNew) {
@@ -99,25 +97,25 @@ public class TaxonNodeDetailElement extends AbstractCdmDetailElement<TaxonNode>
 
 
        public Map<Language, LanguageString> getMultiLanguageTextExcludedNotes() {
-        return multiLanguageTextExcludedNotes.getMultilanguageText();
+        return multiLanguageTextStatusNotes.getMultilanguageText();
     }
 
 
 
     public boolean isExcluded() {
-        return excluded;
+        return status.isKindOf(TaxonNodeStatus.EXCLUDED);
     }
 
 
 
     public boolean isUnplaced() {
-        return unplaced;
+        return status.isKindOf(TaxonNodeStatus.UNPLACED);
     }
 
 
 
     public boolean isPlacementDoubtful() {
-        return placementDoubtful;
+        return status.isKindOf(TaxonNodeStatus.DOUBTFUL);
     }
 
     public Reference getRef() {
@@ -223,12 +221,10 @@ public class TaxonNodeDetailElement extends AbstractCdmDetailElement<TaxonNode>
 
         checkbox_publish.setEnabled(isCreateNew());
 
-        checkbox_placementDoubtful = formFactory.createCheckbox(formElement,
-                "Placement is doubtful", tax!= null? entity.isDoubtful(): false, style);
-
-
+        combo_status = formFactory.createEnumComboElement(TaxonNodeStatus.class, formElement, style, true);
+        combo_status.setSelection(entity.getStatus());
 
-               if(isCreateNew()){
+        if(isCreateNew()){
 
 
                   String defaultPublish = PreferencesUtil.getStringValue(PreferencePredicate.DefaultBehaviourForPublishFlag.getKey());
@@ -249,17 +245,14 @@ public class TaxonNodeDetailElement extends AbstractCdmDetailElement<TaxonNode>
             complete = true;
         }
 
-               checkbox_unplaced = formFactory.createCheckbox(formElement,
-                           "Taxon is unplaced", entity.isUnplaced(), style);
 
                if (isCreateNew()){
                    preFillTaxonName();
                }
 
-           checkbox_excluded = formFactory.createCheckbox(formElement,
-                   "Taxon is excluded", entity.isExcluded(), style);
-           multiLanguageTextExcludedNotes = formFactory.createMultiLanguageTextElement(formElement, "Excluded Notes", entity.getExcludedNote(), 50, style);
-           multiLanguageTextExcludedNotes.setEnabled(entity.isExcluded());
+
+           multiLanguageTextStatusNotes = formFactory.createMultiLanguageTextElement(formElement, "Status Notes", entity.getStatusNote(), 50, style);
+           multiLanguageTextStatusNotes.setEnabled(entity.isExcluded());
 
                if (!isCreateNew()){
                    selectionNodeAgentRelation = formFactory.createTaxonNodeAgentRelationCollectionSection(formElement, getConversationHolder(), StoreUtil.getSectionStyle(TaxonNodeAgentRelationCollectionSection.class, entity.getClass().getCanonicalName()));
@@ -357,29 +350,16 @@ public class TaxonNodeDetailElement extends AbstractCdmDetailElement<TaxonNode>
             }
         }
 
-               if (eventSource == checkbox_excluded) {
-            excluded = checkbox_excluded.getSelection();
-            if (!isCreateNew()){
-                getEntity().setExcluded(excluded);
-            }
-
-            multiLanguageTextExcludedNotes.setEnabled(excluded);
-        }
-               if (eventSource == checkbox_unplaced) {
-            unplaced = checkbox_unplaced.getSelection();
+               if (eventSource == combo_status) {
+            status = (TaxonNodeStatus) combo_status.getSelection();
             if (!isCreateNew()){
-                getEntity().setUnplaced(unplaced);
+                getEntity().setStatus(status);
             }
 
+            multiLanguageTextStatusNotes.setEnabled(status != null);
+            complete = true;
         }
 
-               if (eventSource == checkbox_placementDoubtful) {
-                   placementDoubtful = checkbox_placementDoubtful.getSelection();
-                   if (!isCreateNew()){
-                       getEntity().setDoubtful(placementDoubtful);
-                   }
-
-        }
                if (eventSource == textNewTaxonName) {
             boolean enabled = CdmUtils.isBlank(textNewTaxonName.getText());
             if (selection_reuseExistingTaxon != null){
index aeea0b7f268c2774fa4bb315fc65f6431a134620..3bbe4c2c076e354eacef515fbb81682dae363d9a 100644 (file)
@@ -84,7 +84,7 @@ public abstract class AbstractOriginalSourceElement<T extends OriginalSourceBase
        public void createControls(ICdmFormElement formElement, int style) {
                combo_origsourcetype = formFactory
                                .createEnumComboElement(OriginalSourceType.class,
-                                               formElement, new OriginalSourceTypeComparator(getEntity()), style);
+                                               formElement, new OriginalSourceTypeComparator(getEntity()), style, false);
                super.createControls(formElement, style);
                if (PreferencesUtil.getBooleanValue(PreferencePredicate.ShowIdInSource.getKey())){
                    text_idInSource = formFactory.createTextWithLabelElement(formElement, "ID in Source", null, style);