From 89bed7b590ea7b501d3224b4dde42e2c8992a97d Mon Sep 17 00:00:00 2001 From: felmer <felmer> Date: Tue, 17 Mar 2009 08:53:19 +0000 Subject: [PATCH] LMS-778 Add reason text field and try to fix problem in HibernateSearchDAO for data set searches where search results contain deleted data sets. SVN: 10253 --- .../web/client/ICommonClientService.java | 2 +- .../web/client/ICommonClientServiceAsync.java | 4 +- .../ui/data/AbstractExternalDataGrid.java | 54 ++++++++++++------- .../web/server/CommonClientService.java | 4 +- .../openbis/generic/server/CommonServer.java | 4 +- .../generic/server/CommonServerLogger.java | 4 +- .../dataaccess/db/HibernateSearchDAO.java | 12 ++--- .../openbis/generic/shared/ICommonServer.java | 2 +- .../cisd/openbis/public/common-dictionary.js | 2 +- .../shared/ICommonServer.java.expected | 2 +- 10 files changed, 52 insertions(+), 38 deletions(-) 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 4a36bab7ae3..87c73759f25 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 @@ -364,6 +364,6 @@ public interface ICommonClientService extends IClientService throws UserFailureException; /** Deletes the specified data sets. */ - public void deleteDataSets(List<String> dataSetCodes) throws UserFailureException; + public void deleteDataSets(List<String> dataSetCodes, String reason) 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 cff6959039d..934e8abbe11 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 @@ -320,6 +320,6 @@ public interface ICommonClientServiceAsync extends IClientServiceAsync public void updateSample(final String sampleIdentifier, List<SampleProperty> properties, final AsyncCallback<Void> asyncCallback) throws UserFailureException; - /** @see ICommonClientService#deleteDataSets(List) */ - public void deleteDataSets(List<String> dataSetCodes, AsyncCallback<Void> asyncCallback); + /** @see ICommonClientService#deleteDataSets(List, String) */ + public void deleteDataSets(List<String> dataSetCodes, String reason, AsyncCallback<Void> asyncCallback); } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/AbstractExternalDataGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/AbstractExternalDataGrid.java index 75910ce195b..eb275269f49 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/AbstractExternalDataGrid.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/AbstractExternalDataGrid.java @@ -20,8 +20,12 @@ import java.util.ArrayList; import java.util.List; import com.extjs.gxt.ui.client.event.ButtonEvent; +import com.extjs.gxt.ui.client.event.ComponentEvent; +import com.extjs.gxt.ui.client.event.KeyListener; import com.extjs.gxt.ui.client.event.SelectionListener; +import com.extjs.gxt.ui.client.widget.Dialog; import com.extjs.gxt.ui.client.widget.button.Button; +import com.extjs.gxt.ui.client.widget.form.TextField; import com.extjs.gxt.ui.client.widget.toolbar.AdapterToolItem; import ch.systemsx.cisd.openbis.generic.client.web.client.ICommonClientServiceAsync; @@ -35,7 +39,6 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.columns import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.AbstractSimpleBrowserGrid; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.IBrowserGridActionInvoker; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.ICellListener; -import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.ConfirmationDialog; import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.DataSetUtils; import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExternalData; import ch.systemsx.cisd.openbis.generic.client.web.client.dto.IColumnDefinition; @@ -67,30 +70,19 @@ public abstract class AbstractExternalDataGrid extends AbstractSimpleBrowserGrid } } - private static final class DeletionConfirmationDialog extends ConfirmationDialog + private static final class DeletionConfirmationDialog extends Dialog { - - private static String render(List<ExternalData> dataSets) - { - StringBuilder builder = new StringBuilder(); - for (ExternalData externalData : dataSets) - { - builder.append("\n").append(externalData.getCode()); - } - return builder.toString(); - } - private final IViewContext<?> viewContext; private final List<String> dataSetCodes; private final IBrowserGridActionInvoker invoker; + private final TextField<String> reason; + public DeletionConfirmationDialog(IViewContext<?> viewContext, List<ExternalData> dataSets, IBrowserGridActionInvoker invoker) { - super(viewContext.getMessage(Dict.CONFIRM_DATASET_DELETION_TITLE), viewContext - .getMessage(Dict.CONFIRM_DATASET_DELETION_MSG, render(dataSets))); this.viewContext = viewContext; this.invoker = invoker; dataSetCodes = new ArrayList<String>(); @@ -98,14 +90,36 @@ public abstract class AbstractExternalDataGrid extends AbstractSimpleBrowserGrid { dataSetCodes.add(externalData.getCode()); } - setSize(400, 300); + setHeading(viewContext.getMessage(Dict.CONFIRM_DATASET_DELETION_TITLE)); + setButtons(Dialog.OKCANCEL); + addText(viewContext.getMessage(Dict.CONFIRM_DATASET_DELETION_MSG, dataSets.size())); + reason = new TextField<String>(); + reason.setSelectOnFocus(true); + reason.setHideLabel(true); + reason.setWidth("100%"); + reason.setMaxLength(250); + reason.addKeyListener(new KeyListener() + { + @Override + public void handleEvent(ComponentEvent ce) + { + okBtn.setEnabled(reason.isValid()); + } + }); + add(reason); + setHideOnButtonClick(true); + setModal(true); } - + @Override - protected void onYes() + protected void onButtonPressed(Button button) { - viewContext.getCommonService().deleteDataSets(dataSetCodes, - new DeletionCallback(viewContext, invoker)); + super.onButtonPressed(button); + if (button.getItemId().equals(Dialog.OK) && reason.isValid()) + { + viewContext.getCommonService().deleteDataSets(dataSetCodes, reason.getValue(), + new DeletionCallback(viewContext, invoker)); + } } } 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 a876e17d5da..d35fa5e82de 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 @@ -1015,13 +1015,13 @@ public final class CommonClientService extends AbstractClientService implements } - public void deleteDataSets(List<String> dataSetCodes) + public void deleteDataSets(List<String> dataSetCodes, String reason) throws ch.systemsx.cisd.openbis.generic.client.web.client.exception.UserFailureException { try { final String sessionToken = getSessionToken(); - commonServer.deleteDataSets(sessionToken, dataSetCodes); + commonServer.deleteDataSets(sessionToken, dataSetCodes, reason); } catch (final UserFailureException e) { throw UserFailureExceptionTranslator.translate(e); 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 6e320a8fa1f..6fc15a6082a 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 @@ -586,7 +586,7 @@ public final class CommonServer extends AbstractServer<ICommonServer> implements } } - public void deleteDataSets(String sessionToken, List<String> dataSetCodes) + public void deleteDataSets(String sessionToken, List<String> dataSetCodes, String reason) { Session session = getSessionManager().getSession(sessionToken); IExternalDataDAO externalDataDAO = getDAOFactory().getExternalDataDAO(); @@ -605,7 +605,7 @@ public final class CommonServer extends AbstractServer<ICommonServer> implements for (ExternalDataPE dataSet : dataSets) { - externalDataDAO.markAsDeleted(dataSet, session.tryGetPerson(), null); + externalDataDAO.markAsDeleted(dataSet, session.tryGetPerson(), reason); } Collection<DataStoreServerSession> sessions = dssSessionManager.getSessions(); for (DataStoreServerSession dssSession : sessions) 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 6ce8b04eb35..dc7e1cc8e11 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 @@ -318,9 +318,9 @@ final class CommonServerLogger extends AbstractServerLogger implements ICommonSe experimentIdentifier, attachments.size()); } - public void deleteDataSets(String sessionToken, List<String> dataSetCodes) + public void deleteDataSets(String sessionToken, List<String> dataSetCodes, String reason) { - logTracking(sessionToken, "delete_data_sets", "CODES(%s)", dataSetCodes); + logTracking(sessionToken, "delete_data_sets", "CODES(%s) REASON(%s)", dataSetCodes, reason); } public void editMaterial(String sessionToken, MaterialIdentifier identifier, diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/HibernateSearchDAO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/HibernateSearchDAO.java index 1778c6557b6..176f8b7de28 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/HibernateSearchDAO.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/HibernateSearchDAO.java @@ -355,24 +355,24 @@ final class HibernateSearchDAO extends HibernateDaoSupport implements IHibernate Criteria criteria = getSession().createCriteria(ExternalDataPE.class); criteria.add(Restrictions.eq("deleted", false)); - criteria.setFetchMode("parents", FetchMode.JOIN); criteria.setFetchMode("procedure", FetchMode.JOIN); criteria.setFetchMode("procedure.experimentInternal", FetchMode.JOIN); - criteria.setFetchMode("procedure.experimentInternal.experimentProperties", FetchMode.JOIN); hibernateQuery.setCriteriaQuery(criteria); List<ExternalDataPE> datasets = AbstractDAO.cast(hibernateQuery.list()); datasets = filterNulls(datasets); - // NOTE: there is a limit on the number of JOINs, so we have to initialize sample properties - // manually - initSamplesWithProperties(datasets); + // NOTE: there is a limit on the number of JOINs, so we have to initialize parents, + // experiment properties, and sample properties manually. + initParentsAndExperimentPropertiesAndSamplesWithProperties(datasets); return asDataSetHits(datasets); } - private void initSamplesWithProperties(List<ExternalDataPE> datasets) + private void initParentsAndExperimentPropertiesAndSamplesWithProperties(List<ExternalDataPE> datasets) { for (ExternalDataPE dataset : datasets) { + HibernateUtils.initialize(dataset.getParents()); + HibernateUtils.initialize(dataset.getProcedure().getExperiment().getProperties()); initSamplesWithProperties(dataset.getSampleAcquiredFrom()); initSamplesWithProperties(dataset.getSampleDerivedFrom()); } 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 5708300af35..48f017687e4 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 @@ -350,7 +350,7 @@ public interface ICommonServer extends IServer @RolesAllowed(RoleSet.GROUP_ADMIN) public void deleteDataSets(String sessionToken, @AuthorizationGuard(guardClass = DataSetCodePredicate.class) - List<String> dataSetCodes); + List<String> dataSetCodes, String reason); /** * Saves changed experiment. 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 db97336ccfb..8557ad9c1a0 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 @@ -233,7 +233,7 @@ var common = { data_producer_code: "Producer", button_delete_datasets: "Delete", confirm_dataset_deletion_title: "Data Sets Deletion Confirmation", - confirm_dataset_deletion_msg: "Do you really want to delete the following data sets?\n\n{0}", + confirm_dataset_deletion_msg: "You are deleting {0} data set(s). Please enter a reason:", // 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 2211632a44e..b61efa711ed 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 @@ -350,7 +350,7 @@ public interface ICommonServer extends IServer @RolesAllowed(RoleSet.GROUP_ADMIN) public void deleteDataSets(String sessionToken, @AuthorizationGuard(guardClass = DataSetCodePredicate.class) - List<String> dataSetCodes); + List<String> dataSetCodes, String reason); /** * Saves changed experiment. -- GitLab