ref #7204 refactoring editor events and introducing generic EntityEditorActionEvent
authorAndreas Kohlbecker <a.kohlbecker@bgbm.org>
Thu, 18 Jan 2018 16:08:23 +0000 (17:08 +0100)
committerAndreas Kohlbecker <a.kohlbecker@bgbm.org>
Thu, 18 Jan 2018 16:08:23 +0000 (17:08 +0100)
19 files changed:
src/main/java/eu/etaxonomy/cdm/vaadin/component/registration/RegistrationItem.java
src/main/java/eu/etaxonomy/cdm/vaadin/event/AbstractEditorAction.java
src/main/java/eu/etaxonomy/cdm/vaadin/event/CollectionEditorAction.java
src/main/java/eu/etaxonomy/cdm/vaadin/event/ReferenceEditorAction.java
src/main/java/eu/etaxonomy/cdm/vaadin/event/RegistrationEditorAction.java
src/main/java/eu/etaxonomy/cdm/vaadin/event/TaxonNameEditorAction.java
src/main/java/eu/etaxonomy/cdm/vaadin/event/ToOneRelatedEntityReloader.java
src/main/java/eu/etaxonomy/cdm/vaadin/event/TypeDesignationEditorAction.java
src/main/java/eu/etaxonomy/cdm/vaadin/event/TypeDesignationWorkingsetEditorAction.java
src/main/java/eu/etaxonomy/cdm/vaadin/view/occurrence/CollectionEditorPresenter.java
src/main/java/eu/etaxonomy/cdm/vaadin/view/occurrence/CollectionPopupEditor.java
src/main/java/eu/etaxonomy/cdm/vaadin/view/reference/ReferencePopupEditor.java
src/main/java/eu/etaxonomy/cdm/vaadin/view/registration/RegistrationWorkingsetPresenter.java
src/main/java/eu/etaxonomy/cdm/vaadin/view/registration/RegistrationWorksetViewBean.java
src/main/java/eu/etaxonomy/cdm/vaadin/view/registration/StartRegistrationPresenter.java
src/main/java/eu/etaxonomy/cdm/vaadin/view/registration/StartRegistrationViewBean.java
src/main/java/eu/etaxonomy/vaadin/event/EditorActionType.java [new file with mode: 0644]
src/main/java/eu/etaxonomy/vaadin/event/EntityEditorActionEvent.java [new file with mode: 0644]
src/main/java/eu/etaxonomy/vaadin/event/EntityEditorActionListener.java [new file with mode: 0644]

index d9e264a53b4974e0ddd6cfcb288d581206a3bd08..bf1da3ff5a000765f9139111b8e0a93ff8c8d4b1 100644 (file)
@@ -34,7 +34,6 @@ import eu.etaxonomy.cdm.model.common.TimePeriod;
 import eu.etaxonomy.cdm.model.name.RegistrationStatus;
 import eu.etaxonomy.cdm.model.reference.Reference;
 import eu.etaxonomy.cdm.persistence.hibernate.permission.CRUD;
-import eu.etaxonomy.cdm.vaadin.event.AbstractEditorAction.Action;
 import eu.etaxonomy.cdm.vaadin.event.ReferenceEditorAction;
 import eu.etaxonomy.cdm.vaadin.event.ShowDetailsEvent;
 import eu.etaxonomy.cdm.vaadin.model.registration.RegistrationWorkingSet;
@@ -45,6 +44,7 @@ import eu.etaxonomy.cdm.vaadin.util.formatter.TimePeriodFormatter;
 import eu.etaxonomy.cdm.vaadin.view.registration.RegistrationDTO;
 import eu.etaxonomy.cdm.vaadin.view.registration.RegistrationTypeConverter;
 import eu.etaxonomy.cdm.vaadin.view.registration.RegistrationWorksetViewBean;
+import eu.etaxonomy.vaadin.event.EditorActionType;
 import eu.etaxonomy.vaadin.mvp.AbstractView;
 import eu.etaxonomy.vaadin.ui.navigation.NavigationEvent;
 
@@ -191,12 +191,12 @@ public class RegistrationItem extends GridLayout {
         ReferenceEditorAction referenceEditorAction = null;
         if(workingSet.getCitationId() != null){
             if(UserHelper.fromSession().userHasPermission(Reference.class, workingSet.getCitationId(), CRUD.UPDATE)){
-                referenceEditorAction = new ReferenceEditorAction(Action.EDIT, workingSet.getCitationId());
+                referenceEditorAction = new ReferenceEditorAction(EditorActionType.EDIT, workingSet.getCitationId());
             }
             PermissionDebugUtils.addGainPerEntityPermissionButton(this, Reference.class, workingSet.getCitationId(), EnumSet.of(CRUD.UPDATE, CRUD.DELETE), null);
         } else {
             if(UserHelper.fromSession().userHasPermission(Reference.class, CRUD.CREATE)){
-                referenceEditorAction = new ReferenceEditorAction(Action.ADD);
+                referenceEditorAction = new ReferenceEditorAction(EditorActionType.ADD);
             }
         }
         TimePeriod datePublished = null;
index b599d6ecf90928e0ed3c36a607e36e4d49d8f60d..4e64ca2b6bd9e3e0f9aeb0058ab707683fbd08a7 100644 (file)
@@ -10,30 +10,29 @@ package eu.etaxonomy.cdm.vaadin.event;
 
 import com.vaadin.ui.Component;
 
+import eu.etaxonomy.vaadin.event.EditorActionType;
 import eu.etaxonomy.vaadin.mvp.AbstractView;
 
 /**
+ * Base implementation for an event which
+ * which represents the request to start an editor to enable the
+ * user to perform the <code>action</code> transported with this event.
+ *
  * @author a.kohlbecker
  * @since Mar 22, 2017
  *
  */
-public abstract class AbstractEditorAction extends AbstractEntityEvent<AbstractEditorAction.Action> {
-
-    public enum Action {
-        ADD,
-        EDIT,
-        REMOVE;
-    }
+public abstract class AbstractEditorAction extends AbstractEntityEvent<EditorActionType> {
 
     private Component sourceComponent = null;
 
     private AbstractView sourceView = null;
 
-    public AbstractEditorAction(Action action) {
+    public AbstractEditorAction(EditorActionType action) {
         super(action, null);
     }
 
-    public AbstractEditorAction(Action action, Component source) {
+    public AbstractEditorAction(EditorActionType action, Component source) {
         this(action, null, source);
     }
 
@@ -41,31 +40,31 @@ public abstract class AbstractEditorAction extends AbstractEntityEvent<AbstractE
      * @param type
      * @param citationId
      */
-    public AbstractEditorAction(Action action, Integer entityId) {
+    public AbstractEditorAction(EditorActionType action, Integer entityId) {
         super(action, entityId);
     }
 
-    public AbstractEditorAction(Action action, Integer entityId, Component source) {
+    public AbstractEditorAction(EditorActionType action, Integer entityId, Component source) {
         super(action, entityId);
         this.sourceComponent = source;
     }
 
-    public AbstractEditorAction(Action action, Integer entityId, Component source, AbstractView sourceView) {
+    public AbstractEditorAction(EditorActionType action, Integer entityId, Component source, AbstractView sourceView) {
         super(action, entityId);
         this.sourceComponent = source;
         this.sourceView = sourceView;
     }
 
     public boolean isAddAction() {
-        return type.equals(Action.ADD);
+        return type.equals(EditorActionType.ADD);
     }
 
     public boolean isEditAction() {
-        return type.equals(Action.EDIT);
+        return type.equals(EditorActionType.EDIT);
     }
 
     public boolean isRemoveAction() {
-        return type.equals(Action.REMOVE);
+        return type.equals(EditorActionType.REMOVE);
     }
 
     public Component getSourceComponent(){
index e2cb00376f889a691619d9a953101aaf486d60ee..c37ec0cdc8da33d5cff21cf5cccf5e2f27a32dc6 100644 (file)
@@ -10,6 +10,7 @@ package eu.etaxonomy.cdm.vaadin.event;
 
 import com.vaadin.ui.Component;
 
+import eu.etaxonomy.vaadin.event.EditorActionType;
 import eu.etaxonomy.vaadin.mvp.AbstractView;
 
 /**
@@ -21,7 +22,7 @@ public class CollectionEditorAction extends AbstractEditorAction {
     /**
      * @param eventType
      */
-    public CollectionEditorAction(Action type) {
+    public CollectionEditorAction(EditorActionType type) {
         super(type);
     }
 
@@ -29,7 +30,7 @@ public class CollectionEditorAction extends AbstractEditorAction {
      * @param edit
      * @param citationId
      */
-    public CollectionEditorAction(Action type, Integer citationId) {
+    public CollectionEditorAction(EditorActionType type, Integer citationId) {
         super(type, citationId);
     }
 
@@ -38,7 +39,7 @@ public class CollectionEditorAction extends AbstractEditorAction {
      * @param entityId
      * @param source
      */
-    public CollectionEditorAction(Action type, Integer entityId, Component source) {
+    public CollectionEditorAction(EditorActionType type, Integer entityId, Component source) {
         super(type, entityId, source);
     }
 
@@ -46,7 +47,7 @@ public class CollectionEditorAction extends AbstractEditorAction {
      * @param action
      * @param source
      */
-    public CollectionEditorAction(Action action, Component source) {
+    public CollectionEditorAction(EditorActionType action, Component source) {
         super(action, source);
     }
 
@@ -56,7 +57,7 @@ public class CollectionEditorAction extends AbstractEditorAction {
      * @param source
      * @param sourceView
      */
-    public CollectionEditorAction(Action action, Integer entityId, Component source, AbstractView sourceView) {
+    public CollectionEditorAction(EditorActionType action, Integer entityId, Component source, AbstractView sourceView) {
         super(action, entityId, source, sourceView);
     }
 
index 25f17869f6390490b7bc5f9b2282ee3f25c3f14f..4259eadc71df01e864d8ec6a9ee3fef34f0dd0ef 100644 (file)
@@ -10,6 +10,7 @@ package eu.etaxonomy.cdm.vaadin.event;
 
 import com.vaadin.ui.Component;
 
+import eu.etaxonomy.vaadin.event.EditorActionType;
 import eu.etaxonomy.vaadin.mvp.AbstractView;
 
 /**
@@ -21,7 +22,7 @@ public class ReferenceEditorAction extends AbstractEditorAction {
     /**
      * @param eventType
      */
-    public ReferenceEditorAction(Action type) {
+    public ReferenceEditorAction(EditorActionType type) {
         super(type);
     }
 
@@ -29,7 +30,7 @@ public class ReferenceEditorAction extends AbstractEditorAction {
      * @param edit
      * @param citationId
      */
-    public ReferenceEditorAction(Action type, Integer citationId) {
+    public ReferenceEditorAction(EditorActionType type, Integer citationId) {
         super(type, citationId);
     }
 
@@ -38,7 +39,7 @@ public class ReferenceEditorAction extends AbstractEditorAction {
      * @param entityId
      * @param source
      */
-    public ReferenceEditorAction(Action type, Integer entityId, Component source) {
+    public ReferenceEditorAction(EditorActionType type, Integer entityId, Component source) {
         super(type, entityId, source);
     }
 
@@ -46,7 +47,7 @@ public class ReferenceEditorAction extends AbstractEditorAction {
      * @param action
      * @param source
      */
-    public ReferenceEditorAction(Action action, Component source) {
+    public ReferenceEditorAction(EditorActionType action, Component source) {
         super(action, source);
     }
 
@@ -56,7 +57,7 @@ public class ReferenceEditorAction extends AbstractEditorAction {
      * @param source
      * @param sourceView
      */
-    public ReferenceEditorAction(Action action, Integer entityId, Component source, AbstractView sourceView) {
+    public ReferenceEditorAction(EditorActionType action, Integer entityId, Component source, AbstractView sourceView) {
         super(action, entityId, source, sourceView);
     }
 
index bdc5cd62d77752695c1620133e90b0b997f62770..5047ce795944b732d2b1cc602dd855151f2c39b0 100644 (file)
@@ -10,6 +10,7 @@ package eu.etaxonomy.cdm.vaadin.event;
 
 import com.vaadin.ui.Component;
 
+import eu.etaxonomy.vaadin.event.EditorActionType;
 import eu.etaxonomy.vaadin.mvp.AbstractView;
 
 /**
@@ -21,7 +22,7 @@ public class RegistrationEditorAction extends AbstractEditorAction {
     /**
      * @param eventType
      */
-    public RegistrationEditorAction(Action type) {
+    public RegistrationEditorAction(EditorActionType type) {
         super(type);
     }
 
@@ -29,7 +30,7 @@ public class RegistrationEditorAction extends AbstractEditorAction {
      * @param edit
      * @param citationId
      */
-    public RegistrationEditorAction(Action type, Integer enitityId) {
+    public RegistrationEditorAction(EditorActionType type, Integer enitityId) {
         super(type, enitityId);
     }
 
@@ -37,7 +38,7 @@ public class RegistrationEditorAction extends AbstractEditorAction {
      * @param action
      * @param source
      */
-    public RegistrationEditorAction(Action action, Component source) {
+    public RegistrationEditorAction(EditorActionType action, Component source) {
         super(action, source);
     }
 
@@ -47,7 +48,7 @@ public class RegistrationEditorAction extends AbstractEditorAction {
      * @param source
      * @param sourceView
      */
-    public RegistrationEditorAction(Action action, Integer entityId, Component source, AbstractView sourceView) {
+    public RegistrationEditorAction(EditorActionType action, Integer entityId, Component source, AbstractView sourceView) {
         super(action, entityId, source, sourceView);
     }
 
@@ -56,7 +57,7 @@ public class RegistrationEditorAction extends AbstractEditorAction {
      * @param entityId
      * @param source
      */
-    public RegistrationEditorAction(Action action, Integer entityId, Component source) {
+    public RegistrationEditorAction(EditorActionType action, Integer entityId, Component source) {
         super(action, entityId, source);
     }
 
index 7d98ecbf69719c36f0d66db2233eb613e89df082..1eb85b2c33efa3979dd329014856af52afdcdec7 100644 (file)
@@ -10,6 +10,7 @@ package eu.etaxonomy.cdm.vaadin.event;
 
 import com.vaadin.ui.Component;
 
+import eu.etaxonomy.vaadin.event.EditorActionType;
 import eu.etaxonomy.vaadin.mvp.AbstractView;
 
 /**
@@ -20,7 +21,7 @@ import eu.etaxonomy.vaadin.mvp.AbstractView;
 public class TaxonNameEditorAction extends AbstractEditorAction {
 
 
-    public TaxonNameEditorAction(Action eventType) {
+    public TaxonNameEditorAction(EditorActionType eventType) {
         super(eventType);
     }
 
@@ -28,7 +29,7 @@ public class TaxonNameEditorAction extends AbstractEditorAction {
      * @param type
      * @param entityId
      */
-    public TaxonNameEditorAction(Action type, Integer entityId) {
+    public TaxonNameEditorAction(EditorActionType type, Integer entityId) {
         super(type, entityId);
     }
 
@@ -37,7 +38,7 @@ public class TaxonNameEditorAction extends AbstractEditorAction {
      * @param entityId
      * @param source
      */
-    public TaxonNameEditorAction(Action type, Integer entityId, Component source) {
+    public TaxonNameEditorAction(EditorActionType type, Integer entityId, Component source) {
         super(type, entityId, source);
     }
 
@@ -45,7 +46,7 @@ public class TaxonNameEditorAction extends AbstractEditorAction {
      * @param action
      * @param source
      */
-    public TaxonNameEditorAction(Action action, Component source) {
+    public TaxonNameEditorAction(EditorActionType action, Component source) {
         super(action, source);
         // TODO Auto-generated constructor stub
     }
@@ -56,7 +57,7 @@ public class TaxonNameEditorAction extends AbstractEditorAction {
      * @param source
      * @param sourceView
      */
-    public TaxonNameEditorAction(Action action, Integer entityId, Component source, AbstractView sourceView) {
+    public TaxonNameEditorAction(EditorActionType action, Integer entityId, Component source, AbstractView sourceView) {
         super(action, entityId, source, sourceView);
         // TODO Auto-generated constructor stub
     }
index e28ba1de9f745104af27507bd551850bcb5055c9..820a3643c51c0b05810d90c8ceaa599af8e26ab4 100644 (file)
@@ -53,12 +53,18 @@ public class ToOneRelatedEntityReloader<CDM extends CdmBase> implements ValueCha
             return;
         }
 
+        @SuppressWarnings("unchecked")
         CDM value = (CDM)event.getProperty().getValue();
         if(value == null) {
             return;
         }
         value = HibernateProxyHelper.deproxy(value);
 
+        if(!cachingPresenter.isCacheInitialized()){
+            // skips as long as the view has not completely loaded the bean
+            return;
+        }
+
         EntityCache cache = cachingPresenter.getCache();
         if(cache != null){
             cache.update();
@@ -76,6 +82,8 @@ public class ToOneRelatedEntityReloader<CDM extends CdmBase> implements ValueCha
                     toOneRelatedEntityField.addValueChangeListener(this);
                     onSettingReloadedEntity = false;
             }
+        } else {
+            throw new RuntimeException("The cache must not be null. See loadBeanById() in AbstractCdmEditorPresenter");
         }
     }
 
index 0735a708340616c6c79bfa9066ba1d507536d464..dc3d58ea6378a1e840d101e09ceccff893c1bfb6 100644 (file)
@@ -8,6 +8,8 @@
 */
 package eu.etaxonomy.cdm.vaadin.event;
 
+import eu.etaxonomy.vaadin.event.EditorActionType;
+
 /**
  * @author a.kohlbecker
  * @since Mar 22, 2017
@@ -15,7 +17,7 @@ package eu.etaxonomy.cdm.vaadin.event;
 public class TypeDesignationEditorAction extends AbstractEditorAction {
 
 
-    public TypeDesignationEditorAction(Action eventType) {
+    public TypeDesignationEditorAction(EditorActionType eventType) {
         super(eventType);
     }
 
@@ -23,7 +25,7 @@ public class TypeDesignationEditorAction extends AbstractEditorAction {
      * @param type
      * @param entityId
      */
-    public TypeDesignationEditorAction(Action type, Integer entityId) {
+    public TypeDesignationEditorAction(EditorActionType type, Integer entityId) {
         super(type, entityId);
     }
 
index 087bc93c765d2260a1608e9631cb742f46259c4d..2976998fbe4ca7b2af4d6aa991f1e1fb280d0590 100644 (file)
@@ -11,6 +11,7 @@ package eu.etaxonomy.cdm.vaadin.event;
 import com.vaadin.ui.Component;
 
 import eu.etaxonomy.cdm.vaadin.util.converter.TypeDesignationSetManager.TypeDesignationWorkingSetType;
+import eu.etaxonomy.vaadin.event.EditorActionType;
 import eu.etaxonomy.vaadin.mvp.AbstractView;
 
 /**
@@ -33,7 +34,7 @@ public class TypeDesignationWorkingsetEditorAction extends AbstractEditorAction
      * @param source
      * @param sourceView
      */
-    public TypeDesignationWorkingsetEditorAction(Action action, Integer typeDesignationWorkingsetId, TypeDesignationWorkingSetType workingSetType, int registrationId,
+    public TypeDesignationWorkingsetEditorAction(EditorActionType action, Integer typeDesignationWorkingsetId, TypeDesignationWorkingSetType workingSetType, int registrationId,
             Component source, AbstractView sourceView) {
         super(action, typeDesignationWorkingsetId, source, sourceView);
         this.registrationId = registrationId;
@@ -48,7 +49,7 @@ public class TypeDesignationWorkingsetEditorAction extends AbstractEditorAction
      * @param source
      * @param sourceView
      */
-    public TypeDesignationWorkingsetEditorAction(Action action, TypeDesignationWorkingSetType workingSetType, int registrationId,
+    public TypeDesignationWorkingsetEditorAction(EditorActionType action, TypeDesignationWorkingSetType workingSetType, int registrationId,
             Component source, AbstractView sourceView) {
         super(action, null, source, sourceView);
         this.workingSetType = workingSetType;
index 641a1b7fcebda6f6246d2a956c807d7b217fbf86..cbbdbcc20f05700f12ee2ec20fb644f995631051 100644 (file)
@@ -103,7 +103,7 @@ public class CollectionEditorPresenter extends AbstractCdmEditorPresenter<Collec
                 );
     }
 
-    @EventListener(condition = "#event.type == T(eu.etaxonomy.cdm.vaadin.event.AbstractEditorAction.Action).ADD")
+    @EventListener(condition = "#event.type == T(eu.etaxonomy.vaadin.event.EditorActionType).ADD")
     public void onCollectionEditorActionAdd(CollectionEditorAction event) {
 
         if(!checkFromOwnView(event)){
@@ -117,7 +117,7 @@ public class CollectionEditorPresenter extends AbstractCdmEditorPresenter<Collec
         collectionPopuEditor.loadInEditor(null);
     }
 
-    @EventListener(condition = "#event.type == T(eu.etaxonomy.cdm.vaadin.event.AbstractEditorAction.Action).EDIT")
+    @EventListener(condition = "#event.type == T(eu.etaxonomy.vaadin.event.EditorActionType).EDIT")
     public void onCollectionEditorActionEdit(CollectionEditorAction event) {
 
         if(!checkFromOwnView(event)){
index a808f90e580d01206bdecdea7bf2430a606e6b06..68bb44bca1bf10f05cf76467397edcdc46f425eb 100644 (file)
@@ -14,13 +14,12 @@ import com.vaadin.ui.GridLayout;
 import com.vaadin.ui.TextField;
 
 import eu.etaxonomy.cdm.model.occurrence.Collection;
-import eu.etaxonomy.cdm.vaadin.event.AbstractEditorAction;
-import eu.etaxonomy.cdm.vaadin.event.AbstractEditorAction.Action;
 import eu.etaxonomy.cdm.vaadin.event.CollectionEditorAction;
 import eu.etaxonomy.cdm.vaadin.event.ToOneRelatedEntityButtonUpdater;
 import eu.etaxonomy.cdm.vaadin.security.AccessRestrictedView;
 import eu.etaxonomy.cdm.vaadin.util.CdmTitleCacheCaptionGenerator;
 import eu.etaxonomy.vaadin.component.ToOneRelatedEntityCombobox;
+import eu.etaxonomy.vaadin.event.EditorActionType;
 import eu.etaxonomy.vaadin.mvp.AbstractCdmPopupEditor;
 
 /**
@@ -135,13 +134,13 @@ public class CollectionPopupEditor extends AbstractCdmPopupEditor<Collection, Co
 
         superCollectionCombobox = new ToOneRelatedEntityCombobox<Collection>("Super-collection", Collection.class);
         superCollectionCombobox.addClickListenerAddEntity(e -> getEventBus().publishEvent(
-                new CollectionEditorAction(AbstractEditorAction.Action.ADD, null, superCollectionCombobox, this)
+                new CollectionEditorAction(EditorActionType.ADD, null, superCollectionCombobox, this)
                 ));
         superCollectionCombobox.addClickListenerEditEntity(e -> {
             if(superCollectionCombobox.getValue() != null){
                 getEventBus().publishEvent(
                     new CollectionEditorAction(
-                            AbstractEditorAction.Action.EDIT,
+                            EditorActionType.EDIT,
                             superCollectionCombobox.getValue().getId(),
                             superCollectionCombobox,
                             this)
@@ -160,7 +159,7 @@ public class CollectionPopupEditor extends AbstractCdmPopupEditor<Collection, Co
 
         superCollectionCombobox.addClickListenerAddEntity( e -> getEventBus().publishEvent(
                 new CollectionEditorAction(
-                        Action.ADD,
+                        EditorActionType.ADD,
                         null,
                         superCollectionCombobox,
                         this)
@@ -169,7 +168,7 @@ public class CollectionPopupEditor extends AbstractCdmPopupEditor<Collection, Co
                 if(superCollectionCombobox.getValue() != null){
                     getEventBus().publishEvent(
                             new CollectionEditorAction(
-                                Action.EDIT,
+                                EditorActionType.EDIT,
                                 superCollectionCombobox.getValue().getId(),
                                 superCollectionCombobox,
                                 this
index 7156b66c002395b9522fa47679dfaefa1320f28b..35999ffe57638e45541d6f4c33189c8796470a9a 100644 (file)
@@ -23,13 +23,13 @@ import eu.etaxonomy.cdm.model.reference.ReferenceType;
 import eu.etaxonomy.cdm.vaadin.component.TextFieldNFix;
 import eu.etaxonomy.cdm.vaadin.component.common.TeamOrPersonField;
 import eu.etaxonomy.cdm.vaadin.component.common.TimePeriodField;
-import eu.etaxonomy.cdm.vaadin.event.AbstractEditorAction;
 import eu.etaxonomy.cdm.vaadin.event.ReferenceEditorAction;
 import eu.etaxonomy.cdm.vaadin.security.AccessRestrictedView;
 import eu.etaxonomy.cdm.vaadin.util.converter.DoiConverter;
 import eu.etaxonomy.cdm.vaadin.util.converter.UriConverter;
 import eu.etaxonomy.vaadin.component.SwitchableTextField;
 import eu.etaxonomy.vaadin.component.ToOneRelatedEntityCombobox;
+import eu.etaxonomy.vaadin.event.EditorActionType;
 import eu.etaxonomy.vaadin.mvp.AbstractCdmPopupEditor;
 
 /**
@@ -128,13 +128,13 @@ public class ReferencePopupEditor extends AbstractCdmPopupEditor<Reference, Refe
         inReferenceCombobox = new ToOneRelatedEntityCombobox<Reference>("In-reference", Reference.class);
         inReferenceCombobox.setWidth(100, Unit.PERCENTAGE);
         inReferenceCombobox.addClickListenerAddEntity(e -> getEventBus().publishEvent(
-                new ReferenceEditorAction(AbstractEditorAction.Action.ADD, null, inReferenceCombobox, this)
+                new ReferenceEditorAction(EditorActionType.ADD, null, inReferenceCombobox, this)
                 ));
         inReferenceCombobox.addClickListenerEditEntity(e -> {
             if(inReferenceCombobox.getValue() != null){
                 getEventBus().publishEvent(
                     new ReferenceEditorAction(
-                            AbstractEditorAction.Action.EDIT,
+                            EditorActionType.EDIT,
                             inReferenceCombobox.getValue().getId(),
                             inReferenceCombobox,
                             this)
index 303e2755d20818b793048d258e6073d9a57f1372..3110fcbb81cec68b6f51022e287de927d098cdeb 100644 (file)
@@ -201,26 +201,40 @@ public class RegistrationWorkingsetPresenter extends AbstractPresenter<Registrat
         }
     }
 
-    @EventListener(condition = "#event.type == T(eu.etaxonomy.cdm.vaadin.event.AbstractEditorAction.Action).ADD && #event.sourceComponent == null")
+    @EventListener(condition = "#event.type == T(eu.etaxonomy.vaadin.event.EditorActionType).ADD")
     public void onReferenceEditorActionAdd(ReferenceEditorAction event) {
+
+        if(!checkFromOwnView(event)){
+            return;
+        }
+
         ReferencePopupEditor popup = getNavigationManager().showInPopup(ReferencePopupEditor.class);
         popup.loadInEditor(null);
     }
 
-    @EventListener(condition = "#event.type == T(eu.etaxonomy.cdm.vaadin.event.AbstractEditorAction.Action).EDIT && #event.sourceComponent == null")
+    @EventListener(condition = "#event.type == T(eu.etaxonomy.vaadin.event.EditorActionType).EDIT")
     public void onReferenceEditorActionEdit(ReferenceEditorAction event) {
+
+        if(!checkFromOwnView(event)){
+            return;
+        }
         ReferencePopupEditor popup = getNavigationManager().showInPopup(ReferencePopupEditor.class);
         popup.withDeleteButton(true);
         popup.loadInEditor(event.getEntityId());
     }
 
-    @EventListener(condition = "#event.type == T(eu.etaxonomy.cdm.vaadin.event.AbstractEditorAction.Action).EDIT && #event.sourceComponent == null")
+    @EventListener(condition = "#event.type == T(eu.etaxonomy.vaadin.event.EditorActionType).EDIT")
     public void onRegistrationEditorAction(RegistrationEditorAction event) {
+
+        if(!checkFromOwnView(event)){
+            return;
+        }
+
         RegistrationPopupEditor popup = getNavigationManager().showInPopup(RegistrationPopupEditor.class);
         popup.loadInEditor(event.getEntityId());
     }
 
-    @EventListener(condition = "#event.type == T(eu.etaxonomy.cdm.vaadin.event.AbstractEditorAction.Action).EDIT")
+    @EventListener(condition = "#event.type == T(eu.etaxonomy.vaadin.event.EditorActionType).EDIT")
     public void onTaxonNameEditorActionEdit(TaxonNameEditorAction event) {
 
         if(!checkFromOwnView(event)){
@@ -238,9 +252,13 @@ public class RegistrationWorkingsetPresenter extends AbstractPresenter<Registrat
     }
 
 
-    @EventListener(condition = "#event.type == T(eu.etaxonomy.cdm.vaadin.event.AbstractEditorAction.Action).ADD")
+    @EventListener(condition = "#event.type == T(eu.etaxonomy.vaadin.event.EditorActionType).ADD")
     public void onTaxonNameEditorActionAdd(TaxonNameEditorAction event) {
 
+        if(!checkFromOwnView(event)){
+            return;
+        }
+
         newTaxonNameForRegistration = TaxonNameFactory.NewBotanicalInstance(Rank.SPECIES());
         newTaxonNameForRegistration.setNomenclaturalReference(getRepo().getReferenceService().find(workingset.getCitationId()));
         EntityChangeEvent nameSaveEvent = getTaxonNameStore().saveBean(newTaxonNameForRegistration);
@@ -327,7 +345,7 @@ public class RegistrationWorkingsetPresenter extends AbstractPresenter<Registrat
 
     }
 
-    @EventListener(condition = "#event.type == T(eu.etaxonomy.cdm.vaadin.event.AbstractEditorAction.Action).EDIT")
+    @EventListener(condition = "#event.type == T(eu.etaxonomy.vaadin.event.EditorActionType).EDIT")
     public void onTypeDesignationsEditorActionEdit(TypeDesignationWorkingsetEditorAction event) {
 
         if(!checkFromOwnView(event)){
@@ -347,7 +365,7 @@ public class RegistrationWorkingsetPresenter extends AbstractPresenter<Registrat
         }
     }
 
-    @EventListener(condition = "#event.type == T(eu.etaxonomy.cdm.vaadin.event.AbstractEditorAction.Action).ADD && #event.sourceComponent == null")
+    @EventListener(condition = "#event.type == T(eu.etaxonomy.vaadin.event.EditorActionType).ADD && #event.sourceComponent == null")
     public void onAddNewTypeDesignationWorkingset(TypeDesignationWorkingsetEditorAction event) {
 
         if(event.getWorkingSetType() == TypeDesignationWorkingSetType.SPECIMEN_TYPE_DESIGNATION_WORKINGSET){
index 6ba59636b128a759fab680b15414ce8c930f6e4e..8f68c077a03e9d660f503caba8469942a80d01f3 100644 (file)
@@ -45,8 +45,6 @@ import eu.etaxonomy.cdm.vaadin.component.registration.RegistrationItemEditButton
 import eu.etaxonomy.cdm.vaadin.component.registration.RegistrationItemEditButtonGroup.TypeDesignationWorkingSetButton;
 import eu.etaxonomy.cdm.vaadin.component.registration.RegistrationStateLabel;
 import eu.etaxonomy.cdm.vaadin.component.registration.RegistrationStyles;
-import eu.etaxonomy.cdm.vaadin.event.AbstractEditorAction;
-import eu.etaxonomy.cdm.vaadin.event.AbstractEditorAction.Action;
 import eu.etaxonomy.cdm.vaadin.event.RegistrationEditorAction;
 import eu.etaxonomy.cdm.vaadin.event.ShowDetailsEvent;
 import eu.etaxonomy.cdm.vaadin.event.TaxonNameEditorAction;
@@ -58,6 +56,7 @@ import eu.etaxonomy.cdm.vaadin.security.PermissionDebugUtils;
 import eu.etaxonomy.cdm.vaadin.security.UserHelper;
 import eu.etaxonomy.cdm.vaadin.util.converter.TypeDesignationSetManager.TypeDesignationWorkingSetType;
 import eu.etaxonomy.cdm.vaadin.view.AbstractPageView;
+import eu.etaxonomy.vaadin.event.EditorActionType;
 
 /**
  * @author a.kohlbecker
@@ -184,7 +183,7 @@ public class RegistrationWorksetViewBean extends AbstractPageView<RegistrationWo
         addNewNameRegistrationButton = new Button("new name");
         addNewNameRegistrationButton.setDescription("A name which is newly published in this publication.");
         addNewNameRegistrationButton.addClickListener(
-                e -> eventBus.publishEvent(new TaxonNameEditorAction(Action.ADD, addNewNameRegistrationButton))
+                e -> eventBus.publishEvent(new TaxonNameEditorAction(EditorActionType.ADD, addNewNameRegistrationButton))
                 );
 
         addExistingNameButton = new Button("existing name:");
@@ -251,7 +250,7 @@ public class RegistrationWorksetViewBean extends AbstractPageView<RegistrationWo
             editRegistrationButton.setStyleName(ValoTheme.BUTTON_TINY);
             editRegistrationButton.setDescription("Edit registration");
             editRegistrationButton.addClickListener(e -> getEventBus().publishEvent(new RegistrationEditorAction(
-                AbstractEditorAction.Action.EDIT,
+                EditorActionType.EDIT,
                 dto.getId(),
                 null,
                 this
@@ -270,7 +269,7 @@ public class RegistrationWorksetViewBean extends AbstractPageView<RegistrationWo
             editButtonGroup.getNameButton().getButton().addClickListener(e -> {
                 Integer nameId = editButtonGroup.getNameButton().getId();
                 getEventBus().publishEvent(new TaxonNameEditorAction(
-                    AbstractEditorAction.Action.EDIT,
+                    EditorActionType.EDIT,
                     nameId,
                     e.getButton(),
                     this
@@ -285,7 +284,7 @@ public class RegistrationWorksetViewBean extends AbstractPageView<RegistrationWo
                 TypeDesignationWorkingSetType workingsetType = workingsetButton.getType();
                 Integer registrationEntityID = dto.getId();
                 getEventBus().publishEvent(new TypeDesignationWorkingsetEditorAction(
-                        AbstractEditorAction.Action.EDIT,
+                        EditorActionType.EDIT,
                         typeDesignationWorkingsetId,
                         workingsetType,
                         registrationEntityID,
@@ -344,7 +343,7 @@ public class RegistrationWorksetViewBean extends AbstractPageView<RegistrationWo
     protected void addNewTypeDesignationWorkingset(TypeDesignationWorkingSetType newWorkingsetType, Integer registrationEntityId, Window typeDesignationTypeCooser) {
         UI.getCurrent().removeWindow(typeDesignationTypeCooser);
         getEventBus().publishEvent(new TypeDesignationWorkingsetEditorAction(
-                AbstractEditorAction.Action.ADD,
+                EditorActionType.ADD,
                 newWorkingsetType,
                 registrationEntityId,
                 null,
index 211ee01870056d8390102f1faf4260114c83333d..59eeb899b0e61f71bc7e18a0b4680c885d9fcbe6 100644 (file)
@@ -81,7 +81,7 @@ public class StartRegistrationPresenter extends AbstractEditorPresenter<Registra
         super.handleViewExit();
     }
 
-    @EventListener(condition = "#event.type == T(eu.etaxonomy.cdm.vaadin.event.AbstractEditorAction.Action).ADD")
+    @EventListener(condition = "#event.type == T(eu.etaxonomy.vaadin.event.EditorActionType).ADD")
     public void onReferenceEditorActionAdd(ReferenceEditorAction event) {
 
         if(getView() == null || getView().getNewPublicationButton() != event.getSourceComponent()){
@@ -96,7 +96,7 @@ public class StartRegistrationPresenter extends AbstractEditorPresenter<Registra
         newReferencePopup.loadInEditor(null);
     }
 
-    @EventListener(condition = "#event.type == T(eu.etaxonomy.cdm.vaadin.event.AbstractEditorAction.Action).REMOVE")
+    @EventListener(condition = "#event.type == T(eu.etaxonomy.vaadin.event.EditorActionType).REMOVE")
     public void onReferenceEditorActionRemove(ReferenceEditorAction event) {
 
         if(getView().getRemoveNewPublicationButton() != event.getSourceComponent()){
@@ -147,7 +147,7 @@ public class StartRegistrationPresenter extends AbstractEditorPresenter<Registra
         }
     }
 
-    @EventListener(condition = "#event.type == T(eu.etaxonomy.cdm.vaadin.event.AbstractEditorAction.Action).ADD")
+    @EventListener(condition = "#event.type == T(eu.etaxonomy.vaadin.event.EditorActionType).ADD")
     public void onRegistrationEditorActionAdd(RegistrationEditorAction event) {
 
         if(getView().getContinueButton() != event.getSourceComponent()){
index 1adeef6ed0dc58640f9833008994929795253192..f1c4b36b8c9df9cadc047d01588f643c6f8967f2 100644 (file)
@@ -25,11 +25,11 @@ import com.vaadin.ui.VerticalLayout;
 import com.vaadin.ui.themes.ValoTheme;
 
 import eu.etaxonomy.cdm.model.reference.Reference;
-import eu.etaxonomy.cdm.vaadin.event.AbstractEditorAction.Action;
 import eu.etaxonomy.cdm.vaadin.event.ReferenceEditorAction;
 import eu.etaxonomy.cdm.vaadin.event.RegistrationEditorAction;
 import eu.etaxonomy.cdm.vaadin.security.AccessRestrictedView;
 import eu.etaxonomy.cdm.vaadin.view.AbstractPageView;
+import eu.etaxonomy.vaadin.event.EditorActionType;
 
 /**
  * @author a.kohlbecker
@@ -89,7 +89,7 @@ public class StartRegistrationViewBean extends AbstractPageView<StartRegistratio
 
         newPublicationButton = new Button("New");
         newPublicationButton.addClickListener( e -> eventBus.publishEvent(
-                new ReferenceEditorAction(Action.ADD, newPublicationButton)
+                new ReferenceEditorAction(EditorActionType.ADD, newPublicationButton)
                 ));
         newPublicationButton.setCaption("New");
         newPublicationButton.setWidth(ELEMENT_WIDTH);
@@ -101,7 +101,7 @@ public class StartRegistrationViewBean extends AbstractPageView<StartRegistratio
         removeNewPublicationButton.setStyleName(ValoTheme.BUTTON_DANGER);
         removeNewPublicationButton.setWidth(ELEMENT_WIDTH);
         removeNewPublicationButton.addClickListener( e -> eventBus.publishEvent(
-                new ReferenceEditorAction(Action.REMOVE, removeNewPublicationButton)
+                new ReferenceEditorAction(EditorActionType.REMOVE, removeNewPublicationButton)
                 ));
 
         removeNewPublicationButton.setVisible(false);
@@ -134,7 +134,7 @@ public class StartRegistrationViewBean extends AbstractPageView<StartRegistratio
                 refId = referenceCombobox.getValue().getId();
             }
             eventBus.publishEvent(
-                new RegistrationEditorAction(Action.ADD,
+                new RegistrationEditorAction(EditorActionType.ADD,
                         // passing the refId is hack, bit for some reason the presenter is always referring to the wrong view
                         refId,
                         continueButton,
diff --git a/src/main/java/eu/etaxonomy/vaadin/event/EditorActionType.java b/src/main/java/eu/etaxonomy/vaadin/event/EditorActionType.java
new file mode 100644 (file)
index 0000000..2567625
--- /dev/null
@@ -0,0 +1,15 @@
+/**
+* Copyright (C) 2018 EDIT
+* 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.vaadin.event;
+
+public enum EditorActionType {
+    ADD,    // TODO change to CREATE?
+    EDIT,
+    REMOVE;
+}
\ No newline at end of file
diff --git a/src/main/java/eu/etaxonomy/vaadin/event/EntityEditorActionEvent.java b/src/main/java/eu/etaxonomy/vaadin/event/EntityEditorActionEvent.java
new file mode 100644 (file)
index 0000000..2a1de01
--- /dev/null
@@ -0,0 +1,85 @@
+/**
+* Copyright (C) 2017 EDIT
+* 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.vaadin.event;
+
+import java.util.EnumSet;
+
+import com.vaadin.ui.AbstractField;
+
+/**
+ * An Event
+ * which represents the request to start an editor to enable the
+ * user to perform the <code>action</code> transported with this event.
+ *
+ * @author a.kohlbecker
+ *
+ */
+public class EntityEditorActionEvent<T>  {
+
+    private Class<T> beanType;
+    private EditorActionType action;
+    private AbstractField<T> field;
+    private T bean;
+
+    /**
+     * @param type
+     * @param entityId
+     * @param field
+     */
+    public EntityEditorActionEvent(EditorActionType action, Class<T> beanType, AbstractField<T> field) {
+        this.action = action;
+        this.beanType = beanType;
+        this.field = field;
+    }
+
+    /**
+     *
+     * @param type
+     * @param entityId
+     * @param field
+     */
+    public EntityEditorActionEvent(EditorActionType action, Class<T> beanType, T bean, AbstractField<T> field) {
+        this.action = action;
+        this.beanType = beanType;
+        if(EnumSet.of(EditorActionType.REMOVE, EditorActionType.EDIT).contains(action) && bean == null){
+            throw new NullPointerException("bean must not be null when creating an event with " + action);
+        }
+        this.bean = bean;
+        this.field = field;
+    }
+
+    /**
+     * @return the beanType
+     */
+    public Class<?> getBeanType() {
+        return beanType;
+    }
+
+    /**
+     * @return the action
+     */
+    public EditorActionType getAction() {
+        return action;
+    }
+
+    /**
+     * @return the field which contains the bean
+     */
+    public AbstractField<T> getSource() {
+        return field;
+    }
+
+    /**
+     * @return the bean
+     */
+    public T getBean() {
+        return bean;
+    }
+
+}
diff --git a/src/main/java/eu/etaxonomy/vaadin/event/EntityEditorActionListener.java b/src/main/java/eu/etaxonomy/vaadin/event/EntityEditorActionListener.java
new file mode 100644 (file)
index 0000000..d775ad9
--- /dev/null
@@ -0,0 +1,20 @@
+/**
+* Copyright (C) 2018 EDIT
+* 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.vaadin.event;
+
+/**
+ * @author a.kohlbecker
+ * @since Jan 17, 2018
+ *
+ */
+public interface EntityEditorActionListener {
+
+    public void onEntityEditorActionEvent(EntityEditorActionEvent action);
+
+}