Skip to content

Commit f4cb08e

Browse files
Fix crawler failure in TargetedMSCalibrationCurveTest (#1071)
1 parent 2c5ef6c commit f4cb08e

4 files changed

Lines changed: 58 additions & 49 deletions

File tree

src/org/labkey/targetedms/TargetedMSController.java

Lines changed: 30 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -114,8 +114,10 @@
114114
import org.labkey.api.query.FieldKey;
115115
import org.labkey.api.query.FilteredTable;
116116
import org.labkey.api.query.QueryParam;
117+
import org.labkey.api.query.QueryService;
117118
import org.labkey.api.query.QuerySettings;
118119
import org.labkey.api.query.QueryView;
120+
import org.labkey.api.query.UserSchema;
119121
import org.labkey.api.query.ValidationException;
120122
import org.labkey.api.reports.ReportService;
121123
import org.labkey.api.reports.model.ViewCategory;
@@ -7814,10 +7816,31 @@ public void setSelectedIds(Long[] selectedIds)
78147816
}
78157817
}
78167818

7819+
public static WebPartView<?> getFiguresOfMeritView(User user, Container container, long generalMoleculeId, boolean minimize)
7820+
{
7821+
UserSchema schema = QueryService.get().getUserSchema(user, container, TargetedMSSchema.SCHEMA_NAME);
7822+
TableInfo tableInfo = schema.getTable(TargetedMSSchema.TABLE_MOLECULE_INFO);
7823+
if (tableInfo == null)
7824+
{
7825+
throw new NotFoundException("Query " + TargetedMSSchema.SCHEMA_NAME + "." + TargetedMSSchema.TABLE_MOLECULE_INFO + " not found.");
7826+
}
7827+
7828+
SimpleFilter filter = new SimpleFilter(FieldKey.fromString("GeneralMoleculeId"), generalMoleculeId, CompareType.EQUAL);
7829+
FiguresOfMeritView.MoleculeInfo moleculeInfo = new TableSelector(tableInfo, filter, null).getObject(FiguresOfMeritView.MoleculeInfo.class);
7830+
if (moleculeInfo == null)
7831+
{
7832+
HtmlView htmlView = new HtmlView(HtmlString.of("No figures of merit available due to lack of quantitative data"));
7833+
htmlView.setTitle("Figures of Merit");
7834+
htmlView.setFrame(WebPartView.FrameType.PORTAL);
7835+
return htmlView;
7836+
}
7837+
return new FiguresOfMeritView(moleculeInfo, schema, minimize);
7838+
}
7839+
78177840
@RequiresPermission(ReadPermission.class)
78187841
public static class ShowFiguresOfMeritAction extends SimpleViewAction<GeneralMoleculeForm>
78197842
{
7820-
private FiguresOfMeritView _figuresOfMeritView;
7843+
private HttpView<?> _figuresOfMeritView;
78217844

78227845
@Override
78237846
public void validate(GeneralMoleculeForm form, BindException errors)
@@ -7830,20 +7853,20 @@ public void validate(GeneralMoleculeForm form, BindException errors)
78307853
@Override
78317854
public ModelAndView getView(GeneralMoleculeForm form, BindException errors)
78327855
{
7833-
_figuresOfMeritView = new FiguresOfMeritView(getUser(), getContainer(), form.getGeneralMoleculeId().longValue(), false);
7856+
_figuresOfMeritView = getFiguresOfMeritView(getUser(), getContainer(), form.getGeneralMoleculeId().longValue(), false);
78347857
return _figuresOfMeritView;
78357858
}
78367859

78377860
@Override
78387861
public void addNavTrail(NavTree root)
78397862
{
7840-
if (_figuresOfMeritView != null && _figuresOfMeritView.getModelBean() != null)
7863+
if (_figuresOfMeritView != null && _figuresOfMeritView.getModelBean() instanceof FiguresOfMeritView.MoleculeInfo info)
78417864
{
7842-
TargetedMSRun run = _figuresOfMeritView.getModelBean().getRun();
7865+
TargetedMSRun run = info.getRun();
78437866
root.addChild("Targeted MS Runs", getShowListURL(getContainer()));
78447867
root.addChild(run.getDescription(), getShowCalibrationCurvesURL(getContainer(), run.getId()));
78457868

7846-
GeneralMolecule<?, ?> molecule = _figuresOfMeritView.getModelBean().getGeneralMolecule();
7869+
GeneralMolecule<?, ?> molecule = info.getGeneralMolecule();
78477870
if (molecule != null)
78487871
{
78497872
root.addChild("Figures of Merit: " + molecule.getTextId());
@@ -7918,7 +7941,7 @@ protected QueryView createQueryView(CalibrationCurveForm form, BindException err
79187941
public ModelAndView getView(CalibrationCurveForm calibrationCurveForm, BindException errors)
79197942
{
79207943
CalibrationCurveChart chart = _curvePlotView.getChart();
7921-
GeneralMolecule molecule = chart.getMolecule();
7944+
GeneralMolecule<?, ?> molecule = chart.getMolecule();
79227945
if (molecule == null)
79237946
{
79247947
throw new NotFoundException("Could not find molecule");
@@ -7944,8 +7967,7 @@ public ModelAndView getView(CalibrationCurveForm calibrationCurveForm, BindExcep
79447967
detailsUrl = new ActionURL(ShowMoleculeAction.class, getContainer());
79457968
}
79467969

7947-
FiguresOfMeritView fomView = new FiguresOfMeritView(getUser(), getContainer(), molecule.getId(), true);
7948-
fomView.setTitleHref(new ActionURL(ShowFiguresOfMeritAction.class, getContainer()).addParameter("GeneralMoleculeId", molecule.getId()));
7970+
HttpView<?> fomView = getFiguresOfMeritView(getUser(), getContainer(), molecule.getId(), true);
79497971

79507972
JspView<SummaryChartBean> summaryChartView = new JspView<>("/org/labkey/targetedms/view/summaryChartsView.jsp", summaryChartBean);
79517973
summaryChartView.setTitle("Summary Charts");

src/org/labkey/targetedms/TargetedMSModule.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -480,7 +480,7 @@ public WebPartView<?> getWebPartView(@NotNull ViewContext portalCtx, @NotNull Po
480480
}
481481
catch (NumberFormatException ignored) {}
482482
}
483-
return new FiguresOfMeritView(portalCtx.getUser(), portalCtx.getContainer(), id, true);
483+
return TargetedMSController.getFiguresOfMeritView(portalCtx.getUser(), portalCtx.getContainer(), id, true);
484484
}
485485

486486
@Override

src/org/labkey/targetedms/view/FiguresOfMeritView.java

Lines changed: 13 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,14 @@
11
package org.labkey.targetedms.view;
22

3-
import org.labkey.api.data.CompareType;
43
import org.labkey.api.data.Container;
54
import org.labkey.api.data.SimpleFilter;
6-
import org.labkey.api.data.TableInfo;
75
import org.labkey.api.data.TableSelector;
86
import org.labkey.api.query.FieldKey;
9-
import org.labkey.api.query.QueryService;
107
import org.labkey.api.query.UserSchema;
11-
import org.labkey.api.security.User;
8+
import org.labkey.api.view.ActionURL;
129
import org.labkey.api.view.JspView;
1310
import org.labkey.api.view.NotFoundException;
11+
import org.labkey.targetedms.TargetedMSController;
1412
import org.labkey.targetedms.TargetedMSManager;
1513
import org.labkey.targetedms.TargetedMSRun;
1614
import org.labkey.targetedms.TargetedMSSchema;
@@ -21,25 +19,15 @@
2119

2220
public class FiguresOfMeritView extends JspView<FiguresOfMeritView.MoleculeInfo>
2321
{
24-
public FiguresOfMeritView(User user, Container container, long generalMoleculeId, boolean minimize)
22+
public FiguresOfMeritView(MoleculeInfo moleculeInfo, UserSchema schema, boolean minimize)
2523
{
2624
super("/org/labkey/targetedms/view/figuresOfMerit.jsp");
27-
setTitle("Figures of Merit");
28-
29-
UserSchema schema = QueryService.get().getUserSchema(user, container, TargetedMSSchema.SCHEMA_NAME);
30-
TableInfo tableInfo = schema.getTable(TargetedMSSchema.TABLE_MOLECULE_INFO);
31-
if (tableInfo == null)
32-
{
33-
throw new NotFoundException("Query " + TargetedMSSchema.SCHEMA_NAME + "." + TargetedMSSchema.TABLE_MOLECULE_INFO + " not found.");
34-
}
3525

36-
SimpleFilter filter = new SimpleFilter(FieldKey.fromString("GeneralMoleculeId"), generalMoleculeId, CompareType.EQUAL);
37-
MoleculeInfo moleculeInfo = new TableSelector(tableInfo, filter, null).getObject(MoleculeInfo.class);
26+
Container container = schema.getContainer();
27+
long generalMoleculeId = moleculeInfo._generalMoleculeId;
3828

39-
if (moleculeInfo == null)
40-
{
41-
throw new NotFoundException("GeneralMoleculeId " + generalMoleculeId + " not found");
42-
}
29+
setTitle("Figures of Merit");
30+
setTitleHref(new ActionURL(TargetedMSController.ShowFiguresOfMeritAction.class, container).addParameter("GeneralMoleculeId", generalMoleculeId));
4331
setModelBean(moleculeInfo);
4432
moleculeInfo.setMinimize(minimize);
4533

@@ -62,8 +50,8 @@ public FiguresOfMeritView(User user, Container container, long generalMoleculeId
6250

6351
public static class MoleculeInfo
6452
{
65-
Long _runId;
66-
Long _generalMoleculeId;
53+
long _runId;
54+
long _generalMoleculeId;
6755
String _peptideName;
6856
String _moleculeName;
6957
String _fileName;
@@ -74,22 +62,22 @@ public static class MoleculeInfo
7462
TargetedMSRun _run;
7563
private boolean _minimize;
7664

77-
public Long getRunId()
65+
public long getRunId()
7866
{
7967
return _runId;
8068
}
8169

82-
public void setRunId(Long runId)
70+
public void setRunId(long runId)
8371
{
8472
_runId = runId;
8573
}
8674

87-
public Long getGeneralMoleculeId()
75+
public long getGeneralMoleculeId()
8876
{
8977
return _generalMoleculeId;
9078
}
9179

92-
public void setGeneralMoleculeId(Long moleculeId)
80+
public void setGeneralMoleculeId(long moleculeId)
9381
{
9482
_generalMoleculeId = moleculeId;
9583
}

test/src/org/labkey/test/tests/targetedms/AbstractQuantificationTest.java

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ public class AbstractQuantificationTest extends TargetedMSTest
5252
@BeforeClass
5353
public static void setupProject()
5454
{
55-
AbstractQuantificationTest init = (AbstractQuantificationTest) getCurrentTest();
55+
AbstractQuantificationTest init = getCurrentTest();
5656

5757
init.setupFolder(FolderType.Experiment);
5858
}
@@ -85,7 +85,7 @@ private void verifyFomTable(String tableId, List<String> groups, List<String> co
8585
}
8686

8787
// No data
88-
if (distinctGroups.size() < 1)
88+
if (distinctGroups.isEmpty())
8989
{
9090
assertTextPresent("No data of this type");
9191
return;
@@ -321,7 +321,7 @@ protected void runScenario(String scenario, String expectedWeighting, @Nullable
321321
assertNotEquals(msg, -1, rowIndex);
322322
String actualErrorMessage = calibrationCurvesTable.getDataAsText(rowIndex, "Error Message");
323323
String expectedErrorMessage = (String) expectedRow.get("ErrorMessage");
324-
if (expectedErrorMessage != null && expectedErrorMessage.length() > 0)
324+
if (expectedErrorMessage != null && !expectedErrorMessage.isEmpty())
325325
{
326326
assertNotEquals("", actualErrorMessage);
327327
rowWithoutData = rowIndex;
@@ -441,12 +441,13 @@ private List<Map<String, Object>> readScenarioCsv(String scenarioName, String re
441441

442442
private void testCalculatedConcentrations(String scenario) throws Exception
443443
{
444-
String query = "SELECT COALESCE(generalmoleculechrominfo.PeptideId.Sequence, \n" +
445-
"generalmoleculechrominfo.MoleculeId.Molecule) AS Peptide, \n" +
446-
"generalmoleculechrominfo.SampleFileId.ReplicateId.Name AS Replicate, \n" +
447-
"generalmoleculechrominfo.CalculatedConcentration, \n" +
448-
"generalmoleculechrominfo.SampleFileId.ReplicateId.RunId.FileName\n" +
449-
"FROM generalmoleculechrominfo";
444+
String query = """
445+
SELECT COALESCE(generalmoleculechrominfo.PeptideId.Sequence,
446+
generalmoleculechrominfo.MoleculeId.Molecule) AS Peptide,
447+
generalmoleculechrominfo.SampleFileId.ReplicateId.Name AS Replicate,
448+
generalmoleculechrominfo.CalculatedConcentration,
449+
generalmoleculechrominfo.SampleFileId.ReplicateId.RunId.FileName
450+
FROM generalmoleculechrominfo""";
450451
ExecuteSqlCommand sc = new ExecuteSqlCommand("targetedms");
451452
sc.setSql(query);
452453
SelectRowsResponse resp = sc.execute(createDefaultConnection(), getProjectName() + "/" + scenario);
@@ -488,7 +489,7 @@ private void testCalculatedConcentrations(String scenario) throws Exception
488489

489490
private Double parseOptionalDouble(String value)
490491
{
491-
if (value == null || "".equals(value) || "#N/A".equals(value))
492+
if (value == null || value.isEmpty() || "#N/A".equals(value))
492493
{
493494
return null;
494495
}
@@ -501,9 +502,9 @@ private Double toDouble(Object value)
501502
{
502503
return null;
503504
}
504-
if (value instanceof String)
505+
if (value instanceof String s)
505506
{
506-
return parseOptionalDouble((String) value);
507+
return parseOptionalDouble(s);
507508
}
508509
return (Double) value;
509510
}
@@ -516,7 +517,7 @@ private boolean isValueMissing(Object value)
516517
return null == value || "#N/A".equals(value);
517518
}
518519

519-
protected class FiguresOfMerit
520+
protected static class FiguresOfMerit
520521
{
521522
String loq;
522523
String uloq;
@@ -526,8 +527,6 @@ protected class FiguresOfMerit
526527
String calc;
527528
String name;
528529

529-
private FiguresOfMerit(){}
530-
531530
public FiguresOfMerit(@NotNull String molName)
532531
{
533532
setName(molName);

0 commit comments

Comments
 (0)