diff --git a/api/src/org/labkey/api/data/NameGenerator.java b/api/src/org/labkey/api/data/NameGenerator.java index f2dbaeb97ae..13f4b740ccd 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; @@ -78,6 +79,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 +741,15 @@ 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 = StringUtilsLabKey.unquoteString(valueStr).trim(); + 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("\""));