From ce995bd2ac4d4aa24300792bcb5c02173922793c Mon Sep 17 00:00:00 2001 From: labkey-nicka Date: Mon, 6 Apr 2026 09:37:18 -0700 Subject: [PATCH 1/4] Trigger interface changes --- .../org/labkey/studies/query/StudiesTriggerFactory.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/Studies/src/org/labkey/studies/query/StudiesTriggerFactory.java b/Studies/src/org/labkey/studies/query/StudiesTriggerFactory.java index bcec14717..36a598a85 100644 --- a/Studies/src/org/labkey/studies/query/StudiesTriggerFactory.java +++ b/Studies/src/org/labkey/studies/query/StudiesTriggerFactory.java @@ -10,6 +10,7 @@ import org.labkey.api.data.triggers.Trigger; import org.labkey.api.data.triggers.TriggerFactory; import org.labkey.api.query.FieldKey; +import org.labkey.api.query.QueryUpdateService; import org.labkey.api.query.ValidationException; import org.labkey.api.security.User; import org.labkey.api.util.PageFlowUtil; @@ -30,19 +31,19 @@ public class StudiesTriggerFactory implements TriggerFactory public static class StudyTrigger implements Trigger { @Override - public void beforeInsert(TableInfo table, Container c, User user, @Nullable Map newRow, ValidationException errors, Map extraContext) throws ValidationException + public void beforeInsert(TableInfo table, Container c, User user, @Nullable QueryUpdateService.InsertOption insertOption, @Nullable Map newRow, ValidationException errors, Map extraContext) throws ValidationException { - beforeInsert(table, c, user, newRow, errors, extraContext, null); + beforeInsert(table, c, user, insertOption, newRow, errors, extraContext, null); } @Override - public void beforeInsert(TableInfo table, Container c, User user, @Nullable Map newRow, ValidationException errors, Map extraContext, @Nullable Map existingRecord) throws ValidationException + public void beforeInsert(TableInfo table, Container c, User user, @Nullable QueryUpdateService.InsertOption insertOption, @Nullable Map newRow, ValidationException errors, Map extraContext, @Nullable Map existingRecord) throws ValidationException { possiblyResolveStudy(table, newRow, existingRecord, c); } @Override - public void beforeUpdate(TableInfo table, Container c, User user, @Nullable Map newRow, @Nullable Map oldRow, ValidationException errors, Map extraContext) throws ValidationException + public void beforeUpdate(TableInfo table, Container c, User user, @Nullable QueryUpdateService.InsertOption insertOption, @Nullable Map newRow, @Nullable Map oldRow, ValidationException errors, Map extraContext) throws ValidationException { possiblyResolveStudy(table, newRow, oldRow, c); } From 3936e0b0d1f5afbcd065f9e4609e31eac4296f59 Mon Sep 17 00:00:00 2001 From: Adam Rauch Date: Thu, 30 Apr 2026 15:01:08 -0700 Subject: [PATCH 2/4] Drop redundant index (#424) --- .../dbscripts/postgresql/sequenceanalysis-12.332-12.333.sql | 2 ++ .../src/org/labkey/sequenceanalysis/SequenceAnalysisModule.java | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) create mode 100644 SequenceAnalysis/resources/schemas/dbscripts/postgresql/sequenceanalysis-12.332-12.333.sql diff --git a/SequenceAnalysis/resources/schemas/dbscripts/postgresql/sequenceanalysis-12.332-12.333.sql b/SequenceAnalysis/resources/schemas/dbscripts/postgresql/sequenceanalysis-12.332-12.333.sql new file mode 100644 index 000000000..eb65d1040 --- /dev/null +++ b/SequenceAnalysis/resources/schemas/dbscripts/postgresql/sequenceanalysis-12.332-12.333.sql @@ -0,0 +1,2 @@ +-- sequence_coverage_analysis_id [analysis_id] overlaps with sequence_coverage_ref_nt_position [analysis_id, ref_nt_id, ref_nt_position, ref_nt_insert_index] +DROP INDEX sequenceanalysis.sequence_coverage_analysis_id; diff --git a/SequenceAnalysis/src/org/labkey/sequenceanalysis/SequenceAnalysisModule.java b/SequenceAnalysis/src/org/labkey/sequenceanalysis/SequenceAnalysisModule.java index eb76eeda3..263c966d4 100644 --- a/SequenceAnalysis/src/org/labkey/sequenceanalysis/SequenceAnalysisModule.java +++ b/SequenceAnalysis/src/org/labkey/sequenceanalysis/SequenceAnalysisModule.java @@ -210,7 +210,7 @@ public String getName() @Override public Double getSchemaVersion() { - return 12.332; + return 12.333; } @Override From 3ada1278900dc54b5bdc614223517c793565396a Mon Sep 17 00:00:00 2001 From: Adam Rauch Date: Wed, 27 May 2026 10:32:30 -0700 Subject: [PATCH 3/4] Migrate away from deprecated methods (#426) --- .../sequenceanalysis/OutputIntegrationTests.java | 2 +- .../SequenceAnalysisController.java | 2 +- .../sequenceanalysis/SequenceAnalysisManager.java | 2 +- .../SequenceAnalysisServiceImpl.java | 2 +- .../sequenceanalysis/SequenceIntegrationTests.java | 2 +- .../pipeline/CreateReferenceLibraryTask.java | 2 +- .../pipeline/IlluminaFastqSplitter.java | 2 +- .../pipeline/IlluminaImportTask.java | 2 +- .../pipeline/ImportGenomeTrackTask.java | 2 +- Studies/src/org/labkey/studies/StudiesManager.java | 13 +------------ .../labkey/jbrowse/pipeline/JBrowseSessionTask.java | 2 +- 11 files changed, 11 insertions(+), 22 deletions(-) diff --git a/SequenceAnalysis/src/org/labkey/sequenceanalysis/OutputIntegrationTests.java b/SequenceAnalysis/src/org/labkey/sequenceanalysis/OutputIntegrationTests.java index 41b45779e..7d8e716d8 100644 --- a/SequenceAnalysis/src/org/labkey/sequenceanalysis/OutputIntegrationTests.java +++ b/SequenceAnalysis/src/org/labkey/sequenceanalysis/OutputIntegrationTests.java @@ -50,7 +50,7 @@ import java.util.Map; import java.util.Set; -import static org.labkey.api.exp.api.ExperimentService.asInteger; +import static org.labkey.api.util.IntegerUtils.asInteger; /** * Created by bimber on 9/18/2016. diff --git a/SequenceAnalysis/src/org/labkey/sequenceanalysis/SequenceAnalysisController.java b/SequenceAnalysis/src/org/labkey/sequenceanalysis/SequenceAnalysisController.java index 25a8b5268..3f74c0df3 100644 --- a/SequenceAnalysis/src/org/labkey/sequenceanalysis/SequenceAnalysisController.java +++ b/SequenceAnalysis/src/org/labkey/sequenceanalysis/SequenceAnalysisController.java @@ -210,7 +210,7 @@ import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; -import static org.labkey.api.exp.api.ExperimentService.asInteger; +import static org.labkey.api.util.IntegerUtils.asInteger; import static org.labkey.sequenceanalysis.SequenceIntegrationTests.PIPELINE_PROP_NAME; public class SequenceAnalysisController extends SpringActionController diff --git a/SequenceAnalysis/src/org/labkey/sequenceanalysis/SequenceAnalysisManager.java b/SequenceAnalysis/src/org/labkey/sequenceanalysis/SequenceAnalysisManager.java index 59fe53d6d..c2bca075c 100644 --- a/SequenceAnalysis/src/org/labkey/sequenceanalysis/SequenceAnalysisManager.java +++ b/SequenceAnalysis/src/org/labkey/sequenceanalysis/SequenceAnalysisManager.java @@ -91,7 +91,7 @@ import java.util.Map; import java.util.Set; -import static org.labkey.api.exp.api.ExperimentService.asInteger; +import static org.labkey.api.util.IntegerUtils.asInteger; public class SequenceAnalysisManager { diff --git a/SequenceAnalysis/src/org/labkey/sequenceanalysis/SequenceAnalysisServiceImpl.java b/SequenceAnalysis/src/org/labkey/sequenceanalysis/SequenceAnalysisServiceImpl.java index 976c9009e..11cbb37c3 100644 --- a/SequenceAnalysis/src/org/labkey/sequenceanalysis/SequenceAnalysisServiceImpl.java +++ b/SequenceAnalysis/src/org/labkey/sequenceanalysis/SequenceAnalysisServiceImpl.java @@ -69,7 +69,7 @@ import java.util.Set; import java.util.function.Function; -import static org.labkey.api.exp.api.ExperimentService.asLong; +import static org.labkey.api.util.IntegerUtils.asLong; /** * User: bimber diff --git a/SequenceAnalysis/src/org/labkey/sequenceanalysis/SequenceIntegrationTests.java b/SequenceAnalysis/src/org/labkey/sequenceanalysis/SequenceIntegrationTests.java index 45d1737d4..4ee5aa85f 100644 --- a/SequenceAnalysis/src/org/labkey/sequenceanalysis/SequenceIntegrationTests.java +++ b/SequenceAnalysis/src/org/labkey/sequenceanalysis/SequenceIntegrationTests.java @@ -91,7 +91,7 @@ import java.util.Set; import java.util.stream.Collectors; -import static org.labkey.api.exp.api.ExperimentService.asInteger; +import static org.labkey.api.util.IntegerUtils.asInteger; /** * User: bimber diff --git a/SequenceAnalysis/src/org/labkey/sequenceanalysis/pipeline/CreateReferenceLibraryTask.java b/SequenceAnalysis/src/org/labkey/sequenceanalysis/pipeline/CreateReferenceLibraryTask.java index b2784cf17..7a6f149db 100644 --- a/SequenceAnalysis/src/org/labkey/sequenceanalysis/pipeline/CreateReferenceLibraryTask.java +++ b/SequenceAnalysis/src/org/labkey/sequenceanalysis/pipeline/CreateReferenceLibraryTask.java @@ -69,7 +69,7 @@ import java.util.Map; import java.util.Set; -import static org.labkey.api.exp.api.ExperimentService.asInteger; +import static org.labkey.api.util.IntegerUtils.asInteger; /** * User: bbimber diff --git a/SequenceAnalysis/src/org/labkey/sequenceanalysis/pipeline/IlluminaFastqSplitter.java b/SequenceAnalysis/src/org/labkey/sequenceanalysis/pipeline/IlluminaFastqSplitter.java index a88fd7f5d..5e6a3f900 100644 --- a/SequenceAnalysis/src/org/labkey/sequenceanalysis/pipeline/IlluminaFastqSplitter.java +++ b/SequenceAnalysis/src/org/labkey/sequenceanalysis/pipeline/IlluminaFastqSplitter.java @@ -42,7 +42,7 @@ import java.util.Set; import java.util.zip.GZIPOutputStream; -import static org.labkey.api.exp.api.ExperimentService.asLong; +import static org.labkey.api.util.IntegerUtils.asLong; /** * This is designed to parse the FASTQ files produced by a single run on an illumina instructment and produce one gzipped FASTQ diff --git a/SequenceAnalysis/src/org/labkey/sequenceanalysis/pipeline/IlluminaImportTask.java b/SequenceAnalysis/src/org/labkey/sequenceanalysis/pipeline/IlluminaImportTask.java index 8c320d331..b436f501d 100644 --- a/SequenceAnalysis/src/org/labkey/sequenceanalysis/pipeline/IlluminaImportTask.java +++ b/SequenceAnalysis/src/org/labkey/sequenceanalysis/pipeline/IlluminaImportTask.java @@ -58,7 +58,7 @@ import java.util.List; import java.util.Map; -import static org.labkey.api.exp.api.ExperimentService.asInteger; +import static org.labkey.api.util.IntegerUtils.asInteger; /** * User: bbimber diff --git a/SequenceAnalysis/src/org/labkey/sequenceanalysis/pipeline/ImportGenomeTrackTask.java b/SequenceAnalysis/src/org/labkey/sequenceanalysis/pipeline/ImportGenomeTrackTask.java index 53578ab71..6c13f1249 100644 --- a/SequenceAnalysis/src/org/labkey/sequenceanalysis/pipeline/ImportGenomeTrackTask.java +++ b/SequenceAnalysis/src/org/labkey/sequenceanalysis/pipeline/ImportGenomeTrackTask.java @@ -82,7 +82,7 @@ import java.util.Map; import java.util.Set; -import static org.labkey.api.exp.api.ExperimentService.asInteger; +import static org.labkey.api.util.IntegerUtils.asInteger; /** * User: bbimber diff --git a/Studies/src/org/labkey/studies/StudiesManager.java b/Studies/src/org/labkey/studies/StudiesManager.java index eedaedba3..f7c23f2b3 100644 --- a/Studies/src/org/labkey/studies/StudiesManager.java +++ b/Studies/src/org/labkey/studies/StudiesManager.java @@ -1,6 +1,5 @@ package org.labkey.studies; -import org.apache.commons.collections.map.CaseInsensitiveMap; import org.apache.commons.io.IOUtils; import org.json.JSONObject; import org.junit.AfterClass; @@ -19,13 +18,9 @@ import org.labkey.api.module.Module; import org.labkey.api.module.ModuleLoader; import org.labkey.api.query.BatchValidationException; -import org.labkey.api.query.DuplicateKeyException; import org.labkey.api.query.FieldKey; -import org.labkey.api.query.InvalidKeyException; import org.labkey.api.query.QueryService; import org.labkey.api.query.QueryUpdateService; -import org.labkey.api.query.QueryUpdateServiceException; -import org.labkey.api.query.SimpleUserSchema; import org.labkey.api.query.UserSchema; import org.labkey.api.resource.FileResource; import org.labkey.api.resource.Resource; @@ -34,23 +29,17 @@ import org.labkey.api.util.PageFlowUtil; import org.labkey.api.util.StringUtilsLabKey; import org.labkey.api.util.TestContext; -import org.labkey.studies.query.StudiesUserSchema; - import java.io.FileInputStream; import java.io.InputStream; -import java.sql.SQLException; import java.util.ArrayList; -import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; -import java.util.stream.Collectors; -import static com.fasterxml.jackson.databind.type.LogicalType.Collection; -import static org.labkey.api.exp.api.ExperimentService.asInteger; +import static org.labkey.api.util.IntegerUtils.asInteger; @RunWith(Enclosed.class) public class StudiesManager diff --git a/jbrowse/src/org/labkey/jbrowse/pipeline/JBrowseSessionTask.java b/jbrowse/src/org/labkey/jbrowse/pipeline/JBrowseSessionTask.java index dd8b9b0f6..2739ef11c 100644 --- a/jbrowse/src/org/labkey/jbrowse/pipeline/JBrowseSessionTask.java +++ b/jbrowse/src/org/labkey/jbrowse/pipeline/JBrowseSessionTask.java @@ -44,7 +44,7 @@ import java.util.List; import java.util.Map; -import static org.labkey.api.exp.api.ExperimentService.asInteger; +import static org.labkey.api.util.IntegerUtils.asInteger; /** * User: bbimber From 31a70e66af0dc4df00d59daed3254627a854b018 Mon Sep 17 00:00:00 2001 From: Josh Eckels Date: Mon, 1 Jun 2026 17:01:42 -0700 Subject: [PATCH 4/4] ProcessBuilder -> LabKeyProcessBuilder (#427) * Migrate from ProcessBuilder to LabKeyProcessBuilder * Migrate from ProcessBuilder to LabKeyProcessBuilder --- .../run/AbstractCommandWrapper.java | 13 +++++++------ .../SequenceRemoteIntegrationTests.java | 3 ++- .../run/preprocessing/TrimmomaticWrapper.java | 3 ++- .../sequenceanalysis/run/util/FastqcRunner.java | 3 ++- 4 files changed, 13 insertions(+), 9 deletions(-) diff --git a/SequenceAnalysis/api-src/org/labkey/api/sequenceanalysis/run/AbstractCommandWrapper.java b/SequenceAnalysis/api-src/org/labkey/api/sequenceanalysis/run/AbstractCommandWrapper.java index 27152ed45..4f45d5cbf 100644 --- a/SequenceAnalysis/api-src/org/labkey/api/sequenceanalysis/run/AbstractCommandWrapper.java +++ b/SequenceAnalysis/api-src/org/labkey/api/sequenceanalysis/run/AbstractCommandWrapper.java @@ -17,12 +17,13 @@ import org.apache.commons.lang3.StringUtils; import org.apache.logging.log4j.Level; -import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import org.jetbrains.annotations.Nullable; import org.labkey.api.pipeline.PipelineJobException; import org.labkey.api.pipeline.PipelineJobService; import org.labkey.api.sequenceanalysis.pipeline.SequencePipelineService; +import org.labkey.api.util.LabKeyProcessBuilder; import org.labkey.api.util.StringUtilsLabKey; import java.io.BufferedReader; @@ -43,7 +44,7 @@ abstract public class AbstractCommandWrapper implements CommandWrapper { private File _outputDir = null; private File _workingDir = null; - private Logger _log; + private final Logger _log; private boolean _logPath = false; private Level _logLevel = Level.DEBUG; private boolean _warnNonZeroExits = true; @@ -105,9 +106,9 @@ public void execute(List params, ProcessBuilder.Redirect redirect) throw execute(params, redirect, null); } - public ProcessBuilder getProcessBuilder(List params) + public LabKeyProcessBuilder getProcessBuilder(List params) { - ProcessBuilder pb = new ProcessBuilder(params); + LabKeyProcessBuilder pb = new LabKeyProcessBuilder(params); setPath(pb); if (!_environment.isEmpty()) @@ -134,7 +135,7 @@ private void execute(List params, ProcessBuilder.Redirect redirect, @Nul getLogger().info("\t" + StringUtils.join(params, " ")); _commandsExecuted.add(StringUtils.join(params, " ")); - ProcessBuilder pb = getProcessBuilder(params); + LabKeyProcessBuilder pb = getProcessBuilder(params); pb.redirectErrorStream(false); if (redirect != null) { @@ -197,7 +198,7 @@ public Integer getLastReturnCode() return _lastReturnCode; } - private void setPath(ProcessBuilder pb) + private void setPath(LabKeyProcessBuilder pb) { // Update PATH environment variable to make sure all files in the tools // directory and the directory of the executable or on the path. diff --git a/SequenceAnalysis/src/org/labkey/sequenceanalysis/SequenceRemoteIntegrationTests.java b/SequenceAnalysis/src/org/labkey/sequenceanalysis/SequenceRemoteIntegrationTests.java index 57923f571..b0f9b5ab6 100644 --- a/SequenceAnalysis/src/org/labkey/sequenceanalysis/SequenceRemoteIntegrationTests.java +++ b/SequenceAnalysis/src/org/labkey/sequenceanalysis/SequenceRemoteIntegrationTests.java @@ -16,6 +16,7 @@ import org.labkey.api.pipeline.WorkDirectory; import org.labkey.api.reader.Readers; import org.labkey.api.util.FileUtil; +import org.labkey.api.util.LabKeyProcessBuilder; import org.labkey.api.writer.PrintWriters; import org.labkey.sequenceanalysis.pipeline.AlignmentInitTask; import org.labkey.sequenceanalysis.pipeline.PrepareAlignerIndexesTask; @@ -212,7 +213,7 @@ protected void executeJobRemote(File workDir, @Nullable File jobJson) throws IOE args.add(jobJson.toURI().toString()); } - ProcessBuilder pb = new ProcessBuilder(args); + LabKeyProcessBuilder pb = new LabKeyProcessBuilder(args); pb.directory(workDir); _log.info("Executing job in '{}': {}", pb.directory().getAbsolutePath(), String.join(" ", pb.command())); diff --git a/SequenceAnalysis/src/org/labkey/sequenceanalysis/run/preprocessing/TrimmomaticWrapper.java b/SequenceAnalysis/src/org/labkey/sequenceanalysis/run/preprocessing/TrimmomaticWrapper.java index 2494c8504..493b2dcff 100644 --- a/SequenceAnalysis/src/org/labkey/sequenceanalysis/run/preprocessing/TrimmomaticWrapper.java +++ b/SequenceAnalysis/src/org/labkey/sequenceanalysis/run/preprocessing/TrimmomaticWrapper.java @@ -21,6 +21,7 @@ import org.labkey.api.sequenceanalysis.run.AbstractCommandWrapper; import org.labkey.api.util.FileUtil; import org.labkey.api.util.JobRunner; +import org.labkey.api.util.LabKeyProcessBuilder; import org.labkey.api.util.Pair; import org.labkey.api.util.StringUtilsLabKey; import org.labkey.sequenceanalysis.model.AdapterModel; @@ -272,7 +273,7 @@ else if (FileUtils.sizeOf(files.get(2)) == 0) public void doTrim(List params) throws PipelineJobException { - ProcessBuilder pb = getProcessBuilder(params); + LabKeyProcessBuilder pb = getProcessBuilder(params); getLogger().info(StringUtils.join(params, " ")); pb.redirectErrorStream(false); Process p = null; diff --git a/SequenceAnalysis/src/org/labkey/sequenceanalysis/run/util/FastqcRunner.java b/SequenceAnalysis/src/org/labkey/sequenceanalysis/run/util/FastqcRunner.java index 58f6be91a..5c1ab565d 100644 --- a/SequenceAnalysis/src/org/labkey/sequenceanalysis/run/util/FastqcRunner.java +++ b/SequenceAnalysis/src/org/labkey/sequenceanalysis/run/util/FastqcRunner.java @@ -33,6 +33,7 @@ import org.labkey.api.util.Compress; import org.labkey.api.util.FileType; import org.labkey.api.util.FileUtil; +import org.labkey.api.util.LabKeyProcessBuilder; import org.labkey.api.util.Path; import org.labkey.api.util.StringUtilsLabKey; import org.labkey.sequenceanalysis.SequenceAnalysisModule; @@ -139,7 +140,7 @@ private void runForFile(File f) _logger.info("running fastqc:"); _logger.info(StringUtils.join(params, " ")); - ProcessBuilder pb = new ProcessBuilder(params); + LabKeyProcessBuilder pb = new LabKeyProcessBuilder(params); pb.redirectErrorStream(true); pb.directory(f.getParentFile());