fix #7588 updating buttons on setDataSource
authorAndreas Kohlbecker <a.kohlbecker@bgbm.org>
Thu, 26 Jul 2018 12:13:40 +0000 (14:13 +0200)
committerAndreas Kohlbecker <a.kohlbecker@bgbm.org>
Thu, 26 Jul 2018 12:13:40 +0000 (14:13 +0200)
12 files changed:
src/main/java/eu/etaxonomy/cdm/vaadin/event/NestedButtonStateUpdater.java
src/main/java/eu/etaxonomy/cdm/vaadin/event/ToOneRelatedEntityButtonUpdater.java
src/main/java/eu/etaxonomy/cdm/vaadin/view/common/InstitutionPopupEditor.java
src/main/java/eu/etaxonomy/cdm/vaadin/view/name/NameTypeDesignationPresenter.java
src/main/java/eu/etaxonomy/cdm/vaadin/view/name/SpecimenTypeDesignationDTORow.java
src/main/java/eu/etaxonomy/cdm/vaadin/view/name/TaxonNameEditorPresenter.java
src/main/java/eu/etaxonomy/cdm/vaadin/view/occurrence/CollectionPopupEditor.java
src/main/java/eu/etaxonomy/cdm/vaadin/view/reference/ReferenceEditorPresenter.java
src/main/java/eu/etaxonomy/vaadin/component/NameRelationField.java
src/main/java/eu/etaxonomy/vaadin/component/ToOneRelatedEntityCombobox.java
src/main/java/eu/etaxonomy/vaadin/component/ToOneRelatedEntityField.java
src/main/java/eu/etaxonomy/vaadin/component/ToOneRelatedEntityListSelect.java

index f4e2c271c037c587c894d29173f7598e11cdce95..06781fbf12012f1c43d65f4a15fdfc11371ad230 100644 (file)
@@ -15,6 +15,8 @@ import com.vaadin.data.Property.ValueChangeListener;
  * @since Jun 6, 2018
  *
  */
-public interface NestedButtonStateUpdater extends ValueChangeListener{
+public interface NestedButtonStateUpdater<T> extends ValueChangeListener{
+
+    public void updateButtons(T value);
 
 }
index a1e58e1000d13182ffc7cb2e6b34331ed4cb5d93..61c28fdc0e1f1cc368cf14d0d2acd069d383678c 100644 (file)
@@ -9,6 +9,7 @@
 package eu.etaxonomy.cdm.vaadin.event;
 
 import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.ui.Field;
 
 import eu.etaxonomy.cdm.model.common.CdmBase;
 import eu.etaxonomy.cdm.persistence.hibernate.permission.CRUD;
@@ -20,7 +21,7 @@ import eu.etaxonomy.vaadin.component.ToOneRelatedEntityField;
  * @since 19.10.2017
  *
  */
-public class ToOneRelatedEntityButtonUpdater<CDM extends CdmBase> implements NestedButtonStateUpdater {
+public class ToOneRelatedEntityButtonUpdater<CDM extends CdmBase> implements NestedButtonStateUpdater<CDM> {
 
     private static final long serialVersionUID = 4472031263172275012L;
 
@@ -32,6 +33,7 @@ public class ToOneRelatedEntityButtonUpdater<CDM extends CdmBase> implements Nes
     public ToOneRelatedEntityButtonUpdater(ToOneRelatedEntityField<CDM> toOneRelatedEntityField){
         this.toOneRelatedEntityField = toOneRelatedEntityField;
         this.type = toOneRelatedEntityField.getType();
+        updateButtons(((Field<CDM>)toOneRelatedEntityField).getValue());
         toOneRelatedEntityField.setEditButtonEnabled(false);
     }
 
@@ -41,13 +43,22 @@ public class ToOneRelatedEntityButtonUpdater<CDM extends CdmBase> implements Nes
     @Override
     public void valueChange(ValueChangeEvent event) {
 
-        CdmBase value = (CdmBase)event.getProperty().getValue();
+        CDM value = (CDM)event.getProperty().getValue();
+        updateButtons(value);
+    }
+
+    /**
+     * @param value
+     */
+    @Override
+    public void updateButtons(CDM value) {
 
         boolean userIsAllowedToUpdate = value != null && UserHelperAccess.userHelper().userHasPermission(value, CRUD.UPDATE);
         boolean userIsAllowedToCreate = UserHelperAccess.userHelper().userHasPermission(type, CRUD.CREATE);
+        boolean isReadOnlyField = ((Field)toOneRelatedEntityField).isReadOnly();
 
-        toOneRelatedEntityField.setAddButtonEnabled(userIsAllowedToCreate);
-        toOneRelatedEntityField.setEditButtonEnabled(userIsAllowedToUpdate);
+        toOneRelatedEntityField.setAddButtonEnabled(!isReadOnlyField && userIsAllowedToCreate);
+        toOneRelatedEntityField.setEditButtonEnabled(!isReadOnlyField && userIsAllowedToUpdate);
 
     }
 
index 3339deeb12520c60dcdc29598d62abad20e029a7..f2b20cd6a1f82979e15f4274e938f9a28c7fa4c0 100644 (file)
@@ -130,10 +130,7 @@ public class InstitutionPopupEditor extends AbstractCdmDTOPopupEditor<Institutio
         partOfCombobox.getSelect().setCaptionGenerator(
                 new CdmTitleCacheCaptionGenerator<Institution>()
                 );
-        partOfCombobox.getSelect().addValueChangeListener(
-                new ToOneRelatedEntityButtonUpdater<Institution>(partOfCombobox)
-                );
-
+        partOfCombobox.setNestedButtonStateUpdater(new ToOneRelatedEntityButtonUpdater<Institution>(partOfCombobox));
 
         partOfCombobox.addClickListenerAddEntity( e -> getViewEventBus().publish(this,
                 new InstitutionEditorAction(
index 8c6d47359ceb999d7899e40d16163472ac0dd339..b65f04712199f014af841c8a4ffcf06776d2c1dc 100644 (file)
@@ -140,12 +140,12 @@ public class NameTypeDesignationPresenter
         getView().getCitationCombobox().getSelect().setCaptionGenerator(new CdmTitleCacheCaptionGenerator<Reference>());
         CdmFilterablePagingProvider<Reference,Reference> referencePagingProvider = pagingProviderFactory.referencePagingProvider();
         getView().getCitationCombobox().loadFrom(referencePagingProvider, referencePagingProvider, referencePagingProvider.getPageSize());
-        getView().getCitationCombobox().getSelect().addValueChangeListener(new ToOneRelatedEntityButtonUpdater<Reference>(getView().getCitationCombobox()));
+        getView().getCitationCombobox().setNestedButtonStateUpdater(new ToOneRelatedEntityButtonUpdater<Reference>(getView().getCitationCombobox()));
         getView().getCitationCombobox().getSelect().addValueChangeListener(new ToOneRelatedEntityReloader<>(getView().getCitationCombobox(), this));
 
         CdmFilterablePagingProvider<TaxonName,TaxonName> namePagingProvider = new CdmFilterablePagingProvider<TaxonName, TaxonName>(getRepo().getNameService());
         getView().getTypeNameField().loadFrom(namePagingProvider, namePagingProvider, namePagingProvider.getPageSize());
-        getView().getTypeNameField().getSelect().addValueChangeListener(new ToOneRelatedEntityButtonUpdater<TaxonName>(getView().getTypeNameField()));
+        getView().getTypeNameField().setNestedButtonStateUpdater(new ToOneRelatedEntityButtonUpdater<TaxonName>(getView().getTypeNameField()));
         getView().getTypeNameField().getSelect().addValueChangeListener(new ToOneRelatedEntityReloader<>(getView().getTypeNameField(), this));
 
         getView().getTypifiedNamesComboboxSelect().setPagingProviders(namePagingProvider, namePagingProvider, namePagingProvider.getPageSize(), this);
index 4153938885b7e8c6624181c45ade60d0467429d2..649ca84a15b1dba8a347ae2befbfda21de2e48ac 100644 (file)
@@ -68,17 +68,11 @@ public class SpecimenTypeDesignationDTORow extends CollectionRowItemCollection i
         preferredStableUri.setWidth(150, Unit.PIXELS);
         preferredStableUri.setConverter(new UriConverter());
         collection.setWidth(200, Unit.PIXELS);
-        collectionFieldUpdater = new ToOneRelatedEntityButtonUpdater<Collection>(collection);
-        collection.addValueChangeListener(
-                collectionFieldUpdater
-                );
+        collection.setNestedButtonStateUpdater(new ToOneRelatedEntityButtonUpdater<Collection>(collection));
         mediaUri.setWidth(150, Unit.PIXELS);
         mediaUri.setConverter(new UriConverter());
         mediaSpecimenReference.setWidth(200, Unit.PIXELS);
-        mediaSpecimenReferenceUpdater = new ToOneRelatedEntityButtonUpdater<Reference>(mediaSpecimenReference);
-        mediaSpecimenReference.addValueChangeListener(
-                mediaSpecimenReferenceUpdater
-                );
+        mediaSpecimenReference.setNestedButtonStateUpdater(new ToOneRelatedEntityButtonUpdater<Reference>(mediaSpecimenReference));
         mediaSpecimenReferenceDetail.setWidth(200, Unit.PIXELS);
 
         kindOfUnit.addValueChangeListener(e ->
index b0415c4114a8da1ffe01bc4f528762791dbc1efc..6a2e2272ed918984c22622cd0508bbd845d3b759 100644 (file)
@@ -130,7 +130,7 @@ public class TaxonNameEditorPresenter extends AbstractCdmDTOEditorPresenter<Taxo
         nomReferencePagingProvider = pagingProviderFactory.referencePagingProvider();
         nomReferencePagingProvider.setInitStrategy(REFERENCE_INIT_STRATEGY);
         getView().getNomReferenceCombobox().loadFrom(nomReferencePagingProvider, nomReferencePagingProvider, nomReferencePagingProvider.getPageSize());
-        getView().getNomReferenceCombobox().getSelect().addValueChangeListener(new ToOneRelatedEntityButtonUpdater<Reference>(getView().getNomReferenceCombobox()));
+        getView().getNomReferenceCombobox().setNestedButtonStateUpdater(new ToOneRelatedEntityButtonUpdater<Reference>(getView().getNomReferenceCombobox()));
         getView().getNomReferenceCombobox().getSelect().addValueChangeListener(new ToOneRelatedEntityReloader<>(getView().getNomReferenceCombobox(), this));
 
         getView().getBasionymComboboxSelect().setCaptionGenerator(new CdmTitleCacheCaptionGenerator<TaxonName>());
index 1adffd599648d055cefe9d1363f65a46e78e688e..26416fd3c8b7055c67558052e61ee40ab0cf04db 100644 (file)
@@ -152,10 +152,7 @@ public class CollectionPopupEditor extends AbstractCdmPopupEditor<Collection, Co
         superCollectionCombobox.getSelect().setCaptionGenerator(
                 new CollectionCaptionGenerator()
                 );
-        superCollectionCombobox.getSelect().addValueChangeListener(
-                new ToOneRelatedEntityButtonUpdater<Collection>(superCollectionCombobox)
-                );
-
+        superCollectionCombobox.setNestedButtonStateUpdater(new ToOneRelatedEntityButtonUpdater<Collection>(superCollectionCombobox));
 
         superCollectionCombobox.addClickListenerAddEntity( e -> getViewEventBus().publish(this,
                 new CollectionEditorAction(
@@ -188,10 +185,7 @@ public class CollectionPopupEditor extends AbstractCdmPopupEditor<Collection, Co
         institutionCombobox.getSelect().setCaptionGenerator(
                 new CdmTitleCacheCaptionGenerator<Institution>()
                 );
-        institutionCombobox.getSelect().addValueChangeListener(
-                new ToOneRelatedEntityButtonUpdater<Institution>(institutionCombobox)
-                );
-
+        institutionCombobox.setNestedButtonStateUpdater(new ToOneRelatedEntityButtonUpdater<Institution>(institutionCombobox));
 
         institutionCombobox.addClickListenerAddEntity( e -> getViewEventBus().publish(this,
                 new InstitutionEditorAction(
index 7e164d73f0e5d5e917f2f5114d7b4fece88946a3..11403db9d7137d0caec2285d595163216e00b6fc 100644 (file)
@@ -72,7 +72,7 @@ public class ReferenceEditorPresenter extends AbstractCdmEditorPresenter<Referen
 
         CdmFilterablePagingProvider<Reference, Reference> collectionPagingProvider = pagingProviderFactory.referencePagingProvider();
         getView().getInReferenceCombobox().loadFrom(collectionPagingProvider, collectionPagingProvider, collectionPagingProvider.getPageSize());
-        getView().getInReferenceCombobox().getSelect().addValueChangeListener(new ToOneRelatedEntityButtonUpdater<Reference>(getView().getInReferenceCombobox()));
+        getView().getInReferenceCombobox().setNestedButtonStateUpdater(new ToOneRelatedEntityButtonUpdater<Reference>(getView().getInReferenceCombobox()));
         getView().getInReferenceCombobox().getSelect().addValueChangeListener(new ToOneRelatedEntityReloader<Reference>(getView().getInReferenceCombobox(),this));
 
         CdmFilterablePagingProvider<AgentBase, TeamOrPersonBase> teamOrPersonPagingProvider = new CdmFilterablePagingProvider<AgentBase, TeamOrPersonBase>(getRepo().getAgentService(), TeamOrPersonBase.class);
index e68b92a9339e33185d24062cf94440487de2ef62..9c3740b5ca2ba66506b2048af0a468d7469a2571 100644 (file)
@@ -111,8 +111,8 @@ public class NameRelationField extends CompositeCustomField<NameRelationshipDTO>
                 setValue(null);
                 updateToolBarButtonStates();
             });
-        validatedNameComboBox.getSelect().addValueChangeListener(new ToOneRelatedEntityButtonUpdater<TaxonName>(validatedNameComboBox));
-        citatonComboBox.getSelect().addValueChangeListener(new ToOneRelatedEntityButtonUpdater<Reference>(citatonComboBox));
+        validatedNameComboBox.setNestedButtonStateUpdater(new ToOneRelatedEntityButtonUpdater<TaxonName>(validatedNameComboBox));
+        citatonComboBox.setNestedButtonStateUpdater(new ToOneRelatedEntityButtonUpdater<Reference>(citatonComboBox));
 
         grid = new GridLayout(2, 3);
 
index 83726ab96143e12c45e4af5f30b5f828fd4f64c8..fbb6f0b2340e420daf3e6eab9a4b0cc4ac28bcc3 100644 (file)
@@ -21,6 +21,7 @@ import com.vaadin.ui.CssLayout;
 import com.vaadin.ui.themes.ValoTheme;
 
 import eu.etaxonomy.cdm.vaadin.component.ButtonFactory;
+import eu.etaxonomy.cdm.vaadin.event.NestedButtonStateUpdater;
 
 /**
  * @author a.kohlbecker
@@ -43,6 +44,8 @@ public class ToOneRelatedEntityCombobox<V extends Object> extends CompositeCusto
     private Button addButton = ButtonFactory.CREATE_NEW.createButton();
     private Button editButton = ButtonFactory.EDIT_ITEM.createButton();
 
+    private NestedButtonStateUpdater<V> buttonUpdater;
+
     public ToOneRelatedEntityCombobox(String caption, Class<V> type){
         this.type = type;
         setCaption(caption);
@@ -184,6 +187,9 @@ public class ToOneRelatedEntityCombobox<V extends Object> extends CompositeCusto
     @Override
     public void setPropertyDataSource(Property newDataSource) {
         lazySelect.setPropertyDataSource(newDataSource);
+        if(buttonUpdater != null){
+            buttonUpdater.updateButtons(lazySelect.getValue());
+        }
     }
 
     /**
@@ -201,6 +207,18 @@ public class ToOneRelatedEntityCombobox<V extends Object> extends CompositeCusto
     public void setReadOnly(boolean readOnly) {
         super.setReadOnly(readOnly);
         setDeepReadOnly(readOnly, getContent(), null);
+        if(buttonUpdater != null){
+            buttonUpdater.updateButtons(lazySelect.getValue());
+        }
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void setNestedButtonStateUpdater(NestedButtonStateUpdater<V> buttonUpdater) {
+        this.buttonUpdater = buttonUpdater;
+        lazySelect.addValueChangeListener(buttonUpdater);
     }
 
 
index 9d84a4c3ac1792042b3edf9ed9306a119292173a..7f46e0b93be82bb0ab9e4906c3d0f8d677d6a2ed 100644 (file)
@@ -10,6 +10,8 @@ package eu.etaxonomy.vaadin.component;
 
 import com.vaadin.ui.Button.ClickListener;
 
+import eu.etaxonomy.cdm.vaadin.event.NestedButtonStateUpdater;
+
 /**
  * @author a.kohlbecker
  * @since May 25, 2017
@@ -17,6 +19,8 @@ import com.vaadin.ui.Button.ClickListener;
  */
 public interface ToOneRelatedEntityField<V extends Object> {
 
+    public void setNestedButtonStateUpdater(NestedButtonStateUpdater<V> buttonUpdater);
+
     /**
      * Set the enabled state of the edit button
      *
index 98f539e69b6e374e478c17b67b10f85a11b1adbb..396ffae736e803bffa0748b6f7a653eff2c95dbf 100644 (file)
@@ -19,6 +19,7 @@ import com.vaadin.ui.ListSelect;
 import com.vaadin.ui.themes.ValoTheme;
 
 import eu.etaxonomy.cdm.vaadin.component.ButtonFactory;
+import eu.etaxonomy.cdm.vaadin.event.NestedButtonStateUpdater;
 
 /**
  * @author a.kohlbecker
@@ -37,6 +38,7 @@ public class ToOneRelatedEntityListSelect<V extends Object> extends CompositeCus
 
     private ListSelect select;
 
+    NestedButtonStateUpdater<V> buttonUpdater;
 
     private Button addButton = ButtonFactory.ADD_ITEM.createButton();
     private Button editButton  = ButtonFactory.EDIT_ITEM.createButton();
@@ -49,6 +51,7 @@ public class ToOneRelatedEntityListSelect<V extends Object> extends CompositeCus
         addSizedComponent(select);
     }
 
+
     /**
      * {@inheritDoc}
      */
@@ -100,6 +103,9 @@ public class ToOneRelatedEntityListSelect<V extends Object> extends CompositeCus
     @Override
     public void setPropertyDataSource(Property newDataSource) {
         select.setPropertyDataSource(newDataSource);
+        if(buttonUpdater != null){
+            buttonUpdater.updateButtons((V) select.getValue());
+        }
     }
 
     @Override
@@ -150,4 +156,14 @@ public class ToOneRelatedEntityListSelect<V extends Object> extends CompositeCus
     }
 
 
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void setNestedButtonStateUpdater(NestedButtonStateUpdater<V> buttonUpdater) {
+        this.buttonUpdater = buttonUpdater;
+        select.addValueChangeListener(buttonUpdater);
+    }
+
+
 }