diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/plugins/MultiDataSetArchiverOrphanFinderTask.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/plugins/MultiDataSetArchiverOrphanFinderTask.java index 0b67e117d09af486a66fd15037b4249def08d126..62bf27811556cdff695ed8747a321e4be181ac32 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/plugins/MultiDataSetArchiverOrphanFinderTask.java +++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/plugins/MultiDataSetArchiverOrphanFinderTask.java @@ -21,6 +21,9 @@ import ch.systemsx.cisd.openbis.dss.generic.server.DataStoreServer; import ch.systemsx.cisd.openbis.dss.generic.server.plugins.standard.archiver.dataaccess.IMultiDataSetArchiverReadonlyQueryDAO; import ch.systemsx.cisd.openbis.dss.generic.server.plugins.standard.archiver.dataaccess.MultiDataSetArchiverContainerDTO; import ch.systemsx.cisd.openbis.dss.generic.server.plugins.standard.archiver.dataaccess.MultiDataSetArchiverDataSourceUtil; +import ch.systemsx.cisd.openbis.dss.generic.shared.IEncapsulatedOpenBISService; +import ch.systemsx.cisd.openbis.dss.generic.shared.ServiceProvider; +import ch.systemsx.cisd.openbis.generic.shared.dto.SimpleDataSetInformationDTO; public class MultiDataSetArchiverOrphanFinderTask implements IMaintenanceTask { @@ -49,64 +52,69 @@ public class MultiDataSetArchiverOrphanFinderTask implements IMaintenanceTask { operationLog.info(MultiDataSetArchiverOrphanFinderTask.class.getSimpleName() + " Started"); - // 1.Database, obtain a list of the containers on the database. - operationLog.info("1.Database, obtain a list of the containers on the database."); + // 1.Directories + operationLog.info("1.Directories, obtain archiver directory."); + String destination = DataStoreServer.getConfigParameters().getProperties().getProperty("archiver.final-destination", null); + if (destination == null) + { + destination = DataStoreServer.getConfigParameters().getProperties().getProperty("archiver.destination", null); + } + + if (destination == null) + { + operationLog.info("No destination directory found, this task can't execute."); + return; + } + + // 2.Database + operationLog.info("2.1 Database, obtain a list of the multi dataset containers on the database."); IMultiDataSetArchiverReadonlyQueryDAO readonlyQuery = MultiDataSetArchiverDataSourceUtil.getReadonlyQueryDAO(); List<MultiDataSetArchiverContainerDTO> containerDTOs = readonlyQuery.listContainers(); - Set<String> containersOnDB = new HashSet<String>(); + Set<String> multiDatasetsContainersOnDB = new HashSet<String>(); for (MultiDataSetArchiverContainerDTO containerDTO : containerDTOs) { - containersOnDB.add(containerDTO.getPath()); + multiDatasetsContainersOnDB.add(containerDTO.getPath()); } - // 2.Directories, obtain a list of the files into the directory. - operationLog.info("2.Directories, obtain a list of the files into the directory."); - // String tempFolder = DataStoreServer.getConfigParameters().getProperties().getProperty("archiver.temp-folder", null); - String finalDestination = DataStoreServer.getConfigParameters().getProperties().getProperty("archiver.final-destination", null); - // String replicatedDestination = DataStoreServer.getConfigParameters().getProperties().getProperty("archiver.replicated-destination", null); - File[] containersOnDisk = new File(finalDestination).listFiles(); - - // 3.Verify if the files are on the database containers - operationLog.info("3.Verify if the files are on the database containers."); - List<File> notFound = new ArrayList<File>(); - for (File file : containersOnDisk) + operationLog.info("2.2 Database, obtain a list of the archived datasets on the database."); + IEncapsulatedOpenBISService service = ServiceProvider.getOpenBISService(); + List<SimpleDataSetInformationDTO> presentDTOs = service.listPhysicalDataSetsByArchivingStatus(null, Boolean.TRUE); + Set<String> presentInArchiveOnDB = new HashSet<String>(); + for (SimpleDataSetInformationDTO presentDTO : presentDTOs) { - if (containersOnDB.contains(file.getName())) - { - operationLog.info("Found container: " + file.getName()); - } else - { - notFound.add(file); - operationLog.info("Not Found file: " + file.getName()); - } + presentInArchiveOnDB.add(presentDTO.getDataSetCode()); } - // 4.Verify if the non found files follow the format needed to qualify as Multi DataSet Archiver containers. - operationLog.info("4.Verify if the non found files follow the format needed to qualify as Multi DataSet Archiver containers."); - List<File> notFoundFilesAndMDAFormat = new ArrayList<File>(); - for (File file : notFound) + // 3.Verify if the files on destination are on multi dataset archiver containers or a normal archived dataset + operationLog.info("3.Verify if the files on destination are on multi dataset archiver containers or a normal archived dataset."); + File[] filesOnDisk = new File(destination).listFiles(); + List<File> notFounds = new ArrayList<File>(); + for (File file : filesOnDisk) { - String name = file.getName(); - String[] nameParts = name.split("-"); - if (nameParts.length == 4 && name.endsWith(".tar")) + if (multiDatasetsContainersOnDB.contains(file.getName())) + { + operationLog.info("Found multi dataset archiver container: " + file.getName()); + } else if ((file.getName().toLowerCase().endsWith(".tar") || + file.getName().toLowerCase().endsWith(".zip")) + && presentInArchiveOnDB.contains(file.getName().substring(0, file.getName().length() - 4))) { - notFoundFilesAndMDAFormat.add(file); - operationLog.info("Not Found file, MDA format: " + file.getName()); + operationLog.info("Found archived dataset: " + file.getName()); } else { - operationLog.info("Not Found file, not MDA format: " + file.getName()); + notFounds.add(file); + operationLog.info("Not Found file: " + file.getName()); } } - // 5.Send email with not found files with MDA format. - operationLog.info("Send email with not found files with MDA format."); - if (notFoundFilesAndMDAFormat.size() > 0) + // 4.Send email with not found files. + operationLog.info("4.Send email with not found files."); + if (notFounds.size() > 0) { String subject = "openBIS MultiDataSetArchiverOrphanFinderTask found files"; - String content = "Found " + notFoundFilesAndMDAFormat.size() + " files by MultiDataSetArchiverOrphanFinderTask:\n"; - for (File notFoundFileAndMDAFormat : notFoundFilesAndMDAFormat) + String content = "Found " + notFounds.size() + " files by MultiDataSetArchiverOrphanFinderTask:\n"; + for (File notFound : notFounds) { - content += notFoundFileAndMDAFormat.getName() + "\t" + notFoundFileAndMDAFormat.length() + "\n"; + content += notFound.getName() + "\t" + notFound.length() + "\n"; } for (EMailAddress recipient : emailAddresses) { diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/plugins/ResetArchivePendingTask.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/plugins/ResetArchivePendingTask.java index d6fd57f93a13d9e2f46125057c17466e79c81f79..9fce18e0c34b6d7e9c9488677107af76b0dd40c3 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/plugins/ResetArchivePendingTask.java +++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/plugins/ResetArchivePendingTask.java @@ -57,7 +57,7 @@ public class ResetArchivePendingTask implements IMaintenanceTask operationLog.info(ResetArchivePendingTask.class.getSimpleName() + " Started"); // 1. Find datasets with DataSetArchivingStatus.ARCHIVE_PENDING IEncapsulatedOpenBISService service = ServiceProvider.getOpenBISService(); - List<SimpleDataSetInformationDTO> inArchivePendings = service.listPhysicalDataSetsByArchivingStatus(DataSetArchivingStatus.ARCHIVE_PENDING); + List<SimpleDataSetInformationDTO> inArchivePendings = service.listPhysicalDataSetsByArchivingStatus(DataSetArchivingStatus.ARCHIVE_PENDING, null); if (inArchivePendings.isEmpty() == false) { operationLog.info("Found " + inArchivePendings.size() + " datasets in " + DataSetArchivingStatus.ARCHIVE_PENDING.name() + " status."); diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/EncapsulatedOpenBISService.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/EncapsulatedOpenBISService.java index 48c4b4fbfdfa6db28f59e292e5f7e21ea5f5d4fe..ea2fb19f317ca8caf326ef0f9e5b888bd8d8292d 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/EncapsulatedOpenBISService.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/EncapsulatedOpenBISService.java @@ -692,11 +692,11 @@ public final class EncapsulatedOpenBISService implements IEncapsulatedOpenBISSer } @Override - public List<SimpleDataSetInformationDTO> listPhysicalDataSetsByArchivingStatus(DataSetArchivingStatus archivingStatus) + public List<SimpleDataSetInformationDTO> listPhysicalDataSetsByArchivingStatus(DataSetArchivingStatus archivingStatus, Boolean presentInArchive) throws UserFailureException { List<SimpleDataSetInformationDTO> dataSets = service.listPhysicalDataSetsByArchivingStatus(session.getSessionToken(), - session.getDataStoreCode(), archivingStatus); + session.getDataStoreCode(), archivingStatus, presentInArchive); return injectDefaultShareIdIfMissing(dataSets); } diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/IEncapsulatedOpenBISService.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/IEncapsulatedOpenBISService.java index 28ea7a3d5f171d0c2a527f1fda924f4ed9c45da8..eb9aadde38907162abdd318fc58cc641b5e0b7b4 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/IEncapsulatedOpenBISService.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/IEncapsulatedOpenBISService.java @@ -292,7 +292,7 @@ public interface IEncapsulatedOpenBISService extends IEncapsulatedBasicOpenBISSe * Returns informations about physical data sets with certain archiving status */ @ManagedAuthentication - public List<SimpleDataSetInformationDTO> listPhysicalDataSetsByArchivingStatus(DataSetArchivingStatus archivingStatus) + public List<SimpleDataSetInformationDTO> listPhysicalDataSetsByArchivingStatus(DataSetArchivingStatus archivingStatus, Boolean presentInArchive) throws UserFailureException; /** diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ServiceForDataStoreServer.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ServiceForDataStoreServer.java index 3be2a21633a0b82fee05e5a40e6ae5049ade0c50..61e8f1abf38018cea1bf4eab3c350ca85851df4b 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ServiceForDataStoreServer.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ServiceForDataStoreServer.java @@ -605,7 +605,7 @@ public class ServiceForDataStoreServer extends AbstractCommonServer<IServiceForD @RolesAllowed({ RoleWithHierarchy.SPACE_OBSERVER, RoleWithHierarchy.SPACE_ETL_SERVER }) public Experiment tryGetExperiment(String sessionToken, @AuthorizationGuard(guardClass = ExistingSpaceIdentifierPredicate.class) ExperimentIdentifier experimentIdentifier) - throws UserFailureException + throws UserFailureException { assert sessionToken != null : "Unspecified session token."; assert experimentIdentifier != null : "Unspecified experiment identifier."; @@ -650,7 +650,7 @@ public class ServiceForDataStoreServer extends AbstractCommonServer<IServiceForD @ReturnValueFilter(validatorClass = SampleValidator.class) public List<Sample> listSamples(final String sessionToken, @AuthorizationGuard(guardClass = ListSampleCriteriaPredicate.class) - final ListSampleCriteria criteria) + final ListSampleCriteria criteria) { final Session session = getSession(sessionToken); final ISampleLister sampleLister = businessObjectFactory.createSampleLister(session); @@ -661,7 +661,7 @@ public class ServiceForDataStoreServer extends AbstractCommonServer<IServiceForD @RolesAllowed(RoleWithHierarchy.SPACE_ETL_SERVER) public Sample tryGetSampleWithExperiment(final String sessionToken, @AuthorizationGuard(guardClass = ExistingSampleOwnerIdentifierPredicate.class) - final SampleIdentifier sampleIdentifier) throws UserFailureException + final SampleIdentifier sampleIdentifier) throws UserFailureException { assert sessionToken != null : "Unspecified session token."; assert sampleIdentifier != null : "Unspecified sample identifier."; @@ -860,7 +860,7 @@ public class ServiceForDataStoreServer extends AbstractCommonServer<IServiceForD @RolesAllowed({ RoleWithHierarchy.SPACE_OBSERVER, RoleWithHierarchy.SPACE_ETL_SERVER }) public List<AbstractExternalData> listDataSetsByExperimentID(final String sessionToken, @AuthorizationGuard(guardClass = ExperimentTechIdPredicate.class) - final TechId experimentID) throws UserFailureException + final TechId experimentID) throws UserFailureException { Session session = getSession(sessionToken); IDatasetLister datasetLister = createDatasetLister(session); @@ -874,7 +874,7 @@ public class ServiceForDataStoreServer extends AbstractCommonServer<IServiceForD @RolesAllowed({ RoleWithHierarchy.SPACE_OBSERVER, RoleWithHierarchy.SPACE_ETL_SERVER }) public List<AbstractExternalData> listDataSetsBySampleID(final String sessionToken, @AuthorizationGuard(guardClass = SampleTechIdPredicate.class) - final TechId sampleId, final boolean showOnlyDirectlyConnected) + final TechId sampleId, final boolean showOnlyDirectlyConnected) throws UserFailureException { final Session session = getSession(sessionToken); @@ -935,7 +935,7 @@ public class ServiceForDataStoreServer extends AbstractCommonServer<IServiceForD @RolesAllowed({ RoleWithHierarchy.SPACE_OBSERVER, RoleWithHierarchy.SPACE_ETL_SERVER }) public IEntityProperty[] tryGetPropertiesOfTopSample(final String sessionToken, @AuthorizationGuard(guardClass = SampleOwnerIdentifierPredicate.class) - final SampleIdentifier sampleIdentifier) throws UserFailureException + final SampleIdentifier sampleIdentifier) throws UserFailureException { assert sessionToken != null : "Unspecified session token."; assert sampleIdentifier != null : "Unspecified sample identifier."; @@ -1020,7 +1020,7 @@ public class ServiceForDataStoreServer extends AbstractCommonServer<IServiceForD @RolesAllowed(RoleWithHierarchy.SPACE_ETL_SERVER) public void registerSamples(final String sessionToken, @AuthorizationGuard(guardClass = NewSamplesWithTypePredicate.class) - final List<NewSamplesWithTypes> newSamplesWithType, String userIDOrNull) + final List<NewSamplesWithTypes> newSamplesWithType, String userIDOrNull) throws UserFailureException { assert sessionToken != null : "Unspecified session token."; @@ -1037,7 +1037,7 @@ public class ServiceForDataStoreServer extends AbstractCommonServer<IServiceForD @RolesAllowed(RoleWithHierarchy.SPACE_ETL_SERVER) public long registerSample(final String sessionToken, @AuthorizationGuard(guardClass = NewSamplePredicate.class) - final NewSample newSample, String userIDOrNull) throws UserFailureException + final NewSample newSample, String userIDOrNull) throws UserFailureException { assert sessionToken != null : "Unspecified session token."; assert newSample != null : "Unspecified new sample."; @@ -1071,7 +1071,7 @@ public class ServiceForDataStoreServer extends AbstractCommonServer<IServiceForD @RolesAllowed(RoleWithHierarchy.SPACE_ETL_SERVER) public void registerDataSet(final String sessionToken, @AuthorizationGuard(guardClass = SampleOwnerIdentifierPredicate.class) - final SampleIdentifier sampleIdentifier, final NewExternalData externalData) + final SampleIdentifier sampleIdentifier, final NewExternalData externalData) throws UserFailureException { assert sessionToken != null : "Unspecified session token."; @@ -1085,7 +1085,7 @@ public class ServiceForDataStoreServer extends AbstractCommonServer<IServiceForD @RolesAllowed(RoleWithHierarchy.SPACE_ETL_SERVER) public void registerDataSet(final String sessionToken, @AuthorizationGuard(guardClass = SpaceIdentifierPredicate.class) - final ExperimentIdentifier experimentIdentifier, final NewExternalData externalData) + final ExperimentIdentifier experimentIdentifier, final NewExternalData externalData) throws UserFailureException { assert sessionToken != null : "Unspecified session token."; @@ -1099,7 +1099,7 @@ public class ServiceForDataStoreServer extends AbstractCommonServer<IServiceForD @RolesAllowed(RoleWithHierarchy.SPACE_ETL_SERVER) public void addPropertiesToDataSet(String sessionToken, List<NewProperty> properties, String dataSetCode, @AuthorizationGuard(guardClass = SpaceIdentifierPredicate.class) - final SpaceIdentifier identifier) throws UserFailureException + final SpaceIdentifier identifier) throws UserFailureException { assert sessionToken != null : "Unspecified session token."; final Session session = getSession(sessionToken); @@ -1334,7 +1334,7 @@ public class ServiceForDataStoreServer extends AbstractCommonServer<IServiceForD @RolesAllowed({ RoleWithHierarchy.SPACE_OBSERVER, RoleWithHierarchy.SPACE_ETL_SERVER }) public List<Sample> listSamplesByCriteria(final String sessionToken, @AuthorizationGuard(guardClass = ListSamplesByPropertyPredicate.class) - final ListSamplesByPropertyCriteria criteria) throws UserFailureException + final ListSamplesByPropertyCriteria criteria) throws UserFailureException { assert sessionToken != null : "Unspecified session token."; assert criteria != null : "Unspecified criteria."; @@ -1410,13 +1410,13 @@ public class ServiceForDataStoreServer extends AbstractCommonServer<IServiceForD @Override @RolesAllowed(RoleWithHierarchy.SPACE_ETL_SERVER) public List<SimpleDataSetInformationDTO> listPhysicalDataSetsByArchivingStatus(String sessionToken, String dataStoreCode, - DataSetArchivingStatus archivingStatus) + DataSetArchivingStatus archivingStatus, Boolean presentInArchive) { final Session session = getSession(sessionToken); final DataStorePE dataStore = loadDataStore(session, dataStoreCode); final IDatasetLister datasetLister = businessObjectFactory.createDatasetLister(session); final List<AbstractExternalData> dataSets = - datasetLister.listByArchivingStatus(dataStore.getId(), archivingStatus, + datasetLister.listByArchivingStatus(dataStore.getId(), archivingStatus, presentInArchive, DATASET_FETCH_OPTIONS_FILE_DATASETS); return SimpleDataSetHelper.filterAndTranslate(dataSets); } @@ -1600,7 +1600,7 @@ public class ServiceForDataStoreServer extends AbstractCommonServer<IServiceForD @RolesAllowed(RoleWithHierarchy.SPACE_ETL_SERVER) public Sample registerSampleAndDataSet(final String sessionToken, @AuthorizationGuard(guardClass = NewSamplePredicate.class) - final NewSample newSample, final NewExternalData externalData, String userIdOrNull) + final NewSample newSample, final NewExternalData externalData, String userIdOrNull) throws UserFailureException { assert sessionToken != null : "Unspecified session token."; diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ServiceForDataStoreServerLogger.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ServiceForDataStoreServerLogger.java index 7971e8826149110c7fd926935be41db5d793ac0d..b6185a3fe850265e5f7babb061ae5b2af79da24d 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ServiceForDataStoreServerLogger.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ServiceForDataStoreServerLogger.java @@ -420,9 +420,9 @@ public class ServiceForDataStoreServerLogger extends AbstractServerLogger implem @Override public List<SimpleDataSetInformationDTO> listPhysicalDataSetsByArchivingStatus(String sessionToken, String dataStoreCode, - DataSetArchivingStatus archivingStatus) throws UserFailureException + DataSetArchivingStatus archivingStatus, Boolean presentInArchive) throws UserFailureException { - logAccess(sessionToken, "listPhysicalDataSetsByArchivingStatus", "DATA_STORE(%s) STATUS(%s)", dataStoreCode, archivingStatus); + logAccess(sessionToken, "listPhysicalDataSetsByArchivingStatus", "DATA_STORE(%s) STATUS(%s) PRESENT(%s)", dataStoreCode, archivingStatus, presentInArchive); return null; } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/DatasetLister.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/DatasetLister.java index f6d89c414a4443f42da33d9289b082f88c89c0dd..e2749b5f011bd9c2075b630413c69e3bdf2429a6 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/DatasetLister.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/DatasetLister.java @@ -532,12 +532,23 @@ public class DatasetLister extends AbstractLister implements IDatasetLister } @Override - public List<AbstractExternalData> listByArchivingStatus(long dataStoreID, DataSetArchivingStatus archivingStatus, + public List<AbstractExternalData> listByArchivingStatus(long dataStoreID, DataSetArchivingStatus archivingStatus, Boolean presentInArchive, EnumSet<DataSetFetchOption> datasetFetchOptions) { checkFetchOptions(datasetFetchOptions); - List<DatasetRecord> dataSets = query.getDatasetsByDataStoreIdWithArchivingStatus(dataStoreID, archivingStatus.name()); + List<DatasetRecord> dataSets = null; + + if (archivingStatus != null && presentInArchive != null) + { + dataSets = query.getDatasetsByDataStoreIdWithArchivingStatusAndPressentInArchive(dataStoreID, archivingStatus.name(), presentInArchive); + } else if (archivingStatus == null) + { + dataSets = query.getDatasetsByDataStoreIdWithPressentInArchive(dataStoreID, presentInArchive); + } else if (presentInArchive == null) + { + dataSets = query.getDatasetsByDataStoreIdWithArchivingStatus(dataStoreID, archivingStatus.name()); + } return orderByCode(enrichDatasets(dataSets, datasetFetchOptions)); } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/IDatasetLister.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/IDatasetLister.java index 64ef8d8962294db04293384ae03a4f237261ee27..28b14a6887839eeb192f78c02bbddd48e0f2bfac 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/IDatasetLister.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/IDatasetLister.java @@ -142,7 +142,7 @@ public interface IDatasetLister /** * Lists physical datasets by archiving status of the specified data store. */ - List<AbstractExternalData> listByArchivingStatus(long dataStoreID, DataSetArchivingStatus archivingStatus, + List<AbstractExternalData> listByArchivingStatus(long dataStoreID, DataSetArchivingStatus archivingStatus, Boolean presentInArchive, EnumSet<DataSetFetchOption> datasetFetchOptions); /** diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/IDatasetListingQuery.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/IDatasetListingQuery.java index b60c471bea37efa7c95b6d5531e707aa1a8d0875..b9a8e953c9122ce8de1289a560db1c2b71ad2c81 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/IDatasetListingQuery.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/IDatasetListingQuery.java @@ -270,9 +270,15 @@ public interface IDatasetListingQuery extends BaseQuery, IPropertyListingQuery + " where data.dast_id = ?{1} and size is null and data.code > ?{3}" + " order by data.code limit ?{2}", fetchSize = FETCH_SIZE) public List<DatasetRecord> getDatasetsByDataStoreIdWithUnknownSize(long dataStoreID, int limit, String dataSetCodeLowerLimit); - + @Select(sql = SELECT_ALL_EXTERNAL_DATAS + " where data.dast_id = ?{1} and external_data.status = ?{2}", fetchSize = FETCH_SIZE) public List<DatasetRecord> getDatasetsByDataStoreIdWithArchivingStatus(long dataStoreID, String archivingStatus); + + @Select(sql = SELECT_ALL_EXTERNAL_DATAS + " where data.dast_id = ?{1} and external_data.present_in_archive = ?{2}", fetchSize = FETCH_SIZE) + public List<DatasetRecord> getDatasetsByDataStoreIdWithPressentInArchive(long dataStoreID, Boolean presentInArchive); + + @Select(sql = SELECT_ALL_EXTERNAL_DATAS + " where data.dast_id = ?{1} and external_data.status = ?{2} and external_data.present_in_archive = ?{3}", fetchSize = FETCH_SIZE) + public List<DatasetRecord> getDatasetsByDataStoreIdWithArchivingStatusAndPressentInArchive(long dataStoreID, String archivingStatus, Boolean presentInArchive); // NOTE: we list ALL data sets (even those in trash) using data_all table here @Select(sql = "SELECT code, share_id FROM data_all LEFT OUTER JOIN external_data " diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/IServiceForDataStoreServer.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/IServiceForDataStoreServer.java index 31a7f890d5343fe23e851db75ba9c72a4d0a33f1..0f34c083d3a912a8d2a051108fa0a1cfea79f089 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/IServiceForDataStoreServer.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/IServiceForDataStoreServer.java @@ -256,8 +256,7 @@ public interface IServiceForDataStoreServer extends IServer, ISessionProvider * Registers/updates various entities in one transaction. */ @Transactional - @DatabaseCreateOrDeleteModification(value = - { ObjectKind.EXPERIMENT, ObjectKind.SAMPLE, ObjectKind.DATA_SET }) + @DatabaseCreateOrDeleteModification(value = { ObjectKind.EXPERIMENT, ObjectKind.SAMPLE, ObjectKind.DATA_SET }) public void registerEntities(String sessionToken, EntityCollectionForCreationOrUpdate collection) throws UserFailureException; @@ -431,8 +430,8 @@ public interface IServiceForDataStoreServer extends IServer, ISessionProvider */ @Transactional(readOnly = true) public List<SimpleDataSetInformationDTO> listPhysicalDataSetsByArchivingStatus(String sessionToken, String dataStoreCode, - DataSetArchivingStatus archivingStatus); - + DataSetArchivingStatus archivingStatus, Boolean presentInArchive); + /** * Lists the <var>limit</var> oldest physical data sets younger than <var>youngerThan</var> belonging to specified data store. * <p> @@ -618,8 +617,7 @@ public interface IServiceForDataStoreServer extends IServer, ISessionProvider * @throws UserFailureException if given data set code could not be found in the persistence layer. */ @Transactional - @DatabaseCreateOrDeleteModification(value = - { ObjectKind.SAMPLE, ObjectKind.DATA_SET }) + @DatabaseCreateOrDeleteModification(value = { ObjectKind.SAMPLE, ObjectKind.DATA_SET }) public Sample registerSampleAndDataSet(final String sessionToken, final NewSample newSample, final NewExternalData externalData, String userIdOrNull) throws UserFailureException; @@ -647,10 +645,8 @@ public interface IServiceForDataStoreServer extends IServer, ISessionProvider */ @Transactional @Conversational(progress = Progress.MANUAL) - @DatabaseUpdateModification(value = - { ObjectKind.SAMPLE, ObjectKind.EXPERIMENT, ObjectKind.DATA_SET }) - @DatabaseCreateOrDeleteModification(value = - { ObjectKind.SPACE, ObjectKind.PROJECT, ObjectKind.SAMPLE, ObjectKind.EXPERIMENT, + @DatabaseUpdateModification(value = { ObjectKind.SAMPLE, ObjectKind.EXPERIMENT, ObjectKind.DATA_SET }) + @DatabaseCreateOrDeleteModification(value = { ObjectKind.SPACE, ObjectKind.PROJECT, ObjectKind.SAMPLE, ObjectKind.EXPERIMENT, ObjectKind.DATA_SET }) public AtomicEntityOperationResult performEntityOperations(String sessionToken, AtomicEntityOperationDetails operationDetails); @@ -702,10 +698,8 @@ public interface IServiceForDataStoreServer extends IServer, ISessionProvider * permanently deletes a list of data sets. */ @Transactional - @DatabaseUpdateModification(value = - { ObjectKind.SAMPLE, ObjectKind.EXPERIMENT }) - @DatabaseCreateOrDeleteModification(value = - { ObjectKind.DATA_SET }) + @DatabaseUpdateModification(value = { ObjectKind.SAMPLE, ObjectKind.EXPERIMENT }) + @DatabaseCreateOrDeleteModification(value = { ObjectKind.DATA_SET }) public void removeDataSetsPermanently(String sessionToken, List<String> dataSetCodes, String reason); @@ -713,8 +707,7 @@ public interface IServiceForDataStoreServer extends IServer, ISessionProvider * updates a data set. */ @Transactional - @DatabaseUpdateModification(value = - { ObjectKind.EXPERIMENT, ObjectKind.SAMPLE, ObjectKind.DATA_SET }) + @DatabaseUpdateModification(value = { ObjectKind.EXPERIMENT, ObjectKind.SAMPLE, ObjectKind.DATA_SET }) public void updateDataSet(String sessionToken, DataSetUpdatesDTO dataSetUpdates); /**