From db992c5849391590068ea15b3738471c7a3d3002 Mon Sep 17 00:00:00 2001 From: pfurio Date: Tue, 26 Sep 2023 13:14:36 +0200 Subject: [PATCH] catalog: improve delete error messages, #TASK-4210 --- .../db/mongodb/IndividualMongoDBAdaptor.java | 8 +++----- .../catalog/db/mongodb/SampleMongoDBAdaptor.java | 6 ++---- .../opencga/catalog/managers/FamilyManager.java | 3 ++- .../catalog/managers/IndividualManager.java | 6 ++---- .../opencga/catalog/managers/SampleManager.java | 14 +++++++------- .../catalog/managers/SampleManagerTest.java | 2 +- 6 files changed, 17 insertions(+), 22 deletions(-) diff --git a/opencga-catalog/src/main/java/org/opencb/opencga/catalog/db/mongodb/IndividualMongoDBAdaptor.java b/opencga-catalog/src/main/java/org/opencb/opencga/catalog/db/mongodb/IndividualMongoDBAdaptor.java index 1a074a17331..6437a0293b2 100644 --- a/opencga-catalog/src/main/java/org/opencb/opencga/catalog/db/mongodb/IndividualMongoDBAdaptor.java +++ b/opencga-catalog/src/main/java/org/opencb/opencga/catalog/db/mongodb/IndividualMongoDBAdaptor.java @@ -644,7 +644,6 @@ private void updateClinicalAnalysisIndividualReferences(ClientSession clientSess */ private void checkInUseInClinicalAnalysis(ClientSession clientSession, Document individual) throws CatalogDBException, CatalogParameterException, CatalogAuthorizationException { - String individualId = individual.getString(QueryParams.ID.key()); long individualUid = individual.getLong(PRIVATE_UID); long studyUid = individual.getLong(PRIVATE_STUDY_UID); @@ -653,8 +652,7 @@ private void checkInUseInClinicalAnalysis(ClientSession clientSession, Document .append(ClinicalAnalysisDBAdaptor.QueryParams.INDIVIDUAL.key(), individualUid); OpenCGAResult count = dbAdaptorFactory.getClinicalAnalysisDBAdaptor().count(clientSession, query); if (count.getNumMatches() > 0) { - throw new CatalogDBException("Could not delete individual '" + individualId + "'. Individual is in use in " - + count.getNumMatches() + " cases"); + throw new CatalogDBException("Individual is in use in " + count.getNumMatches() + " cases"); } } @@ -940,7 +938,7 @@ public OpenCGAResult delete(Individual individual) throws CatalogDBException, Ca return runTransaction(clientSession -> privateDelete(clientSession, result.first())); } catch (CatalogDBException e) { logger.error("Could not delete individual {}: {}", individual.getId(), e.getMessage(), e); - throw new CatalogDBException("Could not delete individual " + individual.getId() + ": " + e.getMessage(), e.getCause()); + throw new CatalogDBException("Could not delete individual " + individual.getId() + ": " + e.getMessage(), e); } } @@ -976,7 +974,7 @@ OpenCGAResult privateDelete(ClientSession clientSession, Document indivi checkInUseInClinicalAnalysis(clientSession, individualDocument); logger.debug("Deleting individual {} ({})", individualId, individualUid); - // Look for all the different family versions + // Look for all the different individual versions Query individualQuery = new Query() .append(QueryParams.UID.key(), individualUid) .append(QueryParams.STUDY_UID.key(), studyUid); diff --git a/opencga-catalog/src/main/java/org/opencb/opencga/catalog/db/mongodb/SampleMongoDBAdaptor.java b/opencga-catalog/src/main/java/org/opencb/opencga/catalog/db/mongodb/SampleMongoDBAdaptor.java index dde62bd87d3..6d7bd764c57 100644 --- a/opencga-catalog/src/main/java/org/opencb/opencga/catalog/db/mongodb/SampleMongoDBAdaptor.java +++ b/opencga-catalog/src/main/java/org/opencb/opencga/catalog/db/mongodb/SampleMongoDBAdaptor.java @@ -500,7 +500,6 @@ void updateIndividualIdFromSamples(ClientSession clientSession, long studyUid, S */ private void checkInUseInClinicalAnalysis(ClientSession clientSession, Document sample) throws CatalogDBException, CatalogParameterException, CatalogAuthorizationException { - String sampleId = sample.getString(QueryParams.ID.key()); long sampleUid = sample.getLong(QueryParams.UID.key()); long studyUid = sample.getLong(QueryParams.STUDY_UID.key()); @@ -509,8 +508,7 @@ private void checkInUseInClinicalAnalysis(ClientSession clientSession, Document .append(ClinicalAnalysisDBAdaptor.QueryParams.SAMPLE.key(), sampleUid); OpenCGAResult count = dbAdaptorFactory.getClinicalAnalysisDBAdaptor().count(clientSession, query); if (count.getNumMatches() > 0) { - throw new CatalogDBException("Could not delete sample '" + sampleId + "'. Sample is in use in " - + count.getNumMatches() + " cases"); + throw new CatalogDBException("Sample is in use in " + count.getNumMatches() + " cases"); } } @@ -860,7 +858,7 @@ public OpenCGAResult delete(Sample sample) throws CatalogDBException, CatalogPar return runTransaction(clientSession -> privateDelete(clientSession, result.first())); } catch (CatalogDBException e) { logger.error("Could not delete sample {}: {}", sample.getId(), e.getMessage(), e); - throw new CatalogDBException("Could not delete sample " + sample.getId() + ": " + e.getMessage(), e.getCause()); + throw new CatalogDBException("Could not delete sample " + sample.getId() + ": " + e.getMessage(), e); } } diff --git a/opencga-catalog/src/main/java/org/opencb/opencga/catalog/managers/FamilyManager.java b/opencga-catalog/src/main/java/org/opencb/opencga/catalog/managers/FamilyManager.java index d7183adabae..c135e390744 100644 --- a/opencga-catalog/src/main/java/org/opencb/opencga/catalog/managers/FamilyManager.java +++ b/opencga-catalog/src/main/java/org/opencb/opencga/catalog/managers/FamilyManager.java @@ -530,7 +530,8 @@ private void checkCanBeDeleted(Study study, Family family) throws CatalogExcepti OpenCGAResult result = clinicalDBAdaptor.get(query, ClinicalAnalysisManager.INCLUDE_CLINICAL_IDS); if (result.getNumResults() > 0) { String clinicalIds = result.getResults().stream().map(ClinicalAnalysis::getId).collect(Collectors.joining(", ")); - throw new CatalogException("Family {" + family.getId() + "} in use in Clinical Analyses: {" + clinicalIds + "}"); + throw new CatalogException("Could not delete family '" + family.getId() + "'. Family is in use in Clinical Analyses: '" + + clinicalIds + "'"); } } diff --git a/opencga-catalog/src/main/java/org/opencb/opencga/catalog/managers/IndividualManager.java b/opencga-catalog/src/main/java/org/opencb/opencga/catalog/managers/IndividualManager.java index 07d03a295ce..97057677b0d 100644 --- a/opencga-catalog/src/main/java/org/opencb/opencga/catalog/managers/IndividualManager.java +++ b/opencga-catalog/src/main/java/org/opencb/opencga/catalog/managers/IndividualManager.java @@ -710,10 +710,8 @@ private OpenCGAResult delete(Study study, Individual individual, ObjectMap param // Check if the individual can be deleted if (!params.getBoolean(Constants.FORCE, false)) { if (familyDataResult.getNumResults() > 0) { - throw new CatalogException("Individual found in the families: " + familyDataResult.getResults() - .stream() - .map(Family::getId) - .collect(Collectors.joining(", "))); + throw new CatalogException("Could not delete individual '" + individual.getId() + "'. Individual found in the families: " + + familyDataResult.getResults().stream().map(Family::getId).collect(Collectors.joining(", "))); } } else { logger.info("Forcing deletion of individuals belonging to families"); diff --git a/opencga-catalog/src/main/java/org/opencb/opencga/catalog/managers/SampleManager.java b/opencga-catalog/src/main/java/org/opencb/opencga/catalog/managers/SampleManager.java index 5ab592050d2..580bc1c2c2c 100644 --- a/opencga-catalog/src/main/java/org/opencb/opencga/catalog/managers/SampleManager.java +++ b/opencga-catalog/src/main/java/org/opencb/opencga/catalog/managers/SampleManager.java @@ -815,6 +815,7 @@ public OpenCGAResult resetAnnotations(String studyStr, String sampleStr, } private void checkSampleCanBeDeleted(long studyId, Sample sample, boolean force) throws CatalogException { + String msg = "Could not delete sample '" + sample.getId() + "'. "; // Look for files related with the sample Query query = new Query() .append(FileDBAdaptor.QueryParams.SAMPLE_IDS.key(), sample.getId()) @@ -834,9 +835,9 @@ private void checkSampleCanBeDeleted(long studyId, Sample sample, boolean force) } if (!errorFiles.isEmpty()) { if (force) { - throw new CatalogException("Associated files are used in storage: " + StringUtils.join(errorFiles, ", ")); + throw new CatalogException(msg + "Associated files are used in storage: " + StringUtils.join(errorFiles, ", ")); } else { - throw new CatalogException("Sample associated to the files: " + StringUtils.join(errorFiles, ", ")); + throw new CatalogException(msg + "Sample associated to the files: " + StringUtils.join(errorFiles, ", ")); } } @@ -865,14 +866,14 @@ private void checkSampleCanBeDeleted(long studyId, Sample sample, boolean force) } } if (associatedToDefaultCohort) { - throw new CatalogException("Sample in cohort " + StudyEntry.DEFAULT_COHORT); + throw new CatalogException(msg + "Sample in cohort " + StudyEntry.DEFAULT_COHORT); } if (!errorCohorts.isEmpty()) { if (force) { - throw new CatalogException("Sample present in cohorts in the process of calculating the stats: " + throw new CatalogException(msg + "Sample present in cohorts in the process of calculating the stats: " + StringUtils.join(errorCohorts, ", ")); } else { - throw new CatalogException("Sample present in cohorts: " + StringUtils.join(errorCohorts, ", ")); + throw new CatalogException(msg + "Sample present in cohorts: " + StringUtils.join(errorCohorts, ", ")); } } @@ -884,8 +885,7 @@ private void checkSampleCanBeDeleted(long studyId, Sample sample, boolean force) OpenCGAResult individualDataResult = individualDBAdaptor.get(query, new QueryOptions(QueryOptions.INCLUDE, Arrays.asList(IndividualDBAdaptor.QueryParams.UID.key(), IndividualDBAdaptor.QueryParams.ID.key()))); if (individualDataResult.getNumResults() > 0) { - throw new CatalogException("Sample from individual " + individualDataResult.first().getName() + "(" - + individualDataResult.first().getUid() + ")"); + throw new CatalogException(msg + "Sample is associated with individual '" + individualDataResult.first().getId() + "'."); } } } diff --git a/opencga-catalog/src/test/java/org/opencb/opencga/catalog/managers/SampleManagerTest.java b/opencga-catalog/src/test/java/org/opencb/opencga/catalog/managers/SampleManagerTest.java index 51c78472790..24c94481fe6 100644 --- a/opencga-catalog/src/test/java/org/opencb/opencga/catalog/managers/SampleManagerTest.java +++ b/opencga-catalog/src/test/java/org/opencb/opencga/catalog/managers/SampleManagerTest.java @@ -2786,7 +2786,7 @@ public void deleteInUseInCATest() throws CatalogException { try { catalogManager.getSampleManager().delete(studyFqn, Collections.singletonList(case1.getProband().getSamples().get(0).getId()), - new QueryOptions(ParamConstants.FORCE, true), token); + new QueryOptions(ParamConstants.FORCE, false), token); } catch (CatalogException e) { assertTrue(e.getMessage().contains("in use in 3 cases")); }