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 3d693582581374d293c9bd8dd928892817407c1c..620ac4a98d0c00223c8b0a87e4daef16c5633b0c 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 @@ -855,4 +855,16 @@ public interface ICommonClientService extends IClientService public void deleteMaterials(DisplayedOrSelectedIdHolderCriteria<Material> criteria, String reason) throws UserFailureException; + /** + * Locks the specified datasets. + */ + public void lockDatasets(DisplayedOrSelectedDatasetCriteria criteria) + throws UserFailureException; + + /** + * Unlocks the specified datasets. + */ + public void unlockDatasets(DisplayedOrSelectedDatasetCriteria criteria) + 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 d9b411cdcb5ba50abb84b32a34101311fb01d540..4087c3c00431af3aef105e76fca8a8d5ff25dc34 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 @@ -757,5 +757,17 @@ public interface ICommonClientServiceAsync extends IClientServiceAsync public void deleteMaterials(DisplayedOrSelectedIdHolderCriteria<Material> uploadCriteria, String value, AsyncCallback<Void> callback); + /** + * @see ICommonClientService#lockDatasets(DisplayedOrSelectedDatasetCriteria) + */ + public void lockDatasets(DisplayedOrSelectedDatasetCriteria criteria, + AsyncCallback<Void> callback); + + /** + * @see ICommonClientService#unlockDatasets(DisplayedOrSelectedDatasetCriteria) + */ + public void unlockDatasets(DisplayedOrSelectedDatasetCriteria criteria, + AsyncCallback<Void> callback); + // -- } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/DataSetComputeMenu.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/DataSetComputeMenu.java index 747d105658e52da334291a64af201ac9117f5f24..e6f8ec677d7f91b513633b8d1acc2e9147f9f65e 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/DataSetComputeMenu.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/DataSetComputeMenu.java @@ -88,6 +88,8 @@ public class DataSetComputeMenu extends TextToolItem addMenuItem(submenu, DssTaskActionMenuKind.COMPUTE_MENU_PROCESSING); addMenuItem(submenu, DssTaskActionMenuKind.COMPUTE_MENU_ARCHIVIZATION); addMenuItem(submenu, DssTaskActionMenuKind.COMPUTE_MENU_UNARCHIVIZATION); + addMenuItem(submenu, DssTaskActionMenuKind.COMPUTE_MENU_LOCK); + addMenuItem(submenu, DssTaskActionMenuKind.COMPUTE_MENU_UNLOCK); setMenu(submenu); } @@ -99,7 +101,9 @@ public class DataSetComputeMenu extends TextToolItem COMPUTE_MENU_QUERIES(DataStoreServiceKind.QUERIES), COMPUTE_MENU_PROCESSING( DataStoreServiceKind.PROCESSING), COMPUTE_MENU_ARCHIVIZATION( DataStoreServiceKind.ARCHIVIZATION), COMPUTE_MENU_UNARCHIVIZATION( - DataStoreServiceKind.UNARCHIVIZATION); + DataStoreServiceKind.UNARCHIVIZATION), + COMPUTE_MENU_LOCK(DataStoreServiceKind.LOCK), COMPUTE_MENU_UNLOCK( + DataStoreServiceKind.UNLOCK); private final DataStoreServiceKind dssTaskKind; @@ -154,6 +158,8 @@ public class DataSetComputeMenu extends TextToolItem { case ARCHIVIZATION: case UNARCHIVIZATION: + case LOCK: + case UNLOCK: return new PerformArchivizationDialog(viewContext, data, title); default: return new PerformComputationDialog(viewContext, data, title); @@ -193,6 +199,18 @@ public class DataSetComputeMenu extends TextToolItem new ArchivizationDisplayCallback(viewContext, dssTaskKind .getDescription())); break; + case LOCK: + viewContext.getService().lockDatasets( + criteria, + new ArchivizationDisplayCallback(viewContext, dssTaskKind + .getDescription())); + break; + case UNLOCK: + viewContext.getService().unlockDatasets( + criteria, + new ArchivizationDisplayCallback(viewContext, dssTaskKind + .getDescription())); + break; } } }; @@ -321,6 +339,10 @@ public class DataSetComputeMenu extends TextToolItem return DataSetArchivizationStatus.ACTIVE; case UNARCHIVIZATION: return DataSetArchivizationStatus.ARCHIVED; + case LOCK: + return DataSetArchivizationStatus.ACTIVE; + case UNLOCK: + return DataSetArchivizationStatus.LOCKED; default: return null; // not possible } @@ -379,7 +401,7 @@ public class DataSetComputeMenu extends TextToolItem // not null only if all selected datasets come from the same datastore private final DataStore dataStoreOrNull; - private ComputationDataSetsRadioProvider radioProvider; + private final ComputationDataSetsRadioProvider radioProvider; private Html selectedDataSetTypesText; @@ -656,7 +678,7 @@ public class DataSetComputeMenu extends TextToolItem private Radio computeOnAllRadio; - private ComputationData data; + private final ComputationData data; public ComputationDataSetsRadioProvider(ComputationData data) { 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 6173748f161beb5baade359441e3234eda1b637b..bd49ac7d2937e5fb0513cb3fe0f007ed1189ac90 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 @@ -2408,4 +2408,32 @@ public final class CommonClientService extends AbstractClientService implements } } + public void lockDatasets(DisplayedOrSelectedDatasetCriteria criteria) + throws ch.systemsx.cisd.openbis.generic.client.web.client.exception.UserFailureException + { + try + { + final String sessionToken = getSessionToken(); + List<String> datasetCodes = extractDatasetCodes(criteria); + commonServer.lockDatasets(sessionToken, datasetCodes); + } catch (final UserFailureException e) + { + throw UserFailureExceptionTranslator.translate(e); + } + } + + public void unlockDatasets(DisplayedOrSelectedDatasetCriteria criteria) + throws ch.systemsx.cisd.openbis.generic.client.web.client.exception.UserFailureException + { + try + { + final String sessionToken = getSessionToken(); + List<String> datasetCodes = extractDatasetCodes(criteria); + commonServer.unlockDatasets(sessionToken, datasetCodes); + } 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 abc649edb57c2c0c1773c6d723413b0cef9c51f2..1b068d545390822d3b5a80e717c56b4186c967e5 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 @@ -1847,4 +1847,22 @@ public final class CommonServer extends AbstractCommonServer<ICommonServer> impl } } + public void lockDatasets(String sessionToken, List<String> datasetCodes) + { + Session session = getSession(sessionToken); + IExternalDataTable externalDataTable = + businessObjectFactory.createExternalDataTable(session); + externalDataTable.loadByDataSetCodes(datasetCodes, true); + externalDataTable.lockDatasets(); + } + + public void unlockDatasets(String sessionToken, List<String> datasetCodes) + { + Session session = getSession(sessionToken); + IExternalDataTable externalDataTable = + businessObjectFactory.createExternalDataTable(session); + externalDataTable.loadByDataSetCodes(datasetCodes, true); + externalDataTable.unlockDatasets(); + } + } 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 dd0a6fbe208b494d8885b061b5e26de0509e0695..381ecea0a6d93abab7d2ba84731267289306c0a1 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 @@ -830,4 +830,14 @@ final class CommonServerLogger extends AbstractServerLogger implements ICommonSe logTracking(sessionToken, "delete_materials", "IDS(%s) REASON(%s)", materialIds, reason); } + public void lockDatasets(String sessionToken, List<String> datasetCodes) + { + logTracking(sessionToken, "lockDatasets", "NO_OF_DATASETS(%s)", datasetCodes.size()); + } + + public void unlockDatasets(String sessionToken, List<String> datasetCodes) + { + logTracking(sessionToken, "unlockDatasets", "NO_OF_DATASETS(%s)", datasetCodes.size()); + } + } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExternalDataTable.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExternalDataTable.java index 170c670130469d2a1e3eb52a00ef38988d2adecb..4afa55d2606b4aafa3448def746de9e9bb220b31 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExternalDataTable.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExternalDataTable.java @@ -616,4 +616,18 @@ public final class ExternalDataTable extends AbstractExternalDataBusinessObject } } } + + public void lockDatasets() + { + Map<DataStorePE, List<ExternalDataPE>> datasetsByStore = groupDataSetsByDataStores(); + filterByStatusAndUpdate(datasetsByStore, DataSetArchivizationStatus.ACTIVE, + DataSetArchivizationStatus.LOCKED); + } + + public void unlockDatasets() + { + Map<DataStorePE, List<ExternalDataPE>> datasetsByStore = groupDataSetsByDataStores(); + filterByStatusAndUpdate(datasetsByStore, DataSetArchivizationStatus.LOCKED, + DataSetArchivizationStatus.ACTIVE); + } } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/IExternalDataTable.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/IExternalDataTable.java index 361ed49c1b7bb0539fbed651225783ea5db31dd4..acb990d01fdaaa71e0e5fe87b06048e883ad4aa7 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/IExternalDataTable.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/IExternalDataTable.java @@ -89,4 +89,14 @@ public interface IExternalDataTable */ public void loadByDataStore(DataStorePE dataStore); + /** + * Locks loaded data sets. + */ + void lockDatasets(); + + /** + * Unlocks loaded data sets. + */ + void unlockDatasets(); + } 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 c19e3270288cda978e74ba201e62b57251711cea..f487a81eb8773b522641cb5a5f4bf5a1bfab7cc3 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 @@ -1047,4 +1047,22 @@ public interface ICommonServer extends IServer @DatabaseCreateOrDeleteModification(value = ObjectKind.MATERIAL) public void deleteMaterials(String sessionToken, List<TechId> materialIds, String reason); + /** + * Locks data sets + */ + @Transactional + @RolesAllowed(RoleSet.SPACE_ADMIN) + @DatabaseUpdateModification(value = ObjectKind.DATA_SET) + public void lockDatasets(String sessionToken, + @AuthorizationGuard(guardClass = DataSetCodePredicate.class) List<String> datasetCodes); + + /** + * Unlocks data sets + */ + @Transactional + @RolesAllowed(RoleSet.SPACE_ADMIN) + @DatabaseUpdateModification(value = ObjectKind.DATA_SET) + public void unlockDatasets(String sessionToken, + @AuthorizationGuard(guardClass = DataSetCodePredicate.class) List<String> datasetCodes); + } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/DataStoreServiceKind.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/DataStoreServiceKind.java index c827d8e0c55c64b1ec34688ff8329ce3be3a6a91..55bcd84e6673995895b9d1342c7043a5b15ec2ca 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/DataStoreServiceKind.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/DataStoreServiceKind.java @@ -27,7 +27,7 @@ public enum DataStoreServiceKind implements Serializable, IsSerializable { // Do not refactor names - they are stored in database. PROCESSING("Processing"), QUERIES("Query"), ARCHIVIZATION("Archivization"), UNARCHIVIZATION( - "Unarchivization"); + "Unarchivization"), LOCK("Lock"), UNLOCK("Unlock"); private final String description; 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 09e2e37f46287565df3e0e70b3ffae1701cf2255..eb0c677e3196cf7f2f767d628be2b0a4d58fc6ef 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 @@ -327,6 +327,8 @@ var common = { COMPUTE_MENU_PROCESSING: "Processing", COMPUTE_MENU_ARCHIVIZATION: "Archivization", COMPUTE_MENU_UNARCHIVIZATION: "Unarchivization", + COMPUTE_MENU_LOCK: "Lock", + COMPUTE_MENU_UNLOCK: "Unlock", menu_modules: "Utilities",