fix #10373 additionally add a dialog to the RegistrationWorkingsetPresenter which...
authorAndreas Müller <a.mueller@bgbm.org>
Tue, 23 Jan 2024 14:31:14 +0000 (15:31 +0100)
committerAndreas Müller <a.mueller@bgbm.org>
Tue, 23 Jan 2024 14:31:14 +0000 (15:31 +0100)
src/main/java/eu/etaxonomy/cdm/vaadin/view/registration/RegistrationWorkingsetPresenter.java

index ad153ef08c57b01430e2332c8e42eca345c2bc51..d85470887e52be26c8999b85456ad458c2ad7331 100644 (file)
@@ -28,9 +28,12 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.vaadin.spring.events.EventScope;
 import org.vaadin.spring.events.annotation.EventBusListenerMethod;
 
+import com.vaadin.event.ShortcutAction.KeyCode;
 import com.vaadin.spring.annotation.SpringComponent;
 import com.vaadin.spring.annotation.ViewScope;
 import com.vaadin.ui.AbstractField;
+import com.vaadin.ui.Alignment;
+import com.vaadin.ui.Button;
 import com.vaadin.ui.Label;
 import com.vaadin.ui.UI;
 import com.vaadin.ui.VerticalLayout;
@@ -56,6 +59,7 @@ import eu.etaxonomy.cdm.model.name.TypeDesignationBase;
 import eu.etaxonomy.cdm.model.occurrence.FieldUnit;
 import eu.etaxonomy.cdm.model.permission.CRUD;
 import eu.etaxonomy.cdm.model.reference.Reference;
+import eu.etaxonomy.cdm.persistence.permission.PermissionDeniedException;
 import eu.etaxonomy.cdm.ref.TypedEntityReference;
 import eu.etaxonomy.cdm.service.CdmBeanItemContainerFactory;
 import eu.etaxonomy.cdm.service.CdmFilterablePagingProvider;
@@ -243,9 +247,11 @@ public class RegistrationWorkingsetPresenter
     }
 
     private void applyWorkingset(){
-         getView().setWorkingset(workingset);
-        // PagingProviders and CacheGenerator for the existingNameCombobox
-        activateComboboxes();
+        if (workingset != null) {
+            getView().setWorkingset(workingset);
+            // PagingProviders and CacheGenerator for the existingNameCombobox
+            activateComboboxes();
+        }
     }
 
     protected void activateComboboxes() {
@@ -259,9 +265,14 @@ public class RegistrationWorkingsetPresenter
 
         try {
             workingset = getWorkingSetService().loadWorkingSetByReferenceUuid(referenceUuid, true);
+        } catch (PermissionDeniedException error) {
+            logger.warn(error);
+            showErrorDialog("Permission denied", "You are not allowed to access this working set.");
+            return;
         } catch (TypeDesignationSetException error) {
             logger.error(error);
             showErrorDialog("Validation Error", error.getMessage());
+            //NOTE by AM: should we return here, too, or is this error not so
         }
         cache = new CdmTransientEntityWithUuidCacher(this);
         for(Registration registration : workingset.getRegistrations()) {
@@ -270,12 +281,28 @@ public class RegistrationWorkingsetPresenter
     }
 
     public void showErrorDialog(String errorDialogCaption, String errorMessage) {
-        Window errorDialog = new Window(errorDialogCaption);
+
+        final Window errorDialog = new Window(errorDialogCaption);
         errorDialog.setModal(true);
+        errorDialog.setClosable(false);
+        errorDialog.setResizable(false);
         VerticalLayout subContent = new VerticalLayout();
+        subContent.setSpacing(true);
         subContent.setMargin(true);
         errorDialog.setContent(subContent);
         subContent.addComponent(new Label(errorMessage));
+
+        //close button (quick & dirty by AM, to fix #10373)
+        Button cancelButton = new Button("Close");
+        subContent.addComponent(cancelButton);
+        cancelButton.setWidth("-1px");
+        cancelButton.setHeight("-1px");
+        subContent.addComponent(cancelButton);
+        subContent.setComponentAlignment(cancelButton, new Alignment(48));
+        cancelButton.addClickListener((ev)->errorDialog.close());
+        cancelButton.setClickShortcut(KeyCode.ENTER, null);
+        cancelButton.focus();
+
         UI.getCurrent().addWindow(errorDialog);
     }