From 27d4529e58de98c994ad9ac038aafa71172c4f8f Mon Sep 17 00:00:00 2001 From: buczekp <buczekp> Date: Tue, 12 Jul 2011 16:30:29 +0000 Subject: [PATCH] [LMS-2367] introduced simple trash gui + minor renaming (group->space) SVN: 22099 --- .../web/client/ICommonClientService.java | 15 ++ .../web/client/ICommonClientServiceAsync.java | 17 +- .../client/web/client/application/Dict.java | 6 + .../framework/ComponentProvider.java | 39 +++++ .../framework/DisplayTypeIDGenerator.java | 2 + .../web/client/application/menu/TopMenu.java | 2 +- .../administration/AdministrationMenu.java | 2 + .../application/ui/deletion/DeletionGrid.java | 163 ++++++++++++++++++ .../web/client/dto/DeletionGridColumnIDs.java | 34 ++++ .../web/server/CommonClientService.java | 17 ++ .../server/resultset/DeletionsProvider.java | 60 +++++++ .../openbis/generic/server/CommonServer.java | 25 ++- .../generic/server/CommonServerLogger.java | 6 + .../openbis/generic/server/ETLService.java | 6 +- ...{InvalidationDAO.java => DeletionDAO.java} | 3 +- .../db/HibernateSearchDataProvider.java | 4 +- .../openbis/generic/shared/ICommonServer.java | 23 ++- .../validator/DeletionValidator.java | 68 ++++++++ .../basic/dto/DatabaseModificationKind.java | 2 +- .../generic/shared/dto/DeletionPE.java | 11 +- .../shared/translator/DataSetTranslator.java | 2 +- .../shared/translator/DeletionTranslator.java | 13 ++ .../shared/translator/ProjectTranslator.java | 2 +- .../translator/RoleAssignmentTranslator.java | 2 +- .../shared/translator/SampleTranslator.java | 2 +- ...upTranslator.java => SpaceTranslator.java} | 28 +-- .../generic/server/CommonServerTest.java | 6 +- .../validator/GroupValidatorTest.java | 8 +- .../MatchingEntityValidatorTest.java | 4 +- 29 files changed, 522 insertions(+), 50 deletions(-) create mode 100644 openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/deletion/DeletionGrid.java create mode 100644 openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/DeletionGridColumnIDs.java create mode 100644 openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/DeletionsProvider.java rename openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/{InvalidationDAO.java => DeletionDAO.java} (98%) create mode 100644 openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/authorization/validator/DeletionValidator.java rename openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/{GroupTranslator.java => SpaceTranslator.java} (73%) 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 1581955c3a7..237890b965a 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 @@ -60,6 +60,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataStoreServiceKind; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatastoreServiceDescription; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Deletion; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DeletionType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DetailedSearchCriteria; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DynamicPropertyEvaluationInfo; @@ -347,6 +348,13 @@ public interface ICommonClientService extends IClientService DefaultResultSetConfig<String, TableModelRowWithObject<Project>> criteria) throws UserFailureException; + /** + * Returns a list of all deletions. + */ + public TypedTableResultSet<Deletion> listDeletions( + DefaultResultSetConfig<String, TableModelRowWithObject<Deletion>> criteria) + throws UserFailureException; + /** * Like {@link #prepareExportSamples(TableExportCriteria)}, but for projects. */ @@ -354,6 +362,13 @@ public interface ICommonClientService extends IClientService final TableExportCriteria<TableModelRowWithObject<Project>> criteria) throws UserFailureException; + /** + * Like {@link #prepareExportSamples(TableExportCriteria)}, but for deletions. + */ + public String prepareExportDeletions( + final TableExportCriteria<TableModelRowWithObject<Deletion>> criteria) + throws UserFailureException; + /** * Returns a list of all vocabularies. * <p> 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 77931500a18..045e0e58b99 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 @@ -62,6 +62,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataStoreServiceKind; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatastoreServiceDescription; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Deletion; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DeletionType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DetailedSearchCriteria; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DynamicPropertyEvaluationInfo; @@ -289,11 +290,21 @@ public interface ICommonClientServiceAsync extends IClientServiceAsync DefaultResultSetConfig<String, TableModelRowWithObject<Project>> criteria, final AsyncCallback<TypedTableResultSet<Project>> asyncCallback); + /** @see ICommonClientService#listDeletions(DefaultResultSetConfig) */ + public void listDeletions( + DefaultResultSetConfig<String, TableModelRowWithObject<Deletion>> criteria, + final AsyncCallback<TypedTableResultSet<Deletion>> asyncCallback); + /** @see ICommonClientService#prepareExportProjects(TableExportCriteria) */ public void prepareExportProjects( TableExportCriteria<TableModelRowWithObject<Project>> exportCriteria, AsyncCallback<String> callback); + /** @see ICommonClientService#prepareExportDeletions(TableExportCriteria) */ + public void prepareExportDeletions( + TableExportCriteria<TableModelRowWithObject<Deletion>> exportCriteria, + AsyncCallback<String> callback); + /** * @see ICommonClientService#listVocabularies(boolean, boolean, DefaultResultSetConfig) */ @@ -899,14 +910,16 @@ public interface ICommonClientServiceAsync extends IClientServiceAsync /** * @see ICommonClientService#listGridCustomColumns(String, DefaultResultSetConfig) */ - public void listGridCustomColumns(String gridId, + public void listGridCustomColumns( + String gridId, DefaultResultSetConfig<String, TableModelRowWithObject<GridCustomColumn>> resultSetConfig, AsyncCallback<TypedTableResultSet<GridCustomColumn>> callback); /** * @see ICommonClientService#prepareExportColumns(TableExportCriteria) */ - public void prepareExportColumns(final TableExportCriteria<TableModelRowWithObject<GridCustomColumn>> criteria, + public void prepareExportColumns( + final TableExportCriteria<TableModelRowWithObject<GridCustomColumn>> criteria, AsyncCallback<String> asyncCallback); /** @see ICommonClientService#registerColumn(NewColumnOrFilter) */ 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 fe3ba287f1f..c7f489f94b0 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 @@ -514,6 +514,12 @@ public abstract class Dict public static final String CANNOT_MODIFY_DELETED_ENTITY_MSG = "cannot_modify_deleted_entity_msg"; + public static final String DELETION_BROWSER = "deletion_browser"; + + public static final String BUTTON_REVERT_DELETION = "button_revert_deletion"; + + public static final String BUTTON_DELETE_PERMANENTLY = "button_delete_permanently"; + // // Sample Viewer // diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/ComponentProvider.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/ComponentProvider.java index 7664ceff605..326ca8e8905 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/ComponentProvider.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/ComponentProvider.java @@ -35,6 +35,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.data.Da import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.data.DataSetTypeGrid; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.data.DataSetUploadForm; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.data.FileFormatTypeGrid; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.deletion.DeletionGrid; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.experiment.ExperimentBatchRegistrationPanel; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.experiment.ExperimentBrowserGrid; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.experiment.ExperimentRegistrationPanel; @@ -953,6 +954,44 @@ public final class ComponentProvider }; } + public final AbstractTabItemFactory getDeletionBrowser() + { + return new AbstractTabItemFactory() + { + @Override + public ITabItem create() + { + IDisposableComponent component = DeletionGrid.create(viewContext); + return createTab(getTabTitle(), component); + } + + @Override + public String getId() + { + return DeletionGrid.BROWSER_ID; + } + + @Override + public HelpPageIdentifier getHelpPageIdentifier() + { + return HelpPageIdentifier.createSpecific(getMessage(Dict.DELETION_BROWSER)); + } + + @Override + public String getTabTitle() + { + return getMessage(Dict.DELETION_BROWSER); + } + + @Override + public String tryGetLink() + { + return null; + } + + }; + } + public AbstractTabItemFactory getExperimentBrowser(final String initialSpaceOrNull, final String initialProjectOrNull, final String initialExperimentTypeOrNull) { diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/DisplayTypeIDGenerator.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/DisplayTypeIDGenerator.java index 3b2075b08ac..19be3afc561 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/DisplayTypeIDGenerator.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/DisplayTypeIDGenerator.java @@ -48,6 +48,8 @@ public enum DisplayTypeIDGenerator implements IDisplayTypeIDGenerator PROJECT_BROWSER_GRID("project-browser-grid"), + DELETION_BROWSER_GRID("deletion-browser-grid"), + FILTER_BROWSER_GRID("filter-browser-grid"), CUSTOM_GRID_COLUMN_GRID("custom-grid-column-browser-grid"), diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/TopMenu.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/TopMenu.java index 67623d3a69f..8dcf4440cf9 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/TopMenu.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/TopMenu.java @@ -55,7 +55,7 @@ public class TopMenu extends LayoutContainer AUTHORIZATION_MENU_USERS, AUTHORIZATION_MENU_ROLES, AUTHORIZATION_MENU_AUTHORIZATION_GROUPS, - LOGGING_CONSOLE, + TRASH, LOGGING_CONSOLE, DATA_SET_MENU_SEARCH, DATA_SET_MENU_TYPES, DATA_SET_MENU_FILE_FORMATS, DATA_SET_MENU_UPLOAD, DATA_SET_MENU_UPLOAD_CLIENT, DATA_SET_MENU_MASS_UPDATE, diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/administration/AdministrationMenu.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/administration/AdministrationMenu.java index e20df7990c3..2623232c722 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/administration/AdministrationMenu.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/administration/AdministrationMenu.java @@ -51,6 +51,8 @@ public class AdministrationMenu extends TopMenuItem submenu.add(new AuthorizationMenu(messageProvider, componentProvider)); submenu.add(new ActionMenu(TopMenu.ActionMenuKind.DATA_SET_MENU_FILE_FORMATS, messageProvider, componentProvider.getFileFormatTypeBrowser())); + submenu.add(new ActionMenu(TopMenu.ActionMenuKind.TRASH, messageProvider, componentProvider + .getDeletionBrowser())); if (viewContext.isLoggingEnabled()) { submenu.add(new ActionMenu(TopMenu.ActionMenuKind.LOGGING_CONSOLE, messageProvider, 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 new file mode 100644 index 00000000000..0687e35f454 --- /dev/null +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/deletion/DeletionGrid.java @@ -0,0 +1,163 @@ +/* + * 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.Arrays; +import java.util.List; + +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; + +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.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; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.IDisposableComponent; +import ch.systemsx.cisd.openbis.generic.client.web.client.dto.DefaultResultSetConfig; +import ch.systemsx.cisd.openbis.generic.client.web.client.dto.DeletionGridColumnIDs; +import ch.systemsx.cisd.openbis.generic.client.web.client.dto.TableExportCriteria; +import ch.systemsx.cisd.openbis.generic.client.web.client.dto.TypedTableResultSet; +import ch.systemsx.cisd.openbis.generic.client.web.client.exception.UserFailureException; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseModificationKind; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseModificationKind.ObjectKind; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Deletion; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TableModelRowWithObject; + +/** + * Grid displaying deletions. + * + * @author Piotr Buczek + */ +public class DeletionGrid extends TypedTableGrid<Deletion> +{ + // browser consists of the grid and the paging toolbar + public static final String BROWSER_ID = GenericConstants.ID_PREFIX + "deletion-browser"; + + public static final String GRID_ID = BROWSER_ID + TypedTableGrid.GRID_POSTFIX; + + public static IDisposableComponent create( + final IViewContext<ICommonClientServiceAsync> viewContext) + { + final DeletionGrid grid = new DeletionGrid(viewContext); + grid.extendBottomToolbar(); + return grid.asDisposableWithoutToolbar(); + } + + private DeletionGrid(IViewContext<ICommonClientServiceAsync> viewContext) + { + super(viewContext, BROWSER_ID, true, DisplayTypeIDGenerator.DELETION_BROWSER_GRID); + } + + private void extendBottomToolbar() + { + addEntityOperationsLabel(); + + Button revertButton = + createSelectedItemButton( + viewContext.getMessage(Dict.BUTTON_REVERT_DELETION), + new ISelectedEntityInvoker<BaseEntityModel<TableModelRowWithObject<Deletion>>>() + { + public void invoke( + BaseEntityModel<TableModelRowWithObject<Deletion>> selectedItem, + boolean keyPressed) + { + // TODO + MessageBox.info("Not implemented yet", "", null); + } + }); + addButton(revertButton); + + Button deletePermanentlyButton = + createSelectedItemButton( + viewContext.getMessage(Dict.BUTTON_DELETE_PERMANENTLY), + new ISelectedEntityInvoker<BaseEntityModel<TableModelRowWithObject<Deletion>>>() + { + public void invoke( + BaseEntityModel<TableModelRowWithObject<Deletion>> selectedItem, + boolean keyPressed) + { + // TODO + MessageBox.info("Not implemented yet", "", null); + } + }); + addButton(deletePermanentlyButton); + allowMultipleSelection(); // we allow deletion/revert of multiple deletions + + addEntityOperationsSeparator(); + } + + @Override + protected String translateColumnIdToDictionaryKey(String columnID) + { + return columnID.toLowerCase(); + } + + @Override + protected ColumnDefsAndConfigs<TableModelRowWithObject<Deletion>> createColumnsDefinition() + { + ColumnDefsAndConfigs<TableModelRowWithObject<Deletion>> schema = + super.createColumnsDefinition(); + schema.setGridCellRendererFor(DeletionGridColumnIDs.REASON, + createMultilineStringCellRenderer()); + schema.setGridCellRendererFor(DeletionGridColumnIDs.REGISTRATOR, + PersonRenderer.REGISTRATOR_RENDERER); + return schema; + } + + @Override + protected void listTableRows( + DefaultResultSetConfig<String, TableModelRowWithObject<Deletion>> resultSetConfig, + AsyncCallback<TypedTableResultSet<Deletion>> callback) + { + viewContext.getService().listDeletions(resultSetConfig, callback); + } + + @Override + protected void prepareExportEntities( + TableExportCriteria<TableModelRowWithObject<Deletion>> exportCriteria, + AbstractAsyncCallback<String> callback) + { + viewContext.getService().prepareExportDeletions(exportCriteria, callback); + } + + @Override + protected List<String> getColumnIdsOfFilters() + { + return Arrays.asList(DeletionGridColumnIDs.REGISTRATOR, DeletionGridColumnIDs.REASON); + } + + @Override + protected void showEntityViewer(final TableModelRowWithObject<Deletion> row, boolean editMode, + boolean inBackground) + { + throw new UserFailureException("Operation is not supported."); + } + + @Override + public DatabaseModificationKind[] getRelevantModifications() + { + return new DatabaseModificationKind[] + { DatabaseModificationKind.createOrDelete(ObjectKind.DELETION) }; + } +} diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/DeletionGridColumnIDs.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/DeletionGridColumnIDs.java new file mode 100644 index 00000000000..97683c8beb5 --- /dev/null +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/DeletionGridColumnIDs.java @@ -0,0 +1,34 @@ +/* + * Copyright 2011 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.dto; + +import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.deletion.DeletionGrid; + +/** + * IDs of column of {@link DeletionGrid}. + * + * @author Piotr Buczek + */ +public class DeletionGridColumnIDs +{ + public static final String REASON = "REASON"; + + public static final String REGISTRATOR = "REGISTRATOR"; + + public static final String REGISTRATION_DATE = "REGISTRATION_DATE"; + +} 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 54af012ef0f..12e5b0036f2 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 @@ -72,6 +72,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.server.resultset.Authorizatio import ch.systemsx.cisd.openbis.generic.client.web.server.resultset.CacheManager; import ch.systemsx.cisd.openbis.generic.client.web.server.resultset.CustomGridColumnProvider; import ch.systemsx.cisd.openbis.generic.client.web.server.resultset.DataSetTypeProvider; +import ch.systemsx.cisd.openbis.generic.client.web.server.resultset.DeletionsProvider; import ch.systemsx.cisd.openbis.generic.client.web.server.resultset.EntityTypeProvider; import ch.systemsx.cisd.openbis.generic.client.web.server.resultset.ExperimentProvider; import ch.systemsx.cisd.openbis.generic.client.web.server.resultset.FileFormatTypesProvider; @@ -118,6 +119,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetTypePropertyType import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataStoreServiceKind; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatastoreServiceDescription; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Deletion; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DeletionType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DetailedSearchCriteria; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DynamicPropertyEvaluationInfo; @@ -400,6 +402,12 @@ public final class CommonClientService extends AbstractClientService implements return prepareExportEntities(criteria); } + public String prepareExportDeletions( + TableExportCriteria<TableModelRowWithObject<Deletion>> criteria) + { + return prepareExportEntities(criteria); + } + public String prepareExportVocabularies( final TableExportCriteria<TableModelRowWithObject<Vocabulary>> criteria) { @@ -661,6 +669,15 @@ public final class CommonClientService extends AbstractClientService implements return listEntities(projectsProvider, criteria); } + public TypedTableResultSet<Deletion> listDeletions( + DefaultResultSetConfig<String, TableModelRowWithObject<Deletion>> criteria) + throws ch.systemsx.cisd.openbis.generic.client.web.client.exception.UserFailureException + { + DeletionsProvider deletionsProvider = + new DeletionsProvider(commonServer, getSessionToken()); + return listEntities(deletionsProvider, criteria); + } + public TypedTableResultSet<Vocabulary> listVocabularies(boolean withTerms, boolean excludeInternal, DefaultResultSetConfig<String, TableModelRowWithObject<Vocabulary>> criteria) diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/DeletionsProvider.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/DeletionsProvider.java new file mode 100644 index 00000000000..11ec9dbc909 --- /dev/null +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/DeletionsProvider.java @@ -0,0 +1,60 @@ +/* + * Copyright 2011 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.server.resultset; + +import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.DeletionGridColumnIDs.REASON; +import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.DeletionGridColumnIDs.REGISTRATION_DATE; +import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.DeletionGridColumnIDs.REGISTRATOR; + +import java.util.List; + +import ch.systemsx.cisd.openbis.generic.shared.ICommonServer; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Deletion; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TypedTableModel; +import ch.systemsx.cisd.openbis.generic.shared.util.TypedTableModelBuilder; + +/** + * Table model provider of {@link Deletion} instances. + * + * @author Piotr Buczek + */ +public class DeletionsProvider extends AbstractCommonTableModelProvider<Deletion> +{ + public DeletionsProvider(ICommonServer commonServer, String sessionToken) + { + super(commonServer, sessionToken); + } + + @Override + protected TypedTableModel<Deletion> createTableModel() + { + List<Deletion> deletions = commonServer.listDeletions(sessionToken); + TypedTableModelBuilder<Deletion> builder = new TypedTableModelBuilder<Deletion>(); + builder.addColumn(REGISTRATION_DATE).withDefaultWidth(300); + builder.addColumn(REGISTRATOR).withDefaultWidth(200); + builder.addColumn(REASON).withDefaultWidth(500); + for (Deletion deletion : deletions) + { + builder.addRow(deletion); + builder.column(REGISTRATION_DATE).addDate(deletion.getRegistrationDate()); + builder.column(REGISTRATOR).addPerson(deletion.getRegistrator()); + builder.column(REASON).addString(deletion.getReason()); + } + return builder.getModel(); + } + +} 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 91f8738751d..47c0c90045a 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 @@ -103,6 +103,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataStoreServiceKind; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatastoreServiceDescription; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DeletedDataSet; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Deletion; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DeletionType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DetailedSearchCriteria; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DynamicPropertyEvaluationInfo; @@ -173,6 +174,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.DataStorePE; import ch.systemsx.cisd.openbis.generic.shared.dto.DataStoreServicePE; import ch.systemsx.cisd.openbis.generic.shared.dto.DataTypePE; import ch.systemsx.cisd.openbis.generic.shared.dto.DatabaseInstancePE; +import ch.systemsx.cisd.openbis.generic.shared.dto.DeletionPE; import ch.systemsx.cisd.openbis.generic.shared.dto.EntityPropertyPE; import ch.systemsx.cisd.openbis.generic.shared.dto.EntityTypePE; import ch.systemsx.cisd.openbis.generic.shared.dto.EntityTypePropertyTypePE; @@ -216,10 +218,10 @@ import ch.systemsx.cisd.openbis.generic.shared.translator.DataSetTranslator; import ch.systemsx.cisd.openbis.generic.shared.translator.DataSetTypeTranslator; import ch.systemsx.cisd.openbis.generic.shared.translator.DataStoreServiceTranslator; import ch.systemsx.cisd.openbis.generic.shared.translator.DataTypeTranslator; +import ch.systemsx.cisd.openbis.generic.shared.translator.DeletionTranslator; import ch.systemsx.cisd.openbis.generic.shared.translator.DtoConverters; import ch.systemsx.cisd.openbis.generic.shared.translator.ExperimentTranslator; import ch.systemsx.cisd.openbis.generic.shared.translator.GridCustomExpressionTranslator.GridCustomFilterTranslator; -import ch.systemsx.cisd.openbis.generic.shared.translator.GroupTranslator; import ch.systemsx.cisd.openbis.generic.shared.translator.MaterialTranslator; import ch.systemsx.cisd.openbis.generic.shared.translator.MaterialTypeTranslator; import ch.systemsx.cisd.openbis.generic.shared.translator.PersonTranslator; @@ -229,6 +231,7 @@ import ch.systemsx.cisd.openbis.generic.shared.translator.RoleAssignmentTranslat import ch.systemsx.cisd.openbis.generic.shared.translator.SampleTranslator; import ch.systemsx.cisd.openbis.generic.shared.translator.SampleTypeTranslator; import ch.systemsx.cisd.openbis.generic.shared.translator.ScriptTranslator; +import ch.systemsx.cisd.openbis.generic.shared.translator.SpaceTranslator; import ch.systemsx.cisd.openbis.generic.shared.translator.TypeTranslator; import ch.systemsx.cisd.openbis.generic.shared.translator.VocabularyTermTranslator; import ch.systemsx.cisd.openbis.generic.shared.translator.VocabularyTranslator; @@ -306,20 +309,28 @@ public final class CommonServer extends AbstractCommonServer<ICommonServerForInt // IGenericServer // + public final List<Deletion> listDeletions(final String sessionToken) + { + checkSession(sessionToken); + final List<DeletionPE> deletions = getDAOFactory().getDeletionDAO().listAllEntities(); + Collections.sort(deletions); + return DeletionTranslator.translate(deletions); + } + public final List<Space> listSpaces(final String sessionToken, final DatabaseInstanceIdentifier identifier) { final Session session = getSession(sessionToken); final DatabaseInstancePE databaseInstance = GroupIdentifierHelper.getDatabaseInstance(identifier, getDAOFactory()); - final List<SpacePE> groups = getDAOFactory().getSpaceDAO().listSpaces(databaseInstance); - final SpacePE homeGroupOrNull = session.tryGetHomeGroup(); - for (final SpacePE group : groups) + final List<SpacePE> spaces = getDAOFactory().getSpaceDAO().listSpaces(databaseInstance); + final SpacePE homeSpaceOrNull = session.tryGetHomeGroup(); + for (final SpacePE space : spaces) { - group.setHome(group.equals(homeGroupOrNull)); + space.setHome(space.equals(homeSpaceOrNull)); } - Collections.sort(groups); - return GroupTranslator.translate(groups); + Collections.sort(spaces); + return SpaceTranslator.translate(spaces); } public final void registerSpace(final String sessionToken, final String spaceCode, 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 0f9a000dce0..dda316c338b 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 @@ -41,6 +41,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetUpdateResult; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataStoreServiceKind; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatastoreServiceDescription; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Deletion; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DeletionType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DetailedSearchCriteria; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DynamicPropertyEvaluationInfo; @@ -1125,4 +1126,9 @@ final class CommonServerLogger extends AbstractServerLogger implements ICommonSe return null; } + public List<Deletion> listDeletions(String sessionToken) + { + logAccess(sessionToken, "listDeletions"); + return null; + } } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ETLService.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ETLService.java index 76781234873..f2cc86e2880 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ETLService.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ETLService.java @@ -154,7 +154,7 @@ import ch.systemsx.cisd.openbis.generic.shared.translator.EntityPropertyTranslat import ch.systemsx.cisd.openbis.generic.shared.translator.ExperimentTranslator; import ch.systemsx.cisd.openbis.generic.shared.translator.ExperimentTranslator.LoadableFields; import ch.systemsx.cisd.openbis.generic.shared.translator.ExperimentTypeTranslator; -import ch.systemsx.cisd.openbis.generic.shared.translator.GroupTranslator; +import ch.systemsx.cisd.openbis.generic.shared.translator.SpaceTranslator; import ch.systemsx.cisd.openbis.generic.shared.translator.MaterialTranslator; import ch.systemsx.cisd.openbis.generic.shared.translator.PersonTranslator; import ch.systemsx.cisd.openbis.generic.shared.translator.ProjectTranslator; @@ -1099,7 +1099,7 @@ public class ETLService extends AbstractCommonServer<IETLLIMSService> implements try { groupBO.load(identifier); - return GroupTranslator.translate(groupBO.getGroup()); + return SpaceTranslator.translate(groupBO.getGroup()); } catch (UserFailureException ufe) { // space does not exist @@ -1173,7 +1173,7 @@ public class ETLService extends AbstractCommonServer<IETLLIMSService> implements registerSpaceInternal(session, newSpace, operationDetails.tryUserIdOrNull()); spacePEsCreated.add(spacePE); } - return GroupTranslator.translate(spacePEsCreated); + return SpaceTranslator.translate(spacePEsCreated); } private List<Material> createMaterials(Session session, diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/InvalidationDAO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/DeletionDAO.java similarity index 98% rename from openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/InvalidationDAO.java rename to openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/DeletionDAO.java index af281fe5d73..ff6713ec3fd 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/InvalidationDAO.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/DeletionDAO.java @@ -33,8 +33,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.DeletionPE; * * @author Christian Ribeaud */ -final class DeletionDAO extends AbstractGenericEntityDAO<DeletionPE> implements - IDeletionDAO +final class DeletionDAO extends AbstractGenericEntityDAO<DeletionPE> implements IDeletionDAO { /** diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/HibernateSearchDataProvider.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/HibernateSearchDataProvider.java index 2f78138485b..00c94c0bb6e 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/HibernateSearchDataProvider.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/HibernateSearchDataProvider.java @@ -23,7 +23,7 @@ import java.util.Map; import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDAOFactory; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Space; import ch.systemsx.cisd.openbis.generic.shared.dto.SpacePE; -import ch.systemsx.cisd.openbis.generic.shared.translator.GroupTranslator; +import ch.systemsx.cisd.openbis.generic.shared.translator.SpaceTranslator; /** * Encapsulates data provided to {@link HibernateSearchDAO} by other DAOs. @@ -40,7 +40,7 @@ public class HibernateSearchDataProvider groupsById = new HashMap<String, Space>(); for (SpacePE group : groups) { - groupsById.put(group.getId().toString(), GroupTranslator.translate(group)); + groupsById.put(group.getId().toString(), SpaceTranslator.translate(group)); } } 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 7a9be171bec..8d2ed5673eb 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 @@ -45,6 +45,7 @@ import ch.systemsx.cisd.openbis.generic.shared.authorization.predicate.SampleTec import ch.systemsx.cisd.openbis.generic.shared.authorization.predicate.SampleTechIdPredicate; import ch.systemsx.cisd.openbis.generic.shared.authorization.predicate.SampleUpdatesPredicate; import ch.systemsx.cisd.openbis.generic.shared.authorization.predicate.SpaceIdentifierPredicate; +import ch.systemsx.cisd.openbis.generic.shared.authorization.validator.DeletionValidator; import ch.systemsx.cisd.openbis.generic.shared.authorization.validator.ExpressionValidator; import ch.systemsx.cisd.openbis.generic.shared.authorization.validator.ExternalDataValidator; import ch.systemsx.cisd.openbis.generic.shared.authorization.validator.MatchingEntityValidator; @@ -68,6 +69,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataStoreServiceKind; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseModificationKind.ObjectKind; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatastoreServiceDescription; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Deletion; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DeletionType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DetailedSearchCriteria; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DynamicPropertyEvaluationInfo; @@ -159,7 +161,7 @@ public interface ICommonServer extends IServer EntityKind entityKindOrNull); /** - * Returns all spaces which belong to the specified database instance. * + * Returns deletions which belong to the specified database instance. * * * @return a sorted list of {@link Space}. */ @@ -753,7 +755,8 @@ public interface ICommonServer extends IServer */ @Transactional @RolesAllowed(RoleWithHierarchy.SPACE_POWER_USER) - @DatabaseCreateOrDeleteModification(value = ObjectKind.DATA_SET) + @DatabaseCreateOrDeleteModification(value = + { ObjectKind.DATA_SET, ObjectKind.DELETION }) public void deleteDataSets(String sessionToken, @AuthorizationGuard(guardClass = DataSetCodePredicate.class) List<String> dataSetCodes, String reason, DeletionType type); @@ -763,7 +766,8 @@ public interface ICommonServer extends IServer */ @Transactional @RolesAllowed(RoleWithHierarchy.SPACE_POWER_USER) - @DatabaseCreateOrDeleteModification(value = ObjectKind.SAMPLE) + @DatabaseCreateOrDeleteModification(value = + { ObjectKind.SAMPLE, ObjectKind.DELETION }) public void deleteSamples( String sessionToken, @AuthorizationGuard(guardClass = SampleTechIdCollectionPredicate.class) List<TechId> sampleIds, @@ -774,7 +778,8 @@ public interface ICommonServer extends IServer */ @Transactional @RolesAllowed(RoleWithHierarchy.SPACE_POWER_USER) - @DatabaseCreateOrDeleteModification(value = ObjectKind.EXPERIMENT) + @DatabaseCreateOrDeleteModification(value = + { ObjectKind.EXPERIMENT, ObjectKind.DELETION }) public void deleteExperiments( String sessionToken, @AuthorizationGuard(guardClass = ExperimentTechIdPredicate.class) List<TechId> experimentIds, @@ -1424,4 +1429,14 @@ public interface ICommonServer extends IServer public void updateMaterialProperties(String sessionToken, TechId entityId, List<PropertyUpdates> modifiedProperties); + /** + * Returns all deletions. + * + * @return a sorted list of {@link Deletion}. + */ + @Transactional(readOnly = true) + @RolesAllowed(RoleWithHierarchy.SPACE_USER) + @ReturnValueFilter(validatorClass = DeletionValidator.class) + public List<Deletion> listDeletions(String sessionToken); + } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/authorization/validator/DeletionValidator.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/authorization/validator/DeletionValidator.java new file mode 100644 index 00000000000..ca764177d9d --- /dev/null +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/authorization/validator/DeletionValidator.java @@ -0,0 +1,68 @@ +/* + * 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.authorization.validator; + +import java.util.Set; + +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Deletion; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Person; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.RoleWithHierarchy.RoleCode; +import ch.systemsx.cisd.openbis.generic.shared.dto.DatabaseInstancePE; +import ch.systemsx.cisd.openbis.generic.shared.dto.PersonPE; +import ch.systemsx.cisd.openbis.generic.shared.dto.RoleAssignmentPE; + +/** + * A {@link IValidator} implementation for a {@link Deletion}. + * + * @author Izabela Adamczyk + */ +public final class DeletionValidator extends AbstractValidator<Deletion> +{ + // + // IValidator + // + + @Override + public final boolean doValidation(final PersonPE person, final Deletion value) + { + // only creator of deletion and instance admin can see it + return isRegistrator(person, value) || isInstanceAdmin(person); + } + + private boolean isRegistrator(final PersonPE person, final Deletion value) + { + Person registrator = value.getRegistrator(); + return person.getUserId().equals(registrator.getUserId()) + && person.getDatabaseInstance().getCode() + .equals(registrator.getDatabaseInstance().getCode()); + } + + private static boolean isInstanceAdmin(final PersonPE person) + { + final Set<RoleAssignmentPE> roleAssignments = person.getAllPersonRoles(); + for (final RoleAssignmentPE roleAssignment : roleAssignments) + { + final DatabaseInstancePE roleInstance = roleAssignment.getDatabaseInstance(); + if (roleInstance != null && roleAssignment.getRole().equals(RoleCode.ADMIN)) + { + return true; + } + } + return false; + } + +} diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/DatabaseModificationKind.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/DatabaseModificationKind.java index ff0fb026984..a2c14cd880c 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/DatabaseModificationKind.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/DatabaseModificationKind.java @@ -40,7 +40,7 @@ public class DatabaseModificationKind implements ISerializable AUTHORIZATION_GROUP, SAMPLE, EXPERIMENT, MATERIAL, DATA_SET, SAMPLE_TYPE, EXPERIMENT_TYPE, MATERIAL_TYPE, DATASET_TYPE, FILE_FORMAT_TYPE, PROJECT, SPACE, PROPERTY_TYPE, PROPERTY_TYPE_ASSIGNMENT, VOCABULARY, VOCABULARY_TERM, ROLE_ASSIGNMENT, PERSON, - GRID_CUSTOM_FILTER, GRID_CUSTOM_COLUMN, SCRIPT, + GRID_CUSTOM_FILTER, GRID_CUSTOM_COLUMN, SCRIPT, DELETION, // TODO 2010-02-19, PTR: no easy way to extend current modification notification solution in // modules QUERY diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/DeletionPE.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/DeletionPE.java index acf01af7d9f..074a474e733 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/DeletionPE.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/DeletionPE.java @@ -43,7 +43,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.IIdHolder; @Entity @Table(name = TableNames.DELETIONS_TABLE) public class DeletionPE extends HibernateAbstractRegistrationHolder implements IIdHolder, - Serializable + Serializable, Comparable<DeletionPE> { private static final long serialVersionUID = IServer.VERSION; @@ -106,4 +106,13 @@ public class DeletionPE extends HibernateAbstractRegistrationHolder implements I return ToStringBuilder.reflectionToString(this, ModifiedShortPrefixToStringStyle.MODIFIED_SHORT_PREFIX_STYLE); } + + // + // Comparable - registration date based + // + + public final int compareTo(final DeletionPE o) + { + return this.getRegistrationDate().compareTo(o.getRegistrationDate()); + } } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/DataSetTranslator.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/DataSetTranslator.java index 8c983621afb..0a0d867e6c6 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/DataSetTranslator.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/DataSetTranslator.java @@ -234,7 +234,7 @@ public class DataSetTranslator sample.setIdentifier(samplePE.getSampleIdentifier().toString()); sample.setRegistrationDate(samplePE.getRegistrationDate()); sample.setRegistrator(PersonTranslator.translate(samplePE.getRegistrator())); - sample.setSpace(GroupTranslator.translate(samplePE.getSpace())); + sample.setSpace(SpaceTranslator.translate(samplePE.getSpace())); if (loadSampleProperties) { sample.setProperties(EntityPropertyTranslator.translate(samplePE.getProperties(), diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/DeletionTranslator.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/DeletionTranslator.java index aa5a8f8f16d..09e8eb1d8a3 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/DeletionTranslator.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/DeletionTranslator.java @@ -16,6 +16,9 @@ package ch.systemsx.cisd.openbis.generic.shared.translator; +import java.util.ArrayList; +import java.util.List; + import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Deletion; import ch.systemsx.cisd.openbis.generic.shared.dto.DeletionPE; @@ -32,6 +35,16 @@ public final class DeletionTranslator // Can not be instantiated. } + public final static List<Deletion> translate(final List<DeletionPE> deletions) + { + final List<Deletion> result = new ArrayList<Deletion>(); + for (final DeletionPE deletion : deletions) + { + result.add(translate(deletion)); + } + return result; + } + public final static Deletion translate(final DeletionPE deletion) { if (deletion == null) diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/ProjectTranslator.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/ProjectTranslator.java index 457ea9f2260..994388cd2df 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/ProjectTranslator.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/ProjectTranslator.java @@ -61,7 +61,7 @@ public final class ProjectTranslator result.setModificationDate(project.getModificationDate()); result.setCode(project.getCode()); result.setDescription(project.getDescription()); - result.setSpace(GroupTranslator.translate(project.getSpace())); + result.setSpace(SpaceTranslator.translate(project.getSpace())); result.setProjectLeader(PersonTranslator.translate(project.getProjectLeader())); result.setRegistrator(PersonTranslator.translate(project.getRegistrator())); result.setRegistrationDate(project.getRegistrationDate()); diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/RoleAssignmentTranslator.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/RoleAssignmentTranslator.java index 6409fd7a7dc..3bb46d41df4 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/RoleAssignmentTranslator.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/RoleAssignmentTranslator.java @@ -53,7 +53,7 @@ public final class RoleAssignmentTranslator return null; } final RoleAssignment result = new RoleAssignment(); - result.setSpace(GroupTranslator.translate(role.getSpace())); + result.setSpace(SpaceTranslator.translate(role.getSpace())); result.setInstance(DatabaseInstanceTranslator.translate(role.getDatabaseInstance())); result.setPerson(PersonTranslator.translate(role.getPerson())); result.setAuthorizationGroup(AuthorizationGroupTranslator.translate(role diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/SampleTranslator.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/SampleTranslator.java index b3eca0dbc92..8baf9591748 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/SampleTranslator.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/SampleTranslator.java @@ -99,7 +99,7 @@ public final class SampleTranslator new HashMap<PropertyTypePE, PropertyType>())); if (withDetails) { - result.setSpace(GroupTranslator.translate(samplePE.getSpace())); + result.setSpace(SpaceTranslator.translate(samplePE.getSpace())); result.setDatabaseInstance(DatabaseInstanceTranslator.translate(samplePE .getDatabaseInstance())); result.setRegistrator(PersonTranslator.translate(samplePE.getRegistrator())); diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/GroupTranslator.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/SpaceTranslator.java similarity index 73% rename from openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/GroupTranslator.java rename to openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/SpaceTranslator.java index cbf2b928f51..1b9272b0fbe 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/GroupTranslator.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/SpaceTranslator.java @@ -29,37 +29,37 @@ import ch.systemsx.cisd.openbis.generic.shared.util.HibernateUtils; * * @author Franz-Josef Elmer */ -public final class GroupTranslator +public final class SpaceTranslator { - private GroupTranslator() + private SpaceTranslator() { // Can not be instantiated. } - public final static List<Space> translate(final List<SpacePE> groups) + public final static List<Space> translate(final List<SpacePE> spaces) { final List<Space> result = new ArrayList<Space>(); - for (final SpacePE group : groups) + for (final SpacePE space : spaces) { - result.add(GroupTranslator.translate(group)); + result.add(SpaceTranslator.translate(space)); } return result; } - public static Space translate(final SpacePE group) + public static Space translate(final SpacePE space) { - if (group == null) + if (space == null) { return null; } final Space result = new Space(); - result.setId(HibernateUtils.getId(group)); - result.setCode(group.getCode()); - result.setDescription(group.getDescription()); - result.setInstance(DatabaseInstanceTranslator.translate(group.getDatabaseInstance())); - result.setRegistrationDate(group.getRegistrationDate()); - result.setRegistrator(PersonTranslator.translate(group.getRegistrator())); - result.setIdentifier(IdentifierHelper.createGroupIdentifier(group).toString()); + result.setId(HibernateUtils.getId(space)); + result.setCode(space.getCode()); + result.setDescription(space.getDescription()); + result.setInstance(DatabaseInstanceTranslator.translate(space.getDatabaseInstance())); + result.setRegistrationDate(space.getRegistrationDate()); + result.setRegistrator(PersonTranslator.translate(space.getRegistrator())); + result.setIdentifier(IdentifierHelper.createGroupIdentifier(space).toString()); return result; } } diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/CommonServerTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/CommonServerTest.java index e7723b0d5f4..8673d8ad09a 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/CommonServerTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/CommonServerTest.java @@ -96,7 +96,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.ProjectIdentifier; import ch.systemsx.cisd.openbis.generic.shared.translator.DataSetTranslator; import ch.systemsx.cisd.openbis.generic.shared.translator.DtoConverters; import ch.systemsx.cisd.openbis.generic.shared.translator.ExperimentTranslator; -import ch.systemsx.cisd.openbis.generic.shared.translator.GroupTranslator; +import ch.systemsx.cisd.openbis.generic.shared.translator.SpaceTranslator; import ch.systemsx.cisd.openbis.generic.shared.translator.MaterialTypeTranslator; import ch.systemsx.cisd.openbis.generic.shared.translator.PersonTranslator; @@ -357,8 +357,8 @@ public final class CommonServerTest extends AbstractServerTestCase final List<Space> groups = createServer().listSpaces(SESSION_TOKEN, identifier); - assertEquals(GroupTranslator.translate(g1), groups.get(0)); - assertEquals(GroupTranslator.translate(g2), groups.get(1)); + assertEquals(SpaceTranslator.translate(g1), groups.get(0)); + assertEquals(SpaceTranslator.translate(g2), groups.get(1)); assertEquals(2, groups.size()); assertEquals(true, g1.isHome().booleanValue()); assertEquals(false, g2.isHome().booleanValue()); diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/authorization/validator/GroupValidatorTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/authorization/validator/GroupValidatorTest.java index c4cf4e9b884..e268d676462 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/authorization/validator/GroupValidatorTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/authorization/validator/GroupValidatorTest.java @@ -23,7 +23,7 @@ import ch.systemsx.cisd.openbis.generic.shared.authorization.AuthorizationTestCa import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Space; import ch.systemsx.cisd.openbis.generic.shared.dto.SpacePE; import ch.systemsx.cisd.openbis.generic.shared.dto.PersonPE; -import ch.systemsx.cisd.openbis.generic.shared.translator.GroupTranslator; +import ch.systemsx.cisd.openbis.generic.shared.translator.SpaceTranslator; /** * Test cases for corresponding {@link SpaceValidator} class. @@ -53,7 +53,7 @@ public final class GroupValidatorTest extends AuthorizationTestCase final SpaceValidator groupValidator = new SpaceValidator(); final PersonPE personPE = createPerson(); final SpacePE groupPE = createGroup(); - final Space space = GroupTranslator.translate(groupPE); + final Space space = SpaceTranslator.translate(groupPE); assertFalse(groupValidator.isValid(personPE, space)); @@ -66,7 +66,7 @@ public final class GroupValidatorTest extends AuthorizationTestCase final SpaceValidator groupValidator = new SpaceValidator(); final PersonPE personPE = createPersonWithRoleAssignments(); final SpacePE groupPE = createAnotherGroup(); - final Space space = GroupTranslator.translate(groupPE); + final Space space = SpaceTranslator.translate(groupPE); assertTrue(groupValidator.isValid(personPE, space)); context.assertIsSatisfied(); } @@ -77,7 +77,7 @@ public final class GroupValidatorTest extends AuthorizationTestCase final SpaceValidator groupValidator = new SpaceValidator(); final PersonPE personPE = createPersonWithRoleAssignments(); final SpacePE groupPE = createGroup(); - final Space space = GroupTranslator.translate(groupPE); + final Space space = SpaceTranslator.translate(groupPE); assertTrue(groupValidator.isValid(personPE, space)); context.assertIsSatisfied(); } diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/authorization/validator/MatchingEntityValidatorTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/authorization/validator/MatchingEntityValidatorTest.java index 89fa6699737..3bfdbb31a80 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/authorization/validator/MatchingEntityValidatorTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/authorization/validator/MatchingEntityValidatorTest.java @@ -28,7 +28,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.IMatchingEntity; import ch.systemsx.cisd.openbis.generic.shared.dto.PersonPE; import ch.systemsx.cisd.openbis.generic.shared.dto.SamplePE; import ch.systemsx.cisd.openbis.generic.shared.dto.properties.EntityKind; -import ch.systemsx.cisd.openbis.generic.shared.translator.GroupTranslator; +import ch.systemsx.cisd.openbis.generic.shared.translator.SpaceTranslator; /** * Test cases for corresponding {@link MatchingEntityValidator} class. @@ -45,7 +45,7 @@ public final class MatchingEntityValidatorTest extends AuthorizationTestCase private static MatchingEntity asMatchingEntityStub(IMatchingEntity matchingEntity) { final MatchingEntity result = new MatchingEntity(); - result.setSpace(GroupTranslator.translate(tryGetGroup(matchingEntity))); + result.setSpace(SpaceTranslator.translate(tryGetGroup(matchingEntity))); return result; } -- GitLab