From 6e6aa475ec3cd8da14de638a39c2d66c9deaa957 Mon Sep 17 00:00:00 2001
From: buczekp <buczekp>
Date: Mon, 18 Jul 2011 09:28:18 +0000
Subject: [PATCH] [LMS-2365] made revert deletion available from detail views;
 hiding of 'Delete'/'Revert' button based on entity deletion status

SVN: 22170
---
 .../client/web/client/application/Dict.java   |  3 +
 .../client/application/ui/AbstractViewer.java | 72 ++++++++++++++++++-
 .../RevertDeletionConfirmationDialog.java     | 33 ++++++++-
 .../basic/IEntityWithDeletionInformation.java | 25 +++++++
 .../generic/shared/basic/dto/Experiment.java  |  7 +-
 .../shared/basic/dto/ExternalData.java        |  4 +-
 .../generic/shared/basic/dto/Sample.java      | 18 ++---
 .../dataset/GenericDataSetViewer.java         |  9 +++
 .../experiment/GenericExperimentViewer.java   |  9 +++
 .../sample/GenericSampleViewer.java           |  9 +++
 .../cisd/openbis/public/common-dictionary.js  |  1 +
 11 files changed, 174 insertions(+), 16 deletions(-)
 create mode 100644 openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/IEntityWithDeletionInformation.java

diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/Dict.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/Dict.java
index b5be32ee273..4ca2b9a0899 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/Dict.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/Dict.java
@@ -530,6 +530,9 @@ public abstract class Dict
     public static final String REVERT_DELETIONS_CONFIRMATION_MSG =
             "revert_deletions_confirmation_msg";
 
+    public static final String REVERT_ENTITY_DELETION_CONFIRMATION_MSG =
+            "revert_entity_deletion_confirmation_msg";
+
     public static final String PERMANENT_DELETIONS_CONFIRMATION_TITLE =
             "permanent_deletions_confirmation_title";
 
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/AbstractViewer.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/AbstractViewer.java
index 117d58165e1..cc48672fd3e 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/AbstractViewer.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/AbstractViewer.java
@@ -90,6 +90,8 @@ public abstract class AbstractViewer<D extends IEntityInformationHolder> extends
 
     protected D originalData;
 
+    private final DeletionButtonsManager deletionButtonsManager = new DeletionButtonsManager();
+
     protected final ModulesSectionsManager moduleSectionManager = new ModulesSectionsManager();
 
     // A suffix used to designate widgets owned by this panel
@@ -139,6 +141,11 @@ public abstract class AbstractViewer<D extends IEntityInformationHolder> extends
         return result;
     }
 
+    void updateDeletionButtons()
+    {
+
+    }
+
     protected Button createDeleteButton(final IDelegatedAction deleteAction)
     {
         Button result = new Button(viewContext.getMessage(Dict.BUTTON_DELETE));
@@ -150,7 +157,35 @@ public abstract class AbstractViewer<D extends IEntityInformationHolder> extends
                     deleteAction.execute();
                 }
             });
-        result.disable();
+        if (DeletionUtils.isDeleted(originalData))
+        {
+            result.setVisible(false);
+        } else
+        {
+            result.disable();
+        }
+        deletionButtonsManager.setDeleteButton(result);
+        return result;
+    }
+
+    protected Button createRevertDeletionButton(final IDelegatedAction revertAction)
+    {
+        Button result = new Button(viewContext.getMessage(Dict.BUTTON_REVERT_DELETION));
+        result.addListener(Events.Select, new Listener<BaseEvent>()
+            {
+                public void handleEvent(BaseEvent be)
+                {
+                    revertAction.execute();
+                }
+            });
+        if (DeletionUtils.isDeleted(originalData))
+        {
+            result.disable();
+        } else
+        {
+            result.setVisible(false);
+        }
+        deletionButtonsManager.setRevertButton(result);
         return result;
     }
 
@@ -213,6 +248,7 @@ public abstract class AbstractViewer<D extends IEntityInformationHolder> extends
         this.displayIdSuffix = newData.getEntityType().getCode();
         updateBreadcrumbs();
         setToolBarButtonsEnabled(true);
+        deletionButtonsManager.updateButtonVisibitity();
     }
 
     /**
@@ -284,6 +320,11 @@ public abstract class AbstractViewer<D extends IEntityInformationHolder> extends
         return new RefreshViewerCallback(viewContext);
     }
 
+    protected final AbstractAsyncCallback<Void> createRevertDeletionCallback()
+    {
+        return new RefreshViewerCallback(viewContext);
+    }
+
     private final class CloseViewerCallback extends AbstractAsyncCallback<Void>
     {
         public CloseViewerCallback(IViewContext<?> viewContext)
@@ -429,4 +470,33 @@ public abstract class AbstractViewer<D extends IEntityInformationHolder> extends
 
     }
 
+    private class DeletionButtonsManager
+    {
+        private Button deleteButtonOrNull;
+
+        private Button revertButtonOrNull;
+
+        public void setDeleteButton(Button deleteButton)
+        {
+            this.deleteButtonOrNull = deleteButton;
+        }
+
+        public void setRevertButton(Button revertButton)
+        {
+            this.revertButtonOrNull = revertButton;
+        }
+
+        public void updateButtonVisibitity()
+        {
+            if (deleteButtonOrNull != null)
+            {
+                deleteButtonOrNull.setVisible(DeletionUtils.isDeleted(originalData) == false);
+            }
+            if (revertButtonOrNull != null)
+            {
+                revertButtonOrNull.setVisible(DeletionUtils.isDeleted(originalData));
+            }
+        }
+    }
+
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/deletion/RevertDeletionConfirmationDialog.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/deletion/RevertDeletionConfirmationDialog.java
index b7a215252ba..78867a49550 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/deletion/RevertDeletionConfirmationDialog.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/deletion/RevertDeletionConfirmationDialog.java
@@ -23,7 +23,10 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.ICommonClientServiceAs
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.AbstractAsyncCallback;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.Dict;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.renderer.DateRenderer;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.AbstractDataConfirmationDialog;
+import ch.systemsx.cisd.openbis.generic.shared.basic.BasicConstant;
+import ch.systemsx.cisd.openbis.generic.shared.basic.IEntityWithDeletionInformation;
 import ch.systemsx.cisd.openbis.generic.shared.basic.TechId;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Deletion;
 
@@ -38,6 +41,8 @@ public final class RevertDeletionConfirmationDialog extends
 
     private final AbstractAsyncCallback<Void> callback;
 
+    private final IEntityWithDeletionInformation deletedEntityOrNull;
+
     public RevertDeletionConfirmationDialog(IViewContext<ICommonClientServiceAsync> viewContext,
             List<Deletion> deletions, AbstractAsyncCallback<Void> callback)
     {
@@ -45,6 +50,7 @@ public final class RevertDeletionConfirmationDialog extends
                 .getMessage(Dict.REVERT_DELETIONS_CONFIRMATION_TITLE));
         this.viewContext = viewContext;
         this.callback = callback;
+        this.deletedEntityOrNull = null;
     }
 
     public RevertDeletionConfirmationDialog(IViewContext<ICommonClientServiceAsync> viewContext,
@@ -53,6 +59,16 @@ public final class RevertDeletionConfirmationDialog extends
         this(viewContext, Collections.singletonList(deletion), callback);
     }
 
+    public RevertDeletionConfirmationDialog(IViewContext<ICommonClientServiceAsync> viewContext,
+            IEntityWithDeletionInformation deletedEntity, AbstractAsyncCallback<Void> callback)
+    {
+        super(viewContext, Collections.singletonList(deletedEntity.getDeletion()), viewContext
+                .getMessage(Dict.REVERT_DELETIONS_CONFIRMATION_TITLE));
+        this.viewContext = viewContext;
+        this.callback = callback;
+        this.deletedEntityOrNull = deletedEntity;
+    }
+
     @Override
     protected void executeConfirmedAction()
     {
@@ -62,7 +78,22 @@ public final class RevertDeletionConfirmationDialog extends
     @Override
     protected String createMessage()
     {
-        return viewContext.getMessage(Dict.REVERT_DELETIONS_CONFIRMATION_MSG, data.size());
+        if (deletedEntityOrNull != null)
+        {
+            String deletedEntity =
+                    deletedEntityOrNull.getEntityKind().getDescription() + " '"
+                            + deletedEntityOrNull.getCode() + "'";
+            String deletedBy = deletedEntityOrNull.getDeletion().getRegistrator().toString();
+            String deletionDate =
+                    DateRenderer.renderDate(
+                            deletedEntityOrNull.getDeletion().getRegistrationDate(),
+                            BasicConstant.DATE_WITHOUT_TIMEZONE_PATTERN);
+            return viewContext.getMessage(Dict.REVERT_ENTITY_DELETION_CONFIRMATION_MSG,
+                    deletedEntity, deletedBy, deletionDate);
+        } else
+        {
+            return viewContext.getMessage(Dict.REVERT_DELETIONS_CONFIRMATION_MSG, data.size());
+        }
     }
 
     @Override
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/IEntityWithDeletionInformation.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/IEntityWithDeletionInformation.java
new file mode 100644
index 00000000000..1d4c5b4d92d
--- /dev/null
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/IEntityWithDeletionInformation.java
@@ -0,0 +1,25 @@
+/*
+ * Copyright 2008 ETH Zuerich, CISD
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package ch.systemsx.cisd.openbis.generic.shared.basic;
+
+/**
+ * @author Piotr Buczek
+ */
+public interface IEntityWithDeletionInformation extends IDeletionProvider,
+        IEntityInformationHolderWithIdentifier
+{
+}
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/Experiment.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/Experiment.java
index ea4b5161e2b..48eda19dfaa 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/Experiment.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/Experiment.java
@@ -20,8 +20,8 @@ import java.util.Date;
 import java.util.List;
 
 import ch.systemsx.cisd.openbis.generic.shared.basic.IAttachmentHolder;
-import ch.systemsx.cisd.openbis.generic.shared.basic.IDeletionProvider;
 import ch.systemsx.cisd.openbis.generic.shared.basic.IEntityInformationHolderWithProperties;
+import ch.systemsx.cisd.openbis.generic.shared.basic.IEntityWithDeletionInformation;
 import ch.systemsx.cisd.openbis.generic.shared.basic.IIdAndCodeHolder;
 import ch.systemsx.cisd.openbis.generic.shared.basic.IPermIdHolder;
 
@@ -30,8 +30,9 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.IPermIdHolder;
  * 
  * @author Tomasz Pylak
  */
-public class Experiment extends CodeWithRegistration<Experiment> implements IDeletionProvider,
-        IEntityInformationHolderWithProperties, IAttachmentHolder, IIdAndCodeHolder, IPermIdHolder
+public class Experiment extends CodeWithRegistration<Experiment> implements
+        IEntityWithDeletionInformation, IEntityInformationHolderWithProperties, IAttachmentHolder,
+        IIdAndCodeHolder, IPermIdHolder
 {
     private static final long serialVersionUID = ServiceVersionHolder.VERSION;
 
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/ExternalData.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/ExternalData.java
index 04fb69cd2a1..8c19450476b 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/ExternalData.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/ExternalData.java
@@ -22,8 +22,8 @@ import java.util.Date;
 import java.util.List;
 
 import ch.systemsx.cisd.openbis.generic.shared.basic.IEntityInformationHolderWithProperties;
+import ch.systemsx.cisd.openbis.generic.shared.basic.IEntityWithDeletionInformation;
 import ch.systemsx.cisd.openbis.generic.shared.basic.IIdAndCodeHolder;
-import ch.systemsx.cisd.openbis.generic.shared.basic.IDeletionProvider;
 import ch.systemsx.cisd.openbis.generic.shared.basic.IPermIdHolder;
 
 /**
@@ -32,7 +32,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.IPermIdHolder;
  * @author Christian Ribeaud
  */
 public class ExternalData extends CodeWithRegistration<ExternalData> implements
-        IDeletionProvider, IEntityInformationHolderWithProperties, IIdAndCodeHolder,
+        IEntityWithDeletionInformation, IEntityInformationHolderWithProperties, IIdAndCodeHolder,
         IPermIdHolder
 {
     private static final long serialVersionUID = ServiceVersionHolder.VERSION;
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/Sample.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/Sample.java
index 6963f57828d..3d6258632e3 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/Sample.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/Sample.java
@@ -25,8 +25,8 @@ import java.util.TreeSet;
 import ch.systemsx.cisd.common.annotation.CollectionMapping;
 import ch.systemsx.cisd.openbis.generic.shared.basic.IAttachmentHolder;
 import ch.systemsx.cisd.openbis.generic.shared.basic.IEntityInformationHolderWithProperties;
+import ch.systemsx.cisd.openbis.generic.shared.basic.IEntityWithDeletionInformation;
 import ch.systemsx.cisd.openbis.generic.shared.basic.IIdAndCodeHolder;
-import ch.systemsx.cisd.openbis.generic.shared.basic.IDeletionProvider;
 import ch.systemsx.cisd.openbis.generic.shared.basic.IPermIdHolder;
 
 /**
@@ -34,9 +34,9 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.IPermIdHolder;
  * 
  * @author Izabela Adamczyk
  */
-public final class Sample extends CodeWithRegistration<Sample> implements IDeletionProvider,
-        Comparable<Sample>, IEntityInformationHolderWithProperties, IAttachmentHolder,
-        IIdAndCodeHolder, IPermIdHolder
+public final class Sample extends CodeWithRegistration<Sample> implements
+        IEntityWithDeletionInformation, Comparable<Sample>, IEntityInformationHolderWithProperties,
+        IAttachmentHolder, IIdAndCodeHolder, IPermIdHolder
 {
     private static final long serialVersionUID = ServiceVersionHolder.VERSION;
 
@@ -315,11 +315,11 @@ public final class Sample extends CodeWithRegistration<Sample> implements IDelet
     {
         return "Sample [sampleType=" + sampleType + ", space=" + space + ", databaseInstance="
                 + databaseInstance + ", identifier=" + identifier + ", container=" + container
-                + ", parents=" + parents + ", properties=" + properties + ", deletion="
-                + deletion + ", experiment=" + experiment + ", id=" + id
-                + ", modificationDate=" + modificationDate + ", attachments=" + attachments
-                + ", permId=" + permId + ", permlink=" + permlink + ", searchlink=" + searchlink
-                + ", subCode=" + subCode + "]";
+                + ", parents=" + parents + ", properties=" + properties + ", deletion=" + deletion
+                + ", experiment=" + experiment + ", id=" + id + ", modificationDate="
+                + modificationDate + ", attachments=" + attachments + ", permId=" + permId
+                + ", permlink=" + permlink + ", searchlink=" + searchlink + ", subCode=" + subCode
+                + "]";
     }
 
     @Override
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/GenericDataSetViewer.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/GenericDataSetViewer.java
index 03fc68ce49e..978446159e9 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/GenericDataSetViewer.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/GenericDataSetViewer.java
@@ -43,6 +43,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.menu.Actio
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.menu.IActionMenuItem;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.AbstractViewerWithVerticalSplit;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.data.DataSetListDeletionConfirmationDialog;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.deletion.RevertDeletionConfirmationDialog;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.SectionsPanel;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.IDelegatedAction;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.IMessageProvider;
@@ -151,6 +152,14 @@ abstract public class GenericDataSetViewer extends AbstractViewerWithVerticalSpl
                 }
 
             }));
+        addToolBarButton(createRevertDeletionButton(new IDelegatedAction()
+            {
+                public void execute()
+                {
+                    new RevertDeletionConfirmationDialog(viewContext.getCommonViewContext(),
+                            getOriginalData(), createRevertDeletionCallback()).show();
+                }
+            }));
 
         addToolBarButton(processButtonHolder.getButton());
     }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/GenericExperimentViewer.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/GenericExperimentViewer.java
index 2245207bbd7..fb7bf8a7248 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/GenericExperimentViewer.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/GenericExperimentViewer.java
@@ -38,6 +38,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DisplayTypeIDGenerator;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.IDatabaseModificationObserver;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.AbstractViewerWithVerticalSplit;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.deletion.RevertDeletionConfirmationDialog;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.experiment.ExperimentListDeletionConfirmationDialog;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.IDisposableComponent;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.SectionsPanel;
@@ -132,6 +133,14 @@ public class GenericExperimentViewer extends AbstractViewerWithVerticalSplit<Exp
                             createDeletionCallback(), getOriginalData()).show();
                 }
             }));
+        addToolBarButton(createRevertDeletionButton(new IDelegatedAction()
+            {
+                public void execute()
+                {
+                    new RevertDeletionConfirmationDialog(viewContext.getCommonViewContext(),
+                            getOriginalData(), createRevertDeletionCallback()).show();
+                }
+            }));
     }
 
     @Override
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/GenericSampleViewer.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/GenericSampleViewer.java
index e3f9a6d0b76..8c568900d9f 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/GenericSampleViewer.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/GenericSampleViewer.java
@@ -48,6 +48,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.IDatabaseModificationObserver;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.AbstractViewerWithVerticalSplit;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.PropertyValueRenderers;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.deletion.RevertDeletionConfirmationDialog;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.property.PropertyGrid;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.sample.SampleListDeletionConfirmationDialog;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.ExternalHyperlink;
@@ -166,6 +167,14 @@ abstract public class GenericSampleViewer extends AbstractViewerWithVerticalSpli
                             createDeletionCallback(), getOriginalData()).show();
                 }
             }));
+        addToolBarButton(createRevertDeletionButton(new IDelegatedAction()
+            {
+                public void execute()
+                {
+                    new RevertDeletionConfirmationDialog(viewContext.getCommonViewContext(),
+                            getOriginalData(), createRevertDeletionCallback()).show();
+                }
+            }));
     }
 
     @Override
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/public/common-dictionary.js b/openbis/source/java/ch/systemsx/cisd/openbis/public/common-dictionary.js
index 6049e917309..c8c83d05c91 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/public/common-dictionary.js
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/public/common-dictionary.js
@@ -81,6 +81,7 @@ var common = {
   button_empty_trash: "Empty Trash",
   button_delete_permanently: "Delete Permanently",
   revert_deletions_confirmation_title: "Confirm Revert",
+  revert_entity_deletion_confirmation_msg: "Are you sure you want to revert deletion of {0}?</br></br><b>NOTE:</b> This will in fact revert deletion of all entities deleted together with {0} by {1} on {2}.",
   revert_deletions_confirmation_msg: "Are you sure you want to revert {0} selected deletion(s)?",
   permanent_deletions_confirmation_title: "Confirm Permanent Deletion",
   permanent_deletions_confirmation_msg: "Are you sure you want to <b>permanently</b> delete all entities that were moved to trash in selected {0} deletion(s)?</br></br>You can't undo this action.",
-- 
GitLab