fix #9301 adding designationReference and detail to specimen type designation editor
authorAndreas Kohlbecker <a.kohlbecker@bgbm.org>
Thu, 21 Jan 2021 11:45:14 +0000 (12:45 +0100)
committerAndreas Kohlbecker <a.kohlbecker@bgbm.org>
Thu, 21 Jan 2021 11:45:14 +0000 (12:45 +0100)
src/main/java/eu/etaxonomy/cdm/vaadin/model/registration/SpecimenTypeDesignationDTO.java
src/main/java/eu/etaxonomy/cdm/vaadin/view/name/SpecimenTypeDesignationDTORow.java
src/main/java/eu/etaxonomy/cdm/vaadin/view/name/SpecimenTypeDesignationWorkingsetEditorPresenter.java

index 68dd0bad24d74bbd684e4b317117bece391bb049..f6f2aaa07d1ce016d914ee4531274c8f2673052f 100644 (file)
@@ -214,6 +214,22 @@ public class SpecimenTypeDesignationDTO {
         std.getTypeSpecimen().setPreferredStableUri(uri);
     }
 
+    public Reference getDesignationReference() {
+        return std.getCitation();
+    }
+
+    public void setDesignationReference(Reference citation) {
+        std.setCitation(citation);
+    }
+
+    public String getDesignationReferenceDetail() {
+        return std.getCitationMicroReference();
+    }
+
+    public void setDesignationReferenceDetail(String detail) {
+        std.setCitationMicroReference(detail);
+    }
+
     public URI getMediaUri(){
         if(checkMediaSpecimen()){
             MediaRepresentationPart part = findMediaRepresentationPart();
index 3b932266fb3fba7555478db3e6b8868e7cfc128f..46ddef1f7499d3855b92a87adb6fc4b88a66af2c 100644 (file)
@@ -16,6 +16,7 @@ import com.vaadin.ui.Component;
 import com.vaadin.ui.NativeSelect;
 import com.vaadin.ui.TextField;
 
+import eu.etaxonomy.cdm.model.name.SpecimenTypeDesignationStatus;
 import eu.etaxonomy.cdm.model.occurrence.Collection;
 import eu.etaxonomy.cdm.model.reference.Reference;
 import eu.etaxonomy.cdm.model.term.DefinedTerm;
@@ -47,11 +48,14 @@ public class SpecimenTypeDesignationDTORow extends CollectionRowItemCollection i
      */
     TextField associatedTypeDesignationCount = new TextField();
     RowListSelect kindOfUnit = new RowListSelect(); // position is IMPORTANT, see rowListSelectColumn()
-    NativeSelect typeStatus = new NativeSelect();
+    RowListSelect typeStatus = new RowListSelect();
     ToOneRelatedEntityCombobox<eu.etaxonomy.cdm.model.occurrence.Collection> collection =
             new ToOneRelatedEntityCombobox<eu.etaxonomy.cdm.model.occurrence.Collection>(null, eu.etaxonomy.cdm.model.occurrence.Collection.class);
     TextField accessionNumber = new TextFieldNFix();
     TextField preferredStableUri = new TextFieldNFix();
+    ToOneRelatedEntityCombobox<Reference> designationReference =
+            new ToOneRelatedEntityCombobox<Reference>(null, Reference.class);
+    TextField designationReferenceDetail = new TextFieldNFix(); //"Image reference detail");
     TextField mediaUri = new TextFieldNFix();
     ToOneRelatedEntityCombobox<Reference> mediaSpecimenReference =
             new ToOneRelatedEntityCombobox<Reference>(null, Reference.class);
@@ -61,16 +65,27 @@ public class SpecimenTypeDesignationDTORow extends CollectionRowItemCollection i
 
         kindOfUnit.setRequired(true);
         kindOfUnit.setRow(this);
+        kindOfUnit.addValueChangeListener(e ->
+            updateRowItemsEnablement()
+            );
 
         typeStatus.setRequired(true);
+        typeStatus.addValueChangeListener(e ->
+            updateRowItemsEnablement()
+            );
 
         accessionNumber.setWidth(100, Unit.PIXELS);
 
+        collection.setWidth(200, Unit.PIXELS);
+        collection.setNestedButtonStateUpdater(new ToOneRelatedEntityButtonUpdater<Collection>(collection));
+
         preferredStableUri.setWidth(150, Unit.PIXELS);
         preferredStableUri.setConverter(new UriConverter());
 
-        collection.setWidth(200, Unit.PIXELS);
-        collection.setNestedButtonStateUpdater(new ToOneRelatedEntityButtonUpdater<Collection>(collection));
+        designationReference.setWidth(200, Unit.PIXELS);
+        designationReference.setNestedButtonStateUpdater(new ToOneRelatedEntityButtonUpdater<Reference>(mediaSpecimenReference));
+
+        designationReferenceDetail.setWidth(200, Unit.PIXELS);
 
         mediaUri.setWidth(150, Unit.PIXELS);
         mediaUri.setConverter(new UriConverter());
@@ -80,9 +95,6 @@ public class SpecimenTypeDesignationDTORow extends CollectionRowItemCollection i
 
         mediaSpecimenReferenceDetail.setWidth(200, Unit.PIXELS);
 
-        kindOfUnit.addValueChangeListener(e ->
-                updateRowItemsEnablement()
-        );
 
     }
 
@@ -95,6 +107,7 @@ public class SpecimenTypeDesignationDTORow extends CollectionRowItemCollection i
             kindOfUnit, typeStatus,
             collection, accessionNumber,
             preferredStableUri,
+            designationReference, designationReferenceDetail,
             mediaUri, mediaSpecimenReference,
             mediaSpecimenReferenceDetail
             };
@@ -107,6 +120,7 @@ public class SpecimenTypeDesignationDTORow extends CollectionRowItemCollection i
             "kindOfUnit", "typeStatus",
             "collection", "accessionNumber",
             "preferredStableUri",
+            "designationReference", "designationReferenceDetail",
             "mediaUri", "mediaSpecimenReference",
             "mediaSpecimenReferenceDetail"
             });
@@ -126,6 +140,11 @@ public class SpecimenTypeDesignationDTORow extends CollectionRowItemCollection i
         kindOfUnit.setDescription(kindOfUnitLocked ?
                 "Can not be changed since the type specimen is associated with multiple type designations" : "");
 
+        boolean withDesignationReference = typeStatus.getValue() != null && ((SpecimenTypeDesignationStatus)typeStatus.getValue()).hasDesignationSource();
+
+        designationReference.setEnabled(withDesignationReference);
+        designationReferenceDetail.setEnabled(withDesignationReference);
+
         mediaSpecimenReference.setEnabled(publishedImageType || unPublishedImageType);
         mediaSpecimenReferenceDetail.setEnabled(publishedImageType || unPublishedImageType);
         mediaUri.setEnabled(publishedImageType || unPublishedImageType);
index fe9af26df3f277615f3f36d58388716fe938fbd0..a85d991a6e2bb657c3fc54ca37a20fe47a18f99c 100644 (file)
@@ -12,6 +12,7 @@ import java.util.Arrays;
 import java.util.EnumSet;
 import java.util.HashMap;
 import java.util.HashSet;
+import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import java.util.Stack;
@@ -109,7 +110,7 @@ public class SpecimenTypeDesignationWorkingsetEditorPresenter
 
     private Map<CollectionPopupEditor, SpecimenTypeDesignationDTORow> collectionPopupEditorsRowMap = new HashMap<>();
 
-    private Map<ReferencePopupEditor, SpecimenTypeDesignationDTORow> referencePopupEditorsRowMap = new HashMap<>();
+    private Map<ReferencePopupEditor, ToOneRelatedEntityCombobox<Reference>> referencePopupEditorsCombobox = new HashMap<>();
 
     private Set<CollectionRowItemCollection> popuEditorTypeDesignationSourceRows = new HashSet<>();
 
@@ -234,19 +235,33 @@ public class SpecimenTypeDesignationWorkingsetEditorPresenter
                         }
                     });
 
-                row.mediaSpecimenReference.loadFrom(
+                row.designationReference.loadFrom(
                         referencePagingProvider,
                         referencePagingProvider,
                         referencePagingProvider.getPageSize()
                         );
+                row.designationReference.getSelect().setCaptionGenerator(new ReferenceEllypsisCaptionGenerator(LabelType.BIBLIOGRAPHIC, row.designationReference.getSelect()));
+                row.designationReference.getSelect().addValueChangeListener(new ToOneRelatedEntityReloader<Reference>(row.designationReference.getSelect(),
+                        SpecimenTypeDesignationWorkingsetEditorPresenter.this));
+                row.designationReference.addClickListenerAddEntity(e -> doReferenceEditorAdd(row.designationReference));
+                row.designationReference.addClickListenerEditEntity(e -> {
+                    if(row.designationReference.getValue() != null){
+                        doReferenceEditorEdit(row.designationReference);
+                    }
+                });
 
+                row.mediaSpecimenReference.loadFrom(
+                        referencePagingProvider,
+                        referencePagingProvider,
+                        referencePagingProvider.getPageSize()
+                        );
                 row.mediaSpecimenReference.getSelect().setCaptionGenerator(new ReferenceEllypsisCaptionGenerator(LabelType.BIBLIOGRAPHIC, row.mediaSpecimenReference.getSelect()));
                 row.mediaSpecimenReference.getSelect().addValueChangeListener(new ToOneRelatedEntityReloader<Reference>(row.mediaSpecimenReference.getSelect(),
                         SpecimenTypeDesignationWorkingsetEditorPresenter.this));
-                row.mediaSpecimenReference.addClickListenerAddEntity(e -> doReferenceEditorAdd(row));
+                row.mediaSpecimenReference.addClickListenerAddEntity(e -> doReferenceEditorAdd(row.mediaSpecimenReference));
                 row.mediaSpecimenReference.addClickListenerEditEntity(e -> {
                     if(row.mediaSpecimenReference.getValue() != null){
-                        doReferenceEditorEdit(row);
+                        doReferenceEditorEdit(row.mediaSpecimenReference);
                     }
                 });
 
@@ -272,6 +287,15 @@ public class SpecimenTypeDesignationWorkingsetEditorPresenter
             UserHelperAccess.userHelper().createAuthorityForCurrentUser(dto.getFieldUnit(), crud, null);
         }
 
+        List<SpecimenTypeDesignationDTO> stdDTOs = dto.getSpecimenTypeDesignationDTOs();
+        for(SpecimenTypeDesignationDTO stddto : stdDTOs) {
+            // clean up
+            if(!stddto.getTypeStatus().hasDesignationSource()) {
+                stddto.setDesignationReference(null);
+                stddto.setDesignationReferenceDetail(null);
+            }
+        }
+
         specimenTypeDesignationWorkingSetService.save(dto);
     }
 
@@ -385,7 +409,7 @@ public class SpecimenTypeDesignationWorkingsetEditorPresenter
         }
     }
 
-    public void doReferenceEditorAdd(SpecimenTypeDesignationDTORow row) {
+    public void doReferenceEditorAdd(ToOneRelatedEntityCombobox<Reference> referenceComobox) {
 
         ReferencePopupEditor referencePopupEditor = openPopupEditor(ReferencePopupEditor.class, null);
 
@@ -394,18 +418,18 @@ public class SpecimenTypeDesignationWorkingsetEditorPresenter
         referencePopupEditor.withDeleteButton(true);
         referencePopupEditor.loadInEditor(null);
 
-        referencePopupEditorsRowMap.put(referencePopupEditor, row);
+        referencePopupEditorsCombobox.put(referencePopupEditor, referenceComobox);
     }
 
-    public void doReferenceEditorEdit(SpecimenTypeDesignationDTORow row) {
+    public void doReferenceEditorEdit(ToOneRelatedEntityCombobox<Reference> referenceComobox) {
 
         ReferencePopupEditor referencePopupEditor = openPopupEditor(ReferencePopupEditor.class, null);
         referencePopupEditor.withReferenceTypes(RegistrationUIDefaults.MEDIA_REFERENCE_TYPES);
         referencePopupEditor.grantToCurrentUser(COLLECTION_EDITOR_CRUD);
         referencePopupEditor.withDeleteButton(true);
-        referencePopupEditor.loadInEditor(row.mediaSpecimenReference.getValue().getUuid());
+        referencePopupEditor.loadInEditor(referenceComobox.getValue().getUuid());
 
-        referencePopupEditorsRowMap.put(referencePopupEditor, row);
+        referencePopupEditorsCombobox.put(referencePopupEditor, referenceComobox);
     }
 
     @EventBusListenerMethod(filter = EntityChangeEventFilter.ReferenceFilter.class)
@@ -414,13 +438,11 @@ public class SpecimenTypeDesignationWorkingsetEditorPresenter
         Reference newRef = getRepo().getReferenceService().load(event.getEntityUuid(), Arrays.asList(new String[]{"$"}));
         cache.load(newRef);
 
+        ToOneRelatedEntityCombobox<Reference> combobox = referencePopupEditorsCombobox.get(event.getSourceView());
         if(event.isCreatedType()){
-            SpecimenTypeDesignationDTORow row = referencePopupEditorsRowMap.get(event.getSourceView());
-            ToOneRelatedEntityCombobox<Reference> combobox = row.getComponent(ToOneRelatedEntityCombobox.class, 7);
             combobox.setValue((Reference) event.getEntity());
         } else {
             for( CollectionRowItemCollection row : popuEditorTypeDesignationSourceRows) {
-                ToOneRelatedEntityCombobox<Reference> combobox = row.getComponent(ToOneRelatedEntityCombobox.class, 7);
                 combobox.reload();
             }
         }