fix #7624 notes field for the RegistrationPopupEditor implemented
authorAndreas Kohlbecker <a.kohlbecker@bgbm.org>
Tue, 4 Sep 2018 13:17:17 +0000 (15:17 +0200)
committerAndreas Kohlbecker <a.kohlbecker@bgbm.org>
Tue, 4 Sep 2018 13:17:30 +0000 (15:17 +0200)
src/main/java/eu/etaxonomy/cdm/vaadin/view/reference/ReferenceEditorPresenter.java
src/main/java/eu/etaxonomy/cdm/vaadin/view/reference/ReferencePopupEditor.java
src/main/java/eu/etaxonomy/cdm/vaadin/view/reference/ReferencePopupEditorView.java
src/test/java/eu/etaxonomy/vaadin/mvp/CdmEditorPresenterTest.java

index 11403db9d7137d0caec2285d595163216e00b6fc..8e95cc6fc65507f16ad9cc9e7e00f1f1b0ceb100 100644 (file)
@@ -8,6 +8,7 @@
 */
 package eu.etaxonomy.cdm.vaadin.view.reference;
 
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 import java.util.UUID;
@@ -23,10 +24,13 @@ import eu.etaxonomy.cdm.api.service.IService;
 import eu.etaxonomy.cdm.model.agent.AgentBase;
 import eu.etaxonomy.cdm.model.agent.Person;
 import eu.etaxonomy.cdm.model.agent.TeamOrPersonBase;
+import eu.etaxonomy.cdm.model.common.Annotation;
+import eu.etaxonomy.cdm.model.common.AnnotationType;
 import eu.etaxonomy.cdm.model.reference.Reference;
 import eu.etaxonomy.cdm.model.reference.ReferenceFactory;
 import eu.etaxonomy.cdm.service.CdmFilterablePagingProvider;
 import eu.etaxonomy.cdm.service.UserHelperAccess;
+import eu.etaxonomy.cdm.vaadin.component.CdmBeanItemContainerFactory;
 import eu.etaxonomy.cdm.vaadin.event.EntityChangeEvent;
 import eu.etaxonomy.cdm.vaadin.event.ReferenceEditorAction;
 import eu.etaxonomy.cdm.vaadin.event.ToOneRelatedEntityButtonUpdater;
@@ -70,6 +74,7 @@ public class ReferenceEditorPresenter extends AbstractCdmEditorPresenter<Referen
 
         });
 
+        CdmBeanItemContainerFactory selectFieldFactory = new CdmBeanItemContainerFactory(getRepo());
         CdmFilterablePagingProvider<Reference, Reference> collectionPagingProvider = pagingProviderFactory.referencePagingProvider();
         getView().getInReferenceCombobox().loadFrom(collectionPagingProvider, collectionPagingProvider, collectionPagingProvider.getPageSize());
         getView().getInReferenceCombobox().setNestedButtonStateUpdater(new ToOneRelatedEntityButtonUpdater<Reference>(getView().getInReferenceCombobox()));
@@ -79,6 +84,9 @@ public class ReferenceEditorPresenter extends AbstractCdmEditorPresenter<Referen
         CdmFilterablePagingProvider<AgentBase, Person> personPagingProvider = new CdmFilterablePagingProvider<AgentBase, Person>(getRepo().getAgentService(), Person.class);
         getView().getAuthorshipField().setFilterableTeamPagingProvider(teamOrPersonPagingProvider, this);
         getView().getAuthorshipField().setFilterablePersonPagingProvider(personPagingProvider, this);
+
+        getView().getAnnotationsField().setAnnotationTypeItemContainer(selectFieldFactory.buildTermItemContainer(
+                AnnotationType.EDITORIAL().getUuid(), AnnotationType.TECHNICAL().getUuid()));
     }
 
     /**
@@ -89,7 +97,8 @@ public class ReferenceEditorPresenter extends AbstractCdmEditorPresenter<Referen
 
         List<String> initStrategy = Arrays.asList(new String []{
 
-                "$"
+                "$",
+                "annotations.*", // needed as log as we are using a table in FilterableAnnotationsField
                 }
         );
 
@@ -185,5 +194,36 @@ public class ReferenceEditorPresenter extends AbstractCdmEditorPresenter<Referen
     }
 
 
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    protected Reference preSaveBean(Reference bean) {
+
+        // handle annotation changes
+        List<Annotation> annotations = getView().getAnnotationsField().getValue();
+        List<Annotation> currentAnnotations = new ArrayList<>(bean.getAnnotations());
+        List<Annotation> annotationsSeen = new ArrayList<>();
+        for(Annotation a : annotations){
+            if(a == null){
+                continue;
+            }
+            if(!currentAnnotations.contains(a)){
+                bean.addAnnotation(a);
+            }
+            annotationsSeen.add(a);
+        }
+        for(Annotation a : currentAnnotations){
+            if(!annotationsSeen.contains(a)){
+                bean.removeAnnotation(a);
+            }
+        }
+
+
+        return bean;
+    }
+
+
+
 
 }
index 4885020ffb90cc097e34fe20f5cc32d45abadeeb..69dfbdbe8b9abbe7c68ebeb7b7b032897a5872c0 100644 (file)
@@ -28,15 +28,18 @@ import com.vaadin.ui.GridLayout;
 import com.vaadin.ui.ListSelect;
 import com.vaadin.ui.TextField;
 
+import eu.etaxonomy.cdm.model.common.AnnotationType;
 import eu.etaxonomy.cdm.model.reference.Reference;
 import eu.etaxonomy.cdm.model.reference.ReferencePropertyDefinitions;
 import eu.etaxonomy.cdm.model.reference.ReferencePropertyDefinitions.UnimplemetedCaseException;
 import eu.etaxonomy.cdm.model.reference.ReferenceType;
 import eu.etaxonomy.cdm.vaadin.component.TextFieldNFix;
+import eu.etaxonomy.cdm.vaadin.component.common.FilterableAnnotationsField;
 import eu.etaxonomy.cdm.vaadin.component.common.TeamOrPersonField;
 import eu.etaxonomy.cdm.vaadin.component.common.VerbatimTimePeriodField;
 import eu.etaxonomy.cdm.vaadin.event.ReferenceEditorAction;
 import eu.etaxonomy.cdm.vaadin.permission.AccessRestrictedView;
+import eu.etaxonomy.cdm.vaadin.ui.RegistrationUIDefaults;
 import eu.etaxonomy.cdm.vaadin.util.TeamOrPersonBaseCaptionGenerator;
 import eu.etaxonomy.cdm.vaadin.util.converter.DoiConverter;
 import eu.etaxonomy.cdm.vaadin.util.converter.UriConverter;
@@ -63,7 +66,7 @@ public class ReferencePopupEditor extends AbstractCdmPopupEditor<Reference, Refe
 
     private final static int GRID_COLS = 4; // 12 would fits for 2,3, and 4 Components per row
 
-    private final static int GRID_ROWS = 10;
+    private final static int GRID_ROWS = 11;
 
     private ListSelect typeSelect;
 
@@ -71,6 +74,10 @@ public class ReferencePopupEditor extends AbstractCdmPopupEditor<Reference, Refe
 
     private TeamOrPersonField authorshipField;
 
+    private FilterableAnnotationsField annotationsListField;
+
+    private AnnotationType[] editableAnotationTypes = RegistrationUIDefaults.EDITABLE_ANOTATION_TYPES;
+
     private EnumSet<ReferenceType> referenceTypes = EnumSet.allOf(ReferenceType.class);
 
     private static Map<String,String> propertyNameLabelMap = new HashMap<>();
@@ -209,6 +216,13 @@ public class ReferencePopupEditor extends AbstractCdmPopupEditor<Reference, Refe
 
         variableGridLastRow = row;
 
+        row++;
+        annotationsListField = new FilterableAnnotationsField("Editorial notes");
+        annotationsListField.setWidth(100, Unit.PERCENTAGE);
+        annotationsListField.setAnnotationTypesVisible(editableAnotationTypes);
+        addField(annotationsListField, "annotations", 0, row, GRID_COLS-1, row);
+
+
 //        titleField.setRequired(true);
 //        publisherField.setRequired(true);
 
@@ -327,7 +341,7 @@ public class ReferencePopupEditor extends AbstractCdmPopupEditor<Reference, Refe
     }
 
     /**
-     * {@inheritDoc}
+     * {@inheritDoc}            // TODO Auto-generated method stub
      */
     @Override
     public void focusFirst() {
@@ -379,6 +393,11 @@ public class ReferencePopupEditor extends AbstractCdmPopupEditor<Reference, Refe
         return authorshipField;
     }
 
+    @Override
+    public FilterableAnnotationsField getAnnotationsField() {
+        return annotationsListField;
+    }
+
     public void withReferenceTypes(EnumSet<ReferenceType> types){
         this.referenceTypes = types;
         if(typeSelect != null){
index 4594b9dccc56582913363f5046f5a4e1955514ec..ab1d08d933680c1e04ac9838edb6cc4800e7bde2 100644 (file)
@@ -11,6 +11,7 @@ package eu.etaxonomy.cdm.vaadin.view.reference;
 import com.vaadin.ui.ListSelect;
 
 import eu.etaxonomy.cdm.model.reference.Reference;
+import eu.etaxonomy.cdm.vaadin.component.common.FilterableAnnotationsField;
 import eu.etaxonomy.cdm.vaadin.component.common.TeamOrPersonField;
 import eu.etaxonomy.vaadin.component.ToOneRelatedEntityCombobox;
 import eu.etaxonomy.vaadin.mvp.ApplicationView;
@@ -28,5 +29,10 @@ public interface ReferencePopupEditorView extends ApplicationView<ReferenceEdito
 
     public TeamOrPersonField getAuthorshipField();
 
+    /**
+     * @return
+     */
+    FilterableAnnotationsField getAnnotationsField();
+
 
 }
index f02a1ca26575f9f4042ac9ff0bf9d21054549788..9e1c43c9e1c5b31012a0cda01cd7bff04b17ff99 100644 (file)
@@ -20,6 +20,7 @@ import com.vaadin.ui.ListSelect;
 
 import eu.etaxonomy.cdm.api.application.CdmRepository;
 import eu.etaxonomy.cdm.model.reference.Reference;
+import eu.etaxonomy.cdm.vaadin.component.common.FilterableAnnotationsField;
 import eu.etaxonomy.cdm.vaadin.component.common.TeamOrPersonField;
 import eu.etaxonomy.cdm.vaadin.view.reference.ReferenceEditorPresenter;
 import eu.etaxonomy.cdm.vaadin.view.reference.ReferencePopupEditorView;
@@ -82,6 +83,14 @@ public class CdmEditorPresenterTest {
             return null;
         }
 
+        /**
+         * {@inheritDoc}
+         */
+        @Override
+        public FilterableAnnotationsField getAnnotationsField() {
+            return null;
+        }
+
 
 
     }