diff --git a/api-src/org/labkey/api/targetedms/TargetedMSService.java b/api-src/org/labkey/api/targetedms/TargetedMSService.java index 0b8a44b43..50319d210 100644 --- a/api-src/org/labkey/api/targetedms/TargetedMSService.java +++ b/api-src/org/labkey/api/targetedms/TargetedMSService.java @@ -22,6 +22,7 @@ import org.labkey.api.data.TableInfo; import org.labkey.api.exp.ExperimentRunType; import org.labkey.api.exp.XarFormatException; +import org.labkey.api.exp.api.ExpData; import org.labkey.api.pipeline.PipelineValidationException; import org.labkey.api.query.UserSchema; import org.labkey.api.security.User; @@ -72,6 +73,9 @@ enum FolderType ITargetedMSRun getRunByFileName(String fileName, Container container); List getRuns(Container container); ITargetedMSRun getRunByLsid(String lsid, Container container); + + boolean updateSkydDataId(ITargetedMSRun run, ExpData newSkydData, User user); + List getReplicateAnnotations(Container container); void registerSkylineDocumentImportListener(SkylineDocumentImportListener skyLineDocumentImportListener); List getSkylineDocumentImportListener(); diff --git a/src/org/labkey/targetedms/TargetedMSManager.java b/src/org/labkey/targetedms/TargetedMSManager.java index daf9a272a..7f4b8df89 100644 --- a/src/org/labkey/targetedms/TargetedMSManager.java +++ b/src/org/labkey/targetedms/TargetedMSManager.java @@ -73,6 +73,7 @@ import org.labkey.api.query.UserSchema; import org.labkey.api.security.User; import org.labkey.api.security.permissions.DeletePermission; +import org.labkey.api.targetedms.ITargetedMSRun; import org.labkey.api.targetedms.RepresentativeDataState; import org.labkey.api.targetedms.RunRepresentativeDataState; import org.labkey.api.targetedms.TargetedMSService; @@ -123,6 +124,7 @@ import java.util.LinkedHashSet; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.Set; import java.util.TreeMap; import java.util.TreeSet; @@ -861,6 +863,30 @@ public static TargetedMSRun getRunByLsid(String lsid, Container c) throw new IllegalArgumentException("More than one TargetedMS runs found for LSID "+lsid); } + public static boolean updateSkydDataId(ITargetedMSRun run, ExpData newSkydData, User user) + { + if (!(run instanceof TargetedMSRun)) + { + throw new IllegalArgumentException("Invalid run type. Expected TargetedMSRun but received " + + (run != null ? run.getClass().getName() : "null")); + } + if (newSkydData == null) + { + throw new IllegalArgumentException("Cannot update with null newSkydData. A valid ExpData object is required"); + } + + TargetedMSRun targetedRun = (TargetedMSRun) run; + + ExpRun expRun = ExperimentService.get().getExpRun(targetedRun.getExperimentRunLSID()); + if (expRun == null) return false; + + if (!Objects.equals(newSkydData.getRunId(), expRun.getRowId())) return false; + + targetedRun.setSkydDataId(newSkydData.getRowId()); + TargetedMSManager.updateRun(targetedRun, user); + return true; + } + public static List getRunIdsByInstrument(String serialNumber) { SQLFragment sql = new SQLFragment("SELECT DISTINCT r.Id FROM "); diff --git a/src/org/labkey/targetedms/TargetedMSServiceImpl.java b/src/org/labkey/targetedms/TargetedMSServiceImpl.java index 088bc1c2b..b0aa66b11 100644 --- a/src/org/labkey/targetedms/TargetedMSServiceImpl.java +++ b/src/org/labkey/targetedms/TargetedMSServiceImpl.java @@ -22,6 +22,7 @@ import org.labkey.api.data.TableInfo; import org.labkey.api.exp.ExperimentRunType; import org.labkey.api.exp.XarFormatException; +import org.labkey.api.exp.api.ExpData; import org.labkey.api.pipeline.PipelineValidationException; import org.labkey.api.query.UserSchema; import org.labkey.api.security.User; @@ -275,6 +276,11 @@ public ITargetedMSRun getRunByLsid(String lsid, Container container) return TargetedMSManager.getRunByLsid(lsid, container); } + public boolean updateSkydDataId(ITargetedMSRun run, ExpData newSkydData, User user) + { + return TargetedMSManager.updateSkydDataId(run, newSkydData, user); + } + @Override public ExperimentRunType getExperimentRunType() {