From 9ae0ac6b92d1a71daf0f9cae93b6868083d211c2 Mon Sep 17 00:00:00 2001 From: Lum Date: Thu, 21 May 2026 09:42:31 -0700 Subject: [PATCH 1/2] Address potential issues with file watcher listener registration that could result in orphaned listeners. Add unit tests. --- .../pipeline/analysis/FileAnalysisTaskPipelineImpl.java | 2 +- .../src/org/labkey/pipeline/api/PipelineManager.java | 9 ++++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/pipeline/src/org/labkey/pipeline/analysis/FileAnalysisTaskPipelineImpl.java b/pipeline/src/org/labkey/pipeline/analysis/FileAnalysisTaskPipelineImpl.java index 3651c6247cf..c56f3f54533 100644 --- a/pipeline/src/org/labkey/pipeline/analysis/FileAnalysisTaskPipelineImpl.java +++ b/pipeline/src/org/labkey/pipeline/analysis/FileAnalysisTaskPipelineImpl.java @@ -112,7 +112,7 @@ public class FileAnalysisTaskPipelineImpl extends TaskPipelineImpl> _defaultFields = List.of( new TextField("location", "Location to Watch", "./", false, null, LOCATION_HELP_TEXT, LOCATION_HREF), new CheckboxField("recursive", "Include Child Folders", false, false), - new TextField("filePattern", "File Pattern", "(^\\D*)\\.(?:tsv|txt|xls|xlsx)", false, null, FILE_PATTERN_HELP_TEXT, FILE_PATTERN_HREF), + new TextField("filePattern", "File Pattern", "(^\\D*)\\.(?:tsv|txt|xls|xlsx)", true, null, FILE_PATTERN_HELP_TEXT, FILE_PATTERN_HREF), new NumberField("quiet", "Quiet Period (Seconds)", null, true, 1.0, QUIET_HELP_TEXT, QUIET_HREF), new TextField("moveContainer", "Move to Container", "/Other Project/Subfolder A", false, null, MOVE_CONTAINER_HELP_TEXT, MOVE_CONTAINER_HREF), new TextField("moveDirectory", "Move to Subdirectory", "My Watched Files/Move", false, null, MOVE_DIRECTORY_HELP_TEXT, MOVE_DIRECTORY_HREF), diff --git a/pipeline/src/org/labkey/pipeline/api/PipelineManager.java b/pipeline/src/org/labkey/pipeline/api/PipelineManager.java index 1088d221358..f55ee096e4e 100644 --- a/pipeline/src/org/labkey/pipeline/api/PipelineManager.java +++ b/pipeline/src/org/labkey/pipeline/api/PipelineManager.java @@ -698,8 +698,15 @@ public static void validateTriggerConfiguration(TriggerConfiguration config, Con String pipelineId = config.getPipelineId(); boolean isEnabled = config.isEnabled(); + // validate that the file regular expression is not blank + if (StringUtils.isBlank(config.getFilePattern())) + { + errors.rejectValue("FilePattern", null, "File Pattern cannot be blank."); + return; + } + // validate that the config name is unique for this container - if (StringUtils.isNotEmpty(name)) + if (StringUtils.isNoneBlank(name)) { if (name.length() > 255) errors.rejectValue("Name", null, "Name must be less than 256 characters"); From efb343ff16e13b371fd9f3b82eaa1be8978df30d Mon Sep 17 00:00:00 2001 From: Lum Date: Wed, 27 May 2026 16:28:45 -0700 Subject: [PATCH 2/2] check for blank --- pipeline/src/org/labkey/pipeline/api/PipelineManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pipeline/src/org/labkey/pipeline/api/PipelineManager.java b/pipeline/src/org/labkey/pipeline/api/PipelineManager.java index f55ee096e4e..f415ae937fc 100644 --- a/pipeline/src/org/labkey/pipeline/api/PipelineManager.java +++ b/pipeline/src/org/labkey/pipeline/api/PipelineManager.java @@ -706,7 +706,7 @@ public static void validateTriggerConfiguration(TriggerConfiguration config, Con } // validate that the config name is unique for this container - if (StringUtils.isNoneBlank(name)) + if (StringUtils.isNotBlank(name)) { if (name.length() > 255) errors.rejectValue("Name", null, "Name must be less than 256 characters");