diff --git a/luminex/src/org/labkey/luminex/LuminexDataHandler.java b/luminex/src/org/labkey/luminex/LuminexDataHandler.java index 982f1a2d5b..3d9599149f 100644 --- a/luminex/src/org/labkey/luminex/LuminexDataHandler.java +++ b/luminex/src/org/labkey/luminex/LuminexDataHandler.java @@ -684,6 +684,7 @@ private void insertCVQCFlags(User user, ExpRun expRun, List data { LuminexWellGroup wellGroup = analyte.buildWellGroup(dataRows); List allReplicates = wellGroup.getWellData(true); // combine replicates and get mean MFI and %CV + AssayProvider provider = AssayService.get().getProvider(expRun); Set newCVQCFlags = new HashSet<>(); for (LuminexWell replicate : allReplicates) @@ -701,7 +702,7 @@ private void insertCVQCFlags(User user, ExpRun expRun, List data if (!newCVQCFlags.contains(newQcFlag)) { newCVQCFlags.add(newQcFlag); - Table.insert(user, ExperimentService.get().getTinfoAssayQCFlag(), newQcFlag); + AssayService.get().saveFlag(expRun.getContainer(), user, provider, newQcFlag); } } } @@ -851,7 +852,7 @@ public static void insertOrUpdateAnalyteSinglePointControlQCFlags(User user, Exp { if (!existingQCFlags.contains(newQCFlag)) { - Table.insert(user, ExperimentService.get().getTinfoAssayQCFlag(), newQCFlag); + AssayService.get().saveFlag(expRun.getContainer(), user, provider, newQCFlag); } } @@ -860,7 +861,7 @@ public static void insertOrUpdateAnalyteSinglePointControlQCFlags(User user, Exp { if (!newQCFlags.contains(existingAnalyteTitrationQCFlag)) { - Table.delete(ExperimentService.get().getTinfoAssayQCFlag(), existingAnalyteTitrationQCFlag.getRowId()); + AssayService.get().deleteFlag(expRun.getContainer(), user, provider, existingAnalyteTitrationQCFlag); } } } @@ -1520,7 +1521,7 @@ else if (guideSetRow.isAucEnabled() && curveFit.getCurveType().equals("Trapezoid { if (!existingAnalyteTitrationQCFlags.contains(newAnalyteTitrationQCFlag)) { - Table.insert(user, ExperimentService.get().getTinfoAssayQCFlag(), newAnalyteTitrationQCFlag); + AssayService.get().saveFlag(expRun.getContainer(), user, provider, newAnalyteTitrationQCFlag); } } @@ -1529,7 +1530,7 @@ else if (guideSetRow.isAucEnabled() && curveFit.getCurveType().equals("Trapezoid { if (!newAnalyteTitrationQCFlags.contains(existingAnalyteTitrationQCFlag)) { - Table.delete(ExperimentService.get().getTinfoAssayQCFlag(), existingAnalyteTitrationQCFlag.getRowId()); + AssayService.get().deleteFlag(expRun.getContainer(), user, provider, existingAnalyteTitrationQCFlag); } } } diff --git a/luminex/src/org/labkey/luminex/LuminexModule.java b/luminex/src/org/labkey/luminex/LuminexModule.java index a7599dc05d..2b3d594122 100644 --- a/luminex/src/org/labkey/luminex/LuminexModule.java +++ b/luminex/src/org/labkey/luminex/LuminexModule.java @@ -17,12 +17,14 @@ package org.labkey.luminex; import org.jetbrains.annotations.NotNull; +import org.labkey.api.assay.AssayDefaultFlagHandler; +import org.labkey.api.assay.AssayFlagHandler; +import org.labkey.api.assay.AssayQCFlagColumn; import org.labkey.api.data.Container; import org.labkey.api.exp.api.ExperimentService; import org.labkey.api.exp.property.PropertyService; import org.labkey.api.module.DefaultModule; import org.labkey.api.module.ModuleContext; -import org.labkey.api.study.assay.AssayQCFlagColumn; import org.labkey.api.study.assay.AssayService; import org.labkey.api.util.PageFlowUtil; import org.labkey.api.view.WebPartFactory; @@ -72,6 +74,8 @@ public void doStartup(ModuleContext moduleContext) AssayService.get().registerAssayProvider(new LuminexAssayProvider()); PropertyService.get().registerDomainKind(new LuminexAnalyteDomainKind()); PropertyService.get().registerDomainKind(new LuminexDataDomainKind()); + + AssayFlagHandler.registerHandler(AssayService.get().getProvider(LuminexAssayProvider.NAME), new AssayDefaultFlagHandler()); } @Override diff --git a/nab/src/org/labkey/nab/NabAssayController.java b/nab/src/org/labkey/nab/NabAssayController.java index e380e01072..ca4246374b 100644 --- a/nab/src/org/labkey/nab/NabAssayController.java +++ b/nab/src/org/labkey/nab/NabAssayController.java @@ -1055,7 +1055,7 @@ public ApiResponse execute(QCControlInfo form, BindException errors) throws Exce DilutionManager.clearWellExclusions(scope.getSqlDialect(), form.getRunId()); // clear out prior qc flags - Table.delete(ExperimentService.get().getTinfoAssayQCFlag(), new SimpleFilter(FieldKey.fromParts("runId"), form.getRunId())); + AssayService.get().deleteFlagsForRun(getContainer(), getUser(), provider, form.getRunId()); Set excludedWells = new HashSet<>(); Collection wellRowIds = new HashSet<>(); @@ -1065,7 +1065,7 @@ public ApiResponse execute(QCControlInfo form, BindException errors) throws Exce // add the assay qc flag for the exclusions NabWellQCFlag flag = new NabWellQCFlag(form.getRunId(), well); - Table.insert(getUser(), ExperimentService.get().getTinfoAssayQCFlag(), flag); + AssayService.get().saveFlag(getContainer(), getUser(), provider, flag); } // get the rowid's for the wells to exclude @@ -1257,9 +1257,10 @@ public ApiResponse execute(RenderAssayBean form, BindException errors) { List exclusions = new ArrayList<>(); Map qcFlagMap = new HashMap<>(); + AssayProvider provider = AssayService.get().getProvider(run); // get the saved assay QC flags to pull comment information from - for (NabWellQCFlag flag : new TableSelector(ExperimentService.get().getTinfoAssayQCFlag(), new SimpleFilter(FieldKey.fromParts("runId"), form.getRowId()), null).getArrayList(NabWellQCFlag.class)) + for (NabWellQCFlag flag : AssayService.get().getFlags(provider, form.getRowId(), NabWellQCFlag.class)) { qcFlagMap.put(flag.getKey1(), flag); } diff --git a/nab/src/org/labkey/nab/NabModule.java b/nab/src/org/labkey/nab/NabModule.java index 996c1ffa3d..cb101a7468 100644 --- a/nab/src/org/labkey/nab/NabModule.java +++ b/nab/src/org/labkey/nab/NabModule.java @@ -16,7 +16,9 @@ package org.labkey.nab; import org.jetbrains.annotations.NotNull; +import org.labkey.api.assay.AssayDefaultFlagHandler; import org.labkey.api.data.ContainerManager; +import org.labkey.api.assay.AssayFlagHandler; import org.labkey.api.exp.api.ExperimentService; import org.labkey.api.exp.property.PropertyService; import org.labkey.api.module.DefaultModule; @@ -99,6 +101,13 @@ public void doStartup(ModuleContext moduleContext) ExperimentService.get().registerExperimentDataHandler(new SinglePlateDilutionNabDataHandler()); ContainerManager.addContainerListener(new NabContainerListener()); + // register QC flag handlers for supported assays + AssayFlagHandler handler = new AssayDefaultFlagHandler(); + + AssayFlagHandler.registerHandler(AssayService.get().getProvider(NabAssayProvider.NAME), handler); + AssayFlagHandler.registerHandler(new CrossPlateDilutionNabAssayProvider(), handler); + AssayFlagHandler.registerHandler(new SinglePlateDilutionNabAssayProvider(), handler); + PropertyService.get().registerDomainKind(new NabVirusDomainKind()); } diff --git a/nab/src/org/labkey/nab/query/NabProtocolSchema.java b/nab/src/org/labkey/nab/query/NabProtocolSchema.java index 2521b0f0a5..c5ba8e444d 100644 --- a/nab/src/org/labkey/nab/query/NabProtocolSchema.java +++ b/nab/src/org/labkey/nab/query/NabProtocolSchema.java @@ -31,18 +31,15 @@ import org.labkey.api.data.DatabaseCache; import org.labkey.api.data.DisplayColumn; import org.labkey.api.data.DisplayColumnFactory; -import org.labkey.api.data.JdbcType; import org.labkey.api.data.TableInfo; import org.labkey.api.exp.api.ExpProtocol; import org.labkey.api.exp.property.Domain; import org.labkey.api.exp.query.ExpRunTable; -import org.labkey.api.query.ExprColumn; import org.labkey.api.query.QuerySettings; import org.labkey.api.security.User; import org.labkey.api.study.assay.AssayDataLinkDisplayColumn; import org.labkey.api.study.assay.AssayProtocolSchema; import org.labkey.api.study.assay.AssayProvider; -import org.labkey.api.study.assay.AssayQCFlagColumn; import org.labkey.api.study.assay.RunListDetailsQueryView; import org.labkey.api.study.query.ResultsQueryView; import org.labkey.api.study.query.RunListQueryView; @@ -101,15 +98,6 @@ public DisplayColumn createRenderer(ColumnInfo colInfo) return runTable; } - @Override - protected void addQCFlagColumn(ExpRunTable runTable) - { - runTable.addColumn(new AssayQCFlagColumn(runTable, getSchemaName(), false)); - var qcEnabled = runTable.addColumn(new ExprColumn(runTable, "QCFlagsEnabled", AssayQCFlagColumn.createSQLFragment(runTable.getSqlDialect(), "Enabled"), JdbcType.VARCHAR)); - qcEnabled.setLabel("QC Flags Enabled State"); - qcEnabled.setHidden(true); - } - @Nullable @Override protected ResultsQueryView createDataQueryView(ViewContext context, QuerySettings settings, BindException errors)