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