From 0b24fe0af2a119c93b766720c5b791d929a067ba Mon Sep 17 00:00:00 2001 From: XingY Date: Sun, 8 Feb 2026 12:29:32 -0800 Subject: [PATCH 1/3] GitHub Issue 827: Cannot aliquot samples where parent sample has a comma in the name AND the aliquot naming pattern references ancestor lineage --- api/src/org/labkey/api/data/NameGenerator.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/api/src/org/labkey/api/data/NameGenerator.java b/api/src/org/labkey/api/data/NameGenerator.java index f2dbaeb97ae..e6e4dcd6478 100644 --- a/api/src/org/labkey/api/data/NameGenerator.java +++ b/api/src/org/labkey/api/data/NameGenerator.java @@ -78,6 +78,7 @@ import java.util.stream.Stream; import static org.labkey.api.exp.api.ExpMaterial.ALIQUOTED_FROM_INPUT; +import static org.labkey.api.exp.api.ExpMaterial.ALIQUOTED_FROM_INPUT_LABEL; import static org.labkey.api.exp.api.ExpRunItem.INPUT_PARENT; import static org.labkey.api.exp.api.ExperimentJSONConverter.DATA_INPUTS; import static org.labkey.api.exp.api.ExperimentJSONConverter.MATERIAL_INPUTS; @@ -739,6 +740,17 @@ public static Stream parentNames(Object value, String parentColName, TSV if (StringUtils.isEmpty((valueStr).trim())) return Stream.empty(); + // GitHub Issue 827: Cannot aliquot samples where parent sample has a comma in the name AND the aliquot naming pattern references ancestor lineage + if (ALIQUOTED_FROM_INPUT.equalsIgnoreCase(parentColName) || ALIQUOTED_FROM_INPUT_LABEL.equalsIgnoreCase(parentColName)) + { + boolean isQuoted = (valueStr.contains(",") || valueStr.contains("\n") || valueStr.contains("\r")) && (valueStr.startsWith("\"") && valueStr.endsWith("\"")) + if (isQuoted) + { + valueStr = valueStr.substring(1, valueStr.length() - 1); + } + return Stream.of(valueStr); + } + // Issue 44841: The names of the parents may include commas, so we parse the set of parent names // using TabLoader instead of just splitting on the comma. boolean likelyAlreadyQuoted = valueStr.contains(",") || valueStr.contains("\n") || valueStr.contains("\r") || (valueStr.startsWith("\"") && valueStr.endsWith("\"")); From 5d53ef188a4deba95454d2b308044892aa81c2b4 Mon Sep 17 00:00:00 2001 From: XingY Date: Sun, 8 Feb 2026 12:49:21 -0800 Subject: [PATCH 2/3] use string util --- api/src/org/labkey/api/data/NameGenerator.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/api/src/org/labkey/api/data/NameGenerator.java b/api/src/org/labkey/api/data/NameGenerator.java index e6e4dcd6478..30e918133f9 100644 --- a/api/src/org/labkey/api/data/NameGenerator.java +++ b/api/src/org/labkey/api/data/NameGenerator.java @@ -51,6 +51,7 @@ import org.labkey.api.util.StringExpressionFactory; import org.labkey.api.util.StringExpressionFactory.AbstractStringExpression.NullValueBehavior; import org.labkey.api.util.StringExpressionFactory.FieldKeyStringExpression; +import org.labkey.api.util.StringUtilsLabKey; import org.labkey.api.util.SubstitutionFormat; import java.io.IOException; @@ -745,9 +746,7 @@ public static Stream parentNames(Object value, String parentColName, TSV { boolean isQuoted = (valueStr.contains(",") || valueStr.contains("\n") || valueStr.contains("\r")) && (valueStr.startsWith("\"") && valueStr.endsWith("\"")) if (isQuoted) - { - valueStr = valueStr.substring(1, valueStr.length() - 1); - } + valueStr = StringUtilsLabKey.unquoteString(valueStr).trim(); return Stream.of(valueStr); } From ce703ce9416d70aceebf9316246b2d0cd3f98932 Mon Sep 17 00:00:00 2001 From: XingY Date: Sun, 8 Feb 2026 12:58:26 -0800 Subject: [PATCH 3/3] fix build --- api/src/org/labkey/api/data/NameGenerator.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/src/org/labkey/api/data/NameGenerator.java b/api/src/org/labkey/api/data/NameGenerator.java index 30e918133f9..13f4b740ccd 100644 --- a/api/src/org/labkey/api/data/NameGenerator.java +++ b/api/src/org/labkey/api/data/NameGenerator.java @@ -744,7 +744,7 @@ public static Stream parentNames(Object value, String parentColName, TSV // GitHub Issue 827: Cannot aliquot samples where parent sample has a comma in the name AND the aliquot naming pattern references ancestor lineage if (ALIQUOTED_FROM_INPUT.equalsIgnoreCase(parentColName) || ALIQUOTED_FROM_INPUT_LABEL.equalsIgnoreCase(parentColName)) { - boolean isQuoted = (valueStr.contains(",") || valueStr.contains("\n") || valueStr.contains("\r")) && (valueStr.startsWith("\"") && valueStr.endsWith("\"")) + boolean isQuoted = (valueStr.contains(",") || valueStr.contains("\n") || valueStr.contains("\r")) && (valueStr.startsWith("\"") && valueStr.endsWith("\"")); if (isQuoted) valueStr = StringUtilsLabKey.unquoteString(valueStr).trim(); return Stream.of(valueStr);