diff --git a/GenotypeAssays/src/org/labkey/genotypeassays/GenotypeAssaysController.java b/GenotypeAssays/src/org/labkey/genotypeassays/GenotypeAssaysController.java index 0d9ab5f37..de0902f24 100644 --- a/GenotypeAssays/src/org/labkey/genotypeassays/GenotypeAssaysController.java +++ b/GenotypeAssays/src/org/labkey/genotypeassays/GenotypeAssaysController.java @@ -16,6 +16,7 @@ package org.labkey.genotypeassays; +import org.apache.commons.text.StringEscapeUtils; import org.json.JSONArray; import org.labkey.api.action.ApiResponse; import org.labkey.api.action.ApiSimpleResponse; @@ -37,6 +38,7 @@ import org.springframework.validation.Errors; import org.springframework.web.servlet.ModelAndView; +import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -130,7 +132,8 @@ public ApiResponse execute(CacheAnalysesForm form, BindException errors) return null; } - Pair, List> ret = GenotypeAssaysManager.get().cacheAnalyses(getViewContext(), protocol, form.getAlleleNames()); + String[] alleleNames = Arrays.stream(form.getAlleleNames()).map(StringEscapeUtils::unescapeHtml4).toArray(String[]::new); + Pair, List> ret = GenotypeAssaysManager.get().cacheAnalyses(getViewContext(), protocol, alleleNames); resultProperties.put("runsCreated", ret.first); resultProperties.put("runsDeleted", ret.second); } diff --git a/GenotypeAssays/src/org/labkey/genotypeassays/GenotypeAssaysManager.java b/GenotypeAssays/src/org/labkey/genotypeassays/GenotypeAssaysManager.java index fc48d2aef..42a194f8a 100644 --- a/GenotypeAssays/src/org/labkey/genotypeassays/GenotypeAssaysManager.java +++ b/GenotypeAssays/src/org/labkey/genotypeassays/GenotypeAssaysManager.java @@ -60,6 +60,7 @@ import java.util.List; import java.util.Map; import java.util.Set; +import java.util.concurrent.atomic.AtomicInteger; public class GenotypeAssaysManager { @@ -121,6 +122,7 @@ public Pair, List> cacheAnalyses(final ViewContext ctx, f final Map>> rowHash = new HashMap<>(); final Map> toDeleteByAnalysis = new HashMap<>(); + AtomicInteger records = new AtomicInteger(); TableSelector tsAlignments = new TableSelector(tableAlignments, cols.values(), new SimpleFilter(FieldKey.fromString("key"), Arrays.asList(pks), CompareType.IN), null); tsAlignments.forEach(new Selector.ForEachBlock() { @@ -128,6 +130,7 @@ public Pair, List> cacheAnalyses(final ViewContext ctx, f public void exec(ResultSet object) throws SQLException { Results rs = new ResultsImpl(object, cols); + records.getAndIncrement(); int analysisId = rs.getInt(FieldKey.fromString("analysis_id")); String lineages = rs.getString(FieldKey.fromString("lineages")); @@ -167,6 +170,11 @@ public void exec(ResultSet object) throws SQLException } }); + if (records.get() != pks.length) + { + throw new IllegalStateException("The number of records found did not match the number supplied. This indicates a problem with the import."); + } + if (!rowHash.isEmpty()) { processSet(SBT_LINEAGE_ASSAY_TYPE, rowHash, assayDataTable, u, ctx, toDeleteByAnalysis, ap, protocol, runsCreated);