diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/ICommonClientService.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/ICommonClientService.java index 1a5e4d67dd1ce1c2c396e48a46b6fec538e019e4..afbab8efcabdd745bbf3ce9a5243ae0cd5a143d3 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/ICommonClientService.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/ICommonClientService.java @@ -1094,4 +1094,9 @@ public interface ICommonClientService extends IClientService */ public void revertDeletions(List<TechId> deletionIds) throws UserFailureException; + /** + * Permanently deletes entities moved to trash with specified deletions. + */ + public void deletePermanently(List<TechId> deletionIds) throws UserFailureException; + } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/ICommonClientServiceAsync.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/ICommonClientServiceAsync.java index ed07e57e708830c2e4b005644f637050c083b828..d8c54c326535133da7ebd60ecad6cfcb4fa33863 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/ICommonClientServiceAsync.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/ICommonClientServiceAsync.java @@ -988,4 +988,9 @@ public interface ICommonClientServiceAsync extends IClientServiceAsync * @see ICommonClientService#revertDeletions(List) */ public void revertDeletions(List<TechId> deletionIds, AsyncCallback<Void> callback); + + /** + * @see ICommonClientService#deletePermanently(List) + */ + public void deletePermanently(List<TechId> deletionIds, AsyncCallback<Void> callback); } 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 4fd575c229f1bce96cb021cb865d1d63ebf68b2e..9fe8f0085b9372d3de4a38e368101b22a056874b 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 @@ -528,6 +528,12 @@ public abstract class Dict public static final String REVERT_DELETIONS_CONFIRMATION_MSG = "revert_deletions_confirmation_msg"; + public static final String PERMANENT_DELETIONS_CONFIRMATION_TITLE = + "permanent_deletions_confirmation_title"; + + public static final String PERMANENT_DELETIONS_CONFIRMATION_MSG = + "permanent_deletions_confirmation_msg"; + // // Sample Viewer // diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/deletion/DeletionGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/deletion/DeletionGrid.java index b71dcd557e83a75a04c522e811de37f70b043aba..38c8684d9b878c280ddc85971b71f55b7abcde4d 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/deletion/DeletionGrid.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/deletion/DeletionGrid.java @@ -21,7 +21,6 @@ import java.util.Arrays; import java.util.List; import com.extjs.gxt.ui.client.widget.Dialog; -import com.extjs.gxt.ui.client.widget.MessageBox; import com.extjs.gxt.ui.client.widget.button.Button; import com.google.gwt.user.client.rpc.AsyncCallback; @@ -31,7 +30,6 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.Dict; import ch.systemsx.cisd.openbis.generic.client.web.client.application.GenericConstants; import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext; import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DisplayTypeIDGenerator; -import ch.systemsx.cisd.openbis.generic.client.web.client.application.model.BaseEntityModel; import ch.systemsx.cisd.openbis.generic.client.web.client.application.renderer.PersonRenderer; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.TypedTableGrid; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.ColumnDefsAndConfigs; @@ -96,16 +94,21 @@ public class DeletionGrid extends TypedTableGrid<Deletion> addButton(revertButton); Button deletePermanentlyButton = - createSelectedItemButton( - viewContext.getMessage(Dict.BUTTON_DELETE_PERMANENTLY), - new ISelectedEntityInvoker<BaseEntityModel<TableModelRowWithObject<Deletion>>>() + createSelectedItemsButton(viewContext.getMessage(Dict.BUTTON_DELETE_PERMANENTLY), + new AbstractCreateDialogListener() { - public void invoke( - BaseEntityModel<TableModelRowWithObject<Deletion>> selectedItem, - boolean keyPressed) + @Override + protected Dialog createDialog( + List<TableModelRowWithObject<Deletion>> data, + IBrowserGridActionInvoker invoker) { - // TODO - MessageBox.info("Not implemented yet", "", null); + List<Deletion> deletions = new ArrayList<Deletion>(); + for (TableModelRowWithObject<Deletion> row : data) + { + deletions.add(row.getObjectOrNull()); + } + return new PermanentDeletionConfirmationDialog(viewContext, + deletions, createRefreshCallback(invoker)); } }); addButton(deletePermanentlyButton); diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/deletion/PermanentDeletionConfirmationDialog.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/deletion/PermanentDeletionConfirmationDialog.java new file mode 100644 index 0000000000000000000000000000000000000000..482f1eed040978aeaa2128aa1c141c9ceef12da2 --- /dev/null +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/deletion/PermanentDeletionConfirmationDialog.java @@ -0,0 +1,75 @@ +/* + * Copyright 2009 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.client.web.client.application.ui.deletion; + +import java.util.Collections; +import java.util.List; + +import ch.systemsx.cisd.openbis.generic.client.web.client.ICommonClientServiceAsync; +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.ui.widget.AbstractDataConfirmationDialog; +import ch.systemsx.cisd.openbis.generic.shared.basic.TechId; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Deletion; + +public final class PermanentDeletionConfirmationDialog extends + AbstractDataConfirmationDialog<List<Deletion>> +{ + private static final int LABEL_WIDTH = 60; + + private static final int FIELD_WIDTH = 180; + + private final IViewContext<ICommonClientServiceAsync> viewContext; + + private final AbstractAsyncCallback<Void> callback; + + public PermanentDeletionConfirmationDialog(IViewContext<ICommonClientServiceAsync> viewContext, + List<Deletion> deletions, AbstractAsyncCallback<Void> callback) + { + super(viewContext, deletions, viewContext + .getMessage(Dict.PERMANENT_DELETIONS_CONFIRMATION_TITLE)); + this.viewContext = viewContext; + this.callback = callback; + } + + public PermanentDeletionConfirmationDialog(IViewContext<ICommonClientServiceAsync> viewContext, + Deletion deletion, AbstractAsyncCallback<Void> callback) + { + this(viewContext, Collections.singletonList(deletion), callback); + } + + @Override + protected void executeConfirmedAction() + { + viewContext.getCommonService().deletePermanently(TechId.createList(data), callback); + } + + @Override + protected String createMessage() + { + return viewContext.getMessage(Dict.PERMANENT_DELETIONS_CONFIRMATION_MSG, data.size()); + } + + @Override + protected void extendForm() + { + formPanel.setLabelWidth(LABEL_WIDTH); + formPanel.setFieldWidth(FIELD_WIDTH); + } + +} diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/CommonClientService.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/CommonClientService.java index 84e179ae71d59580d8fd41d55de8a82cbaef6b62..5a4d82c164b90a71b37ae121958a88e5652cfcd3 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/CommonClientService.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/CommonClientService.java @@ -2220,4 +2220,10 @@ public final class CommonClientService extends AbstractClientService implements { commonServer.revertDeletions(getSessionToken(), deletionIds); } + + public void deletePermanently(List<TechId> deletionIds) + throws ch.systemsx.cisd.openbis.generic.client.web.client.exception.UserFailureException + { + commonServer.deletePermanently(getSessionToken(), deletionIds); + } } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServer.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServer.java index bf90fb63a04b47d260d851a825ac79dd1a4dd9fe..22d4c188cafabfe9dc7da41e470f380e46e4b737 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServer.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServer.java @@ -2404,6 +2404,14 @@ public final class CommonServer extends AbstractCommonServer<ICommonServerForInt } } + public final void deletePermanently(final String sessionToken, final List<TechId> deletionIds) + { + @SuppressWarnings("unused") + final Session session = getSession(sessionToken); + + throw new UserFailureException("This feature is not yet implemented."); + } + private static UserFailureException wrapExceptionWithEntityIdentifier( UserFailureException exception, IEntityInformationHolderWithIdentifier entity) { diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServerLogger.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServerLogger.java index 5a809f00862777dcf90473df00b5a40dd4d4718b..6e4d2741b5edb34e460f0d7e318126cecf0808f7 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServerLogger.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServerLogger.java @@ -1134,6 +1134,11 @@ final class CommonServerLogger extends AbstractServerLogger implements ICommonSe public void revertDeletions(String sessionToken, List<TechId> deletionIds) { - logTracking(sessionToken, "revertDeletions", "ID(%s)", deletionIds); + logTracking(sessionToken, "revertDeletions", "ID(%s)", abbreviate(deletionIds)); + } + + public void deletePermanently(String sessionToken, List<TechId> deletionIds) + { + logTracking(sessionToken, "deletePermanently", "ID(%s)", abbreviate(deletionIds)); } } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/ICommonServer.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/ICommonServer.java index 5bf5c02c3a16e6529cb2b0344d8c0982f4a74cd3..f59902aae10e03bb91300f1909d3f6066f35d837 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/ICommonServer.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/ICommonServer.java @@ -1444,7 +1444,7 @@ public interface ICommonServer extends IServer public List<Deletion> listDeletions(String sessionToken); /** - * Reverts specified deletion (puts back all objects moved to trash in the deletion). + * Reverts specified deletions (puts back all entities moved to trash in the deletions). */ @Transactional // TODO make it possible for deletion creator @@ -1454,4 +1454,12 @@ public interface ICommonServer extends IServer { ObjectKind.EXPERIMENT, ObjectKind.SAMPLE, ObjectKind.DATA_SET }) public void revertDeletions(final String sessionToken, final List<TechId> deletionIds); + /** + * Permanently deletes entities moved to trash in specified deletions. + */ + @Transactional + @RolesAllowed(RoleWithHierarchy.INSTANCE_ADMIN) + @DatabaseCreateOrDeleteModification(value = + { ObjectKind.DELETION, ObjectKind.EXPERIMENT, ObjectKind.SAMPLE, ObjectKind.DATA_SET }) + public void deletePermanently(final String sessionToken, final List<TechId> deletionIds); } 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 5aaed0ce026ee0701ec9c208b1c5597d349ded2b..f34ed83c3a1051d40f20e3f6acb939df79d76e8a 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 @@ -78,7 +78,9 @@ var common = { button_revert_deletion: "Revert", button_delete_permanently: "Delete Permanently", revert_deletions_confirmation_title: "Confirm Revert", - revert_deletions_confirmation_msg: "Are you sure you want to revert {0} deletion(s)?", + 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)?", // // Table Modifications diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/ICommonServer.java.expected b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/ICommonServer.java.expected index 5bf5c02c3a16e6529cb2b0344d8c0982f4a74cd3..f59902aae10e03bb91300f1909d3f6066f35d837 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/ICommonServer.java.expected +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/ICommonServer.java.expected @@ -1444,7 +1444,7 @@ public interface ICommonServer extends IServer public List<Deletion> listDeletions(String sessionToken); /** - * Reverts specified deletion (puts back all objects moved to trash in the deletion). + * Reverts specified deletions (puts back all entities moved to trash in the deletions). */ @Transactional // TODO make it possible for deletion creator @@ -1454,4 +1454,12 @@ public interface ICommonServer extends IServer { ObjectKind.EXPERIMENT, ObjectKind.SAMPLE, ObjectKind.DATA_SET }) public void revertDeletions(final String sessionToken, final List<TechId> deletionIds); + /** + * Permanently deletes entities moved to trash in specified deletions. + */ + @Transactional + @RolesAllowed(RoleWithHierarchy.INSTANCE_ADMIN) + @DatabaseCreateOrDeleteModification(value = + { ObjectKind.DELETION, ObjectKind.EXPERIMENT, ObjectKind.SAMPLE, ObjectKind.DATA_SET }) + public void deletePermanently(final String sessionToken, final List<TechId> deletionIds); }