From e954f3bf9fcd344b9ddec6c69210207462536bd7 Mon Sep 17 00:00:00 2001 From: Jason Loux Date: Wed, 18 Mar 2026 09:48:41 -0400 Subject: [PATCH] Add new obsVarCount stat to create and append workflows --- .../middleware/process/AppendStatistic.java | 8 +++++++- .../middleware/process/ImportTableProcess.java | 8 +++++--- .../workflow/CreateNewExperimentWorkflow.java | 15 ++++++++++++++- 3 files changed, 26 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/breedinginsight/brapps/importer/services/processors/experiment/appendoverwrite/middleware/process/AppendStatistic.java b/src/main/java/org/breedinginsight/brapps/importer/services/processors/experiment/appendoverwrite/middleware/process/AppendStatistic.java index 0893df9f2..58381bcbe 100644 --- a/src/main/java/org/breedinginsight/brapps/importer/services/processors/experiment/appendoverwrite/middleware/process/AppendStatistic.java +++ b/src/main/java/org/breedinginsight/brapps/importer/services/processors/experiment/appendoverwrite/middleware/process/AppendStatistic.java @@ -18,6 +18,7 @@ package org.breedinginsight.brapps.importer.services.processors.experiment.appendoverwrite.middleware.process; import io.micronaut.context.annotation.Prototype; +import lombok.Setter; import org.breedinginsight.brapps.importer.model.response.ImportPreviewStatistics; import java.util.HashSet; @@ -32,6 +33,8 @@ public class AppendStatistic { private int newCount; private int existingCount; private int mutatedCount; + @Setter + private int obsVarCount; public AppendStatistic() { this.clearData(); @@ -44,6 +47,7 @@ public void clearData() { this.newCount = 0; this.existingCount = 0; this.mutatedCount = 0; + this.obsVarCount = 0; } public int incrementNewCount(Integer value) { int increment = 0; @@ -94,6 +98,7 @@ public Map constructPreviewMap() { ImportPreviewStatistics newStats = ImportPreviewStatistics.builder().newObjectCount(newCount).build(); ImportPreviewStatistics existingStats = ImportPreviewStatistics.builder().newObjectCount(existingCount).build(); ImportPreviewStatistics mutatedStats = ImportPreviewStatistics.builder().newObjectCount(mutatedCount).build(); + ImportPreviewStatistics obsVarStats = ImportPreviewStatistics.builder().newObjectCount(obsVarCount).build(); return Map.of( "Environments", environmentStats, @@ -101,7 +106,8 @@ public Map constructPreviewMap() { "GIDs", gidStats, "Observations", newStats, "Existing_Observations", existingStats, - "Mutated_Observations", mutatedStats + "Mutated_Observations", mutatedStats, + "Observation_Variables", obsVarStats ); } } diff --git a/src/main/java/org/breedinginsight/brapps/importer/services/processors/experiment/appendoverwrite/middleware/process/ImportTableProcess.java b/src/main/java/org/breedinginsight/brapps/importer/services/processors/experiment/appendoverwrite/middleware/process/ImportTableProcess.java index b9815ccfd..9aa92fca7 100644 --- a/src/main/java/org/breedinginsight/brapps/importer/services/processors/experiment/appendoverwrite/middleware/process/ImportTableProcess.java +++ b/src/main/java/org/breedinginsight/brapps/importer/services/processors/experiment/appendoverwrite/middleware/process/ImportTableProcess.java @@ -218,7 +218,7 @@ public AppendOverwriteMiddlewareContext process(AppendOverwriteMiddlewareContext */ if (phenotypeCols.isEmpty()) { processedData = processedDataFactory.undefinedDatasetBean(); - updatePreviewStatistics(processedData, context, studyName, unitId); + updatePreviewStatistics(processedData, context, studyName, unitId, phenotypeCols.size()); } // Assemble the pending observation data for all phenotypes @@ -332,7 +332,7 @@ public AppendOverwriteMiddlewareContext process(AppendOverwriteMiddlewareContext processedData.getValidationErrors().ifPresent(errList -> errList.forEach(e -> validationErrors.addError(rowNum + 2, e))); // +2 to account for header row and excel file 1-based row index // Update import preview statistics and set in the context - updatePreviewStatistics(processedData, context, studyName, unitId); + updatePreviewStatistics(processedData, context, studyName, unitId, varNames.size()); // Construct a pending observation Optional> pendingProcessedData = Optional.ofNullable(processedData.constructPendingObservation()); @@ -395,12 +395,14 @@ private boolean isChanged(String cellData, BrAPIObservation observation, String private void updatePreviewStatistics(VisitedObservationData processedData, AppendOverwriteMiddlewareContext context, String studyName, - String unitId) { + String unitId, + int obsVarCount) { // Update import preview statistics and set in the context processedData.updateTally(statistic); statistic.addEnvironmentName(studyName); statistic.addObservationUnitId(unitId); statistic.addGid(context.getAppendOverwriteWorkflowContext().getPendingGermplasmByOUId().get(unitId).getBrAPIObject().getAccessionNumber()); + statistic.setObsVarCount(obsVarCount); context.getAppendOverwriteWorkflowContext().setStatistic(statistic); } } diff --git a/src/main/java/org/breedinginsight/brapps/importer/services/processors/experiment/create/workflow/CreateNewExperimentWorkflow.java b/src/main/java/org/breedinginsight/brapps/importer/services/processors/experiment/create/workflow/CreateNewExperimentWorkflow.java index a6b6ea8b9..36bfb772d 100644 --- a/src/main/java/org/breedinginsight/brapps/importer/services/processors/experiment/create/workflow/CreateNewExperimentWorkflow.java +++ b/src/main/java/org/breedinginsight/brapps/importer/services/processors/experiment/create/workflow/CreateNewExperimentWorkflow.java @@ -258,6 +258,15 @@ private Map generateStatisticsMap(PendingData p .count() ); + // Assume observationVariableName is set when pending observations are created. + int obsVarCount = Math.toIntExact( + observationByHash.values() + .stream() + .map(o -> o.getBrAPIObject().getObservationVariableName()) + .distinct() + .count() + ); + ImportPreviewStatistics environmentStats = ImportPreviewStatistics.builder() .newObjectCount(environmentNameCounter.size()) .build(); @@ -276,6 +285,9 @@ private Map generateStatisticsMap(PendingData p ImportPreviewStatistics mutatedObservationStats = ImportPreviewStatistics.builder() .newObjectCount(numMutatedObservations) .build(); + ImportPreviewStatistics obsVarStats = ImportPreviewStatistics.builder() + .newObjectCount(obsVarCount) + .build(); return Map.of( "Environments", environmentStats, @@ -283,7 +295,8 @@ private Map generateStatisticsMap(PendingData p "GIDs", gidStats, "Observations", observationStats, "Existing_Observations", existingObservationStats, - "Mutated_Observations", mutatedObservationStats + "Mutated_Observations", mutatedObservationStats, + "Observation_Variables", obsVarStats ); }