From d0373d6da1ca2e4ff0676c1227cb93581b0da07a Mon Sep 17 00:00:00 2001
From: Adam Rauch
Date: Tue, 11 Mar 2025 22:11:54 -0700
Subject: [PATCH 01/10] DisplayColumn refactor
---
.../luminex/LuminexUploadWizardAction.java | 28 ++++++---
.../AnalytePropStandardsDisplayColumn.java | 2 +-
.../query/ExclusionUIDisplayColumn.java | 4 +-
.../labkey/luminex/query/GuideSetTable.java | 8 +--
.../NegativeBeadDisplayColumnFactory.java | 16 ++---
.../query/NegativeBeadDisplayColumnGroup.java | 63 ++++++++++---------
ms2/src/org/labkey/ms2/DeltaScanColumn.java | 2 +-
.../labkey/ms2/GroupNumberDisplayColumn.java | 2 +-
.../org/labkey/ms2/HydrophobicityColumn.java | 2 +-
.../labkey/ms2/compare/CompareDataRegion.java | 1 -
.../PeptideAggregrationDisplayColumn.java | 23 +------
.../ms2/query/PeptideCountCoverageColumn.java | 6 +-
.../ms2/query/QueryAACoverageColumn.java | 2 +-
.../UniquePeptideCountCoverageColumn.java | 9 +--
14 files changed, 78 insertions(+), 90 deletions(-)
diff --git a/luminex/src/org/labkey/luminex/LuminexUploadWizardAction.java b/luminex/src/org/labkey/luminex/LuminexUploadWizardAction.java
index f5435ee0d2..bc96da5289 100644
--- a/luminex/src/org/labkey/luminex/LuminexUploadWizardAction.java
+++ b/luminex/src/org/labkey/luminex/LuminexUploadWizardAction.java
@@ -18,6 +18,7 @@
import jakarta.servlet.ServletException;
import org.apache.commons.collections4.keyvalue.MultiKey;
+import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.labkey.api.action.LabKeyError;
import org.labkey.api.action.SpringActionController;
@@ -53,11 +54,13 @@
import org.labkey.api.study.assay.ParticipantVisitResolverType;
import org.labkey.api.util.HtmlString;
import org.labkey.api.util.PageFlowUtil;
+import org.labkey.api.util.element.Input;
import org.labkey.api.view.HttpView;
import org.labkey.api.view.InsertView;
import org.labkey.api.view.JspView;
import org.labkey.api.view.VBox;
import org.labkey.api.view.ViewServlet;
+import org.labkey.api.writer.HtmlWriter;
import org.labkey.luminex.model.Analyte;
import org.labkey.luminex.model.SinglePointControl;
import org.labkey.luminex.model.Titration;
@@ -85,6 +88,10 @@
import java.util.Set;
import java.util.TreeSet;
+import static org.labkey.api.util.DOM.Attribute.style;
+import static org.labkey.api.util.DOM.TD;
+import static org.labkey.api.util.DOM.at;
+
/**
* Adds Analyte Properties as third wizard step, handles analyte and titration definition input view UI and post, saves
* last entered default values for analyte domain and standard properties
@@ -421,13 +428,19 @@ else if (titrationEntry.getValue().isStandard())
view.getDataRegion().addGroup(new DisplayColumnGroup(cols, titrationEntry.getKey(), true)
{
@Override
- public void writeSameCheckboxCell(RenderContext ctx, Writer out) throws IOException
+ public void writeSameCheckboxCell(RenderContext ctx, HtmlWriter out)
{
String titrationCellName = PageFlowUtil.filter(getTitrationColumnCellName(titrationEntry.getValue().getName()));
String groupName = ColumnInfo.propNameFromName(getColumns().get(0).getFormFieldName(ctx));
String id = groupName + "CheckBox";
- out.write("");
- out.write(" ");
+
+ TD(
+ at(style, "display:" + (hideCell ? "none" : "table-cell")).
+ name(titrationCellName),
+ new Input.InputBuilder().type("checkbox").name(id).id(id)
+
+ ).appendTo(out);
+
StringBuilder onchange = new StringBuilder("b = this.checked;");
for (DisplayColumn col : getColumns())
{
@@ -435,7 +448,6 @@ public void writeSameCheckboxCell(RenderContext ctx, Writer out) throws IOExcept
}
onchange.append("if (b) { ").append(groupName).append("Updated(); }");
HttpView.currentPageConfig().addHandler(id, "change", onchange.toString());
- out.write(" ");
}
@Override
@@ -548,7 +560,7 @@ private boolean toShowStandardCheckboxColumn(boolean errorReshow, Set
return (errorReshow && requestParamValue.equals("true")) || (!errorReshow && standardTitrations.contains(standard));
}
- private DisplayColumnFactory createAnalytePropertyDisplayColumnFactory(final String inputName, final String displayName)
+ private DisplayColumnFactory createAnalytePropertyDisplayColumnFactory(final String inputName, final @NotNull String displayName)
{
return colInfo -> new DataColumn(colInfo)
{
@@ -559,9 +571,9 @@ public String getFormFieldName(RenderContext ctx)
}
@Override
- public void renderTitle(RenderContext ctx, Writer out) throws IOException
+ public HtmlString getTitle(RenderContext ctx)
{
- out.write(displayName);
+ return HtmlString.of(displayName);
}
@Override
@@ -569,7 +581,7 @@ public void renderDetailsCaptionCell(RenderContext ctx, Writer out, @Nullable St
{
out.write("");
- renderTitle(ctx, out);
+ out.write(getTitle(ctx).toString());
out.write(" ");
}
diff --git a/luminex/src/org/labkey/luminex/query/ExclusionUIDisplayColumn.java b/luminex/src/org/labkey/luminex/query/ExclusionUIDisplayColumn.java
index 56a165b82e..21e982faca 100644
--- a/luminex/src/org/labkey/luminex/query/ExclusionUIDisplayColumn.java
+++ b/luminex/src/org/labkey/luminex/query/ExclusionUIDisplayColumn.java
@@ -82,9 +82,9 @@ public void addQueryFieldKeys(Set keys)
}
@Override
- public void renderTitle(RenderContext ctx, Writer out)
+ public HtmlString getTitle(RenderContext ctx)
{
- // Don't render a title, to keep the column narrow
+ return null; // Don't render a title, to keep the column narrow
}
@Override
diff --git a/luminex/src/org/labkey/luminex/query/GuideSetTable.java b/luminex/src/org/labkey/luminex/query/GuideSetTable.java
index 4992046ea4..a1255ac8fe 100644
--- a/luminex/src/org/labkey/luminex/query/GuideSetTable.java
+++ b/luminex/src/org/labkey/luminex/query/GuideSetTable.java
@@ -64,10 +64,6 @@
import java.util.List;
import java.util.Map;
-/**
- * User: jeckels
- * Date: Aug 26, 2011
- */
public class GuideSetTable extends AbstractCurveFitPivotTable
{
public GuideSetTable(final LuminexProtocolSchema schema, ContainerFilter cf, boolean filter)
@@ -125,9 +121,9 @@ public HtmlString getFormattedHtml(RenderContext ctx)
}
@Override
- public void renderTitle(RenderContext ctx, Writer out)
+ public HtmlString getTitle(RenderContext ctx)
{
- // no title
+ return null; // no title
}
@Override
diff --git a/luminex/src/org/labkey/luminex/query/NegativeBeadDisplayColumnFactory.java b/luminex/src/org/labkey/luminex/query/NegativeBeadDisplayColumnFactory.java
index 69ab607c0e..226fd10e48 100644
--- a/luminex/src/org/labkey/luminex/query/NegativeBeadDisplayColumnFactory.java
+++ b/luminex/src/org/labkey/luminex/query/NegativeBeadDisplayColumnFactory.java
@@ -16,6 +16,7 @@
package org.labkey.luminex.query;
import org.apache.commons.beanutils.ConvertUtils;
+import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.labkey.api.data.ColumnInfo;
import org.labkey.api.data.DataColumn;
@@ -23,6 +24,7 @@
import org.labkey.api.data.DisplayColumnFactory;
import org.labkey.api.data.RenderContext;
import org.labkey.api.util.HtmlString;
+import org.labkey.api.util.HtmlStringBuilder;
import org.labkey.api.util.PageFlowUtil;
import org.labkey.api.view.HttpView;
import org.labkey.luminex.LuminexDataHandler;
@@ -58,15 +60,15 @@ public String getFormFieldName(RenderContext ctx)
}
@Override
- public void renderTitle(RenderContext ctx, Writer out) throws IOException
+ public @NotNull HtmlString getTitle(RenderContext ctx)
{
- out.write("\n");
-
- out.write(PageFlowUtil.filter(_displayName));
+ "\n")
+ .append(_displayName).getHtmlString();
}
@Override
@@ -74,7 +76,7 @@ public void renderDetailsCaptionCell(RenderContext ctx, Writer out, @Nullable St
{
out.write("");
+ }
+ catch (IOException e)
+ {
+ throw new RuntimeException(e);
+ }
}
@Override
- public void renderInputHtml(RenderContext ctx, Writer out, Object value) throws IOException
+ public void renderInputHtml(RenderContext ctx, Writer oldWriter, HtmlWriter out, Object value) throws IOException
{
String strValue = ConvertUtils.convert(value);
boolean hidden = _initNegativeControlAnalytes.contains(_analyteName);
- out.write("");
+ oldWriter.write(" ");
for (String negControlAnalyte : _initNegativeControlAnalytes)
{
- out.write("");
- out.write(PageFlowUtil.filter(negControlAnalyte));
- out.write(" ");
+ oldWriter.write(">");
+ oldWriter.write(PageFlowUtil.filter(negControlAnalyte));
+ oldWriter.write("");
}
}
- out.write(" ");
+ oldWriter.write("");
}
};
}
diff --git a/viability/src/org/labkey/viability/data/MultiValueInputColumn.java b/viability/src/org/labkey/viability/data/MultiValueInputColumn.java
index b2e1f152ed..8b7ed8ada8 100644
--- a/viability/src/org/labkey/viability/data/MultiValueInputColumn.java
+++ b/viability/src/org/labkey/viability/data/MultiValueInputColumn.java
@@ -21,6 +21,7 @@
import org.labkey.api.data.RenderContext;
import org.labkey.api.util.PageFlowUtil;
import org.labkey.api.view.HttpView;
+import org.labkey.api.writer.HtmlWriter;
import java.io.Writer;
import java.io.IOException;
@@ -41,34 +42,34 @@ public MultiValueInputColumn(ColumnInfo col, List values)
}
@Override
- public void renderInputHtml(RenderContext ctx, Writer out, Object value) throws IOException
+ public void renderInputHtml(RenderContext ctx, Writer oldWriter, HtmlWriter out, Object value) throws IOException
{
String id = ctx.getForm().getFormFieldName(getColumnInfo());
- out.write("
");
- out.write("\n");
+ oldWriter.write(");\n});\n");
+ oldWriter.write("\n");
}
@Override
From 60e1f6bd234715712695fcb2a107fb323bf5ef8c Mon Sep 17 00:00:00 2001
From: Adam Rauch
Date: Thu, 13 Mar 2025 08:09:09 -0700
Subject: [PATCH 04/10] Migrate renderGridCellContents() and
renderDetailsCellContents()
---
.../executescript/SamplesConfirmGridView.java | 20 +++++------
.../src/org/labkey/flow/query/FlowSchema.java | 17 +++++-----
.../src/org/labkey/flow/view/GraphColumn.java | 4 +--
.../flow/webparts/AnalysisScriptsWebPart.java | 11 +++---
.../query/AnalyteSinglePointControlTable.java | 5 +--
.../luminex/query/AnalyteTitrationTable.java | 5 +--
.../query/ExclusionUIDisplayColumn.java | 7 ++--
.../labkey/luminex/query/GuideSetTable.java | 7 ++--
.../luminex/query/LuminexProtocolSchema.java | 11 +++---
.../query/QCFlagHighlightDisplayColumn.java | 34 ++++++++++++-------
.../luminex/query/WellExclusionTable.java | 6 ++--
ms2/src/org/labkey/ms2/MS2Controller.java | 3 +-
.../org/labkey/ms2/ProteinDisplayColumn.java | 20 ++++++-----
.../labkey/ms2/ProteinListDisplayColumn.java | 9 ++---
.../labkey/ms2/pipeline/mascot/MascotRun.java | 15 +++-----
.../viability/ViabilityAssaySchema.java | 19 +++++++----
16 files changed, 109 insertions(+), 84 deletions(-)
diff --git a/flow/src/org/labkey/flow/controllers/executescript/SamplesConfirmGridView.java b/flow/src/org/labkey/flow/controllers/executescript/SamplesConfirmGridView.java
index b054e2a543..1ed897eca2 100644
--- a/flow/src/org/labkey/flow/controllers/executescript/SamplesConfirmGridView.java
+++ b/flow/src/org/labkey/flow/controllers/executescript/SamplesConfirmGridView.java
@@ -369,23 +369,23 @@ public MatchedFlagDisplayColumn()
}
@Override
- public void renderGridCellContents(RenderContext ctx, Writer out) throws IOException
+ public void renderGridCellContents(RenderContext ctx, Writer oldWriter, HtmlWriter out) throws IOException
{
Boolean match = ctx.get(MATCHED_FLAG_FIELD_KEY, Boolean.class);
if (match != null)
{
- out.write(" ");
+ oldWriter.write("/_images/check.png\" />");
String fileName = ctx.get(SAMPLE_NAME_FIELD_KEY, String.class);
- PageFlowUtil.popupHelp(HtmlString.of("Matched the previously imported FCS file '" + fileName + "'"), "Matched").appendTo(out);
+ PageFlowUtil.popupHelp(HtmlString.of("Matched the previously imported FCS file '" + fileName + "'"), "Matched").appendTo(oldWriter);
}
else
{
- out.write("/_images/cancel.png\" />");
- PageFlowUtil.popupHelp(HtmlString.of("Failed to match a previously imported FCS file. Please manually select a matching FCS file or skip importing this row."), "Not matched").appendTo(out);
+ oldWriter.write("/_images/cancel.png\" />");
+ PageFlowUtil.popupHelp(HtmlString.of("Failed to match a previously imported FCS file. Please manually select a matching FCS file or skip importing this row."), "Not matched").appendTo(oldWriter);
}
}
}
@@ -504,9 +504,9 @@ protected String getSelectInputDisplayValue(NamedObject entry)
}
@Override
- public void renderGridCellContents(RenderContext ctx, Writer oldWriter) throws IOException
+ public void renderGridCellContents(RenderContext ctx, HtmlWriter out)
{
- super.renderGridCellContents(ctx, oldWriter);
+ super.renderGridCellContents(ctx, out);
// Render hidden form inputs for candidate well ids.
List candidates = (List)ctx.get(CANDIDATE_FILES_FIELD_KEY, List.class);
@@ -515,7 +515,7 @@ public void renderGridCellContents(RenderContext ctx, Writer oldWriter) throws I
String sampleId = ctx.get(SAMPLE_ID_FIELD_KEY, String.class);
for (FlowFCSFile candidate : candidates)
{
- oldWriter.write(" \n");
+ out.write(new Input.InputBuilder().type("hidden").name("selectedSamples.rows[" + sampleId + "].candidateFile").value(candidate.getRowId()));
}
}
}
diff --git a/flow/src/org/labkey/flow/query/FlowSchema.java b/flow/src/org/labkey/flow/query/FlowSchema.java
index ef9f0b5bac..8499840935 100644
--- a/flow/src/org/labkey/flow/query/FlowSchema.java
+++ b/flow/src/org/labkey/flow/query/FlowSchema.java
@@ -74,6 +74,7 @@
import org.labkey.api.util.StringExpressionFactory;
import org.labkey.api.view.ActionURL;
import org.labkey.api.view.ViewContext;
+import org.labkey.api.writer.HtmlWriter;
import org.labkey.flow.analysis.web.FCSAnalyzer;
import org.labkey.flow.analysis.web.StatisticSpec;
import org.labkey.flow.controllers.FlowController;
@@ -454,7 +455,7 @@ public DisplayColumn createRenderer(ColumnInfo colInfo)
return new DataColumn(colInfo)
{
@Override
- public void renderGridCellContents(RenderContext ctx, Writer out) throws IOException
+ public void renderGridCellContents(RenderContext ctx, Writer oldWriter, HtmlWriter out) throws IOException
{
String targetStudyId = (String)getBoundColumn().getValue(ctx);
if (targetStudyId != null && targetStudyId.length() > 0)
@@ -467,11 +468,11 @@ public void renderGridCellContents(RenderContext ctx, Writer out) throws IOExcep
var urlProvider = PageFlowUtil.urlProvider(ProjectUrls.class);
if (study != null && urlProvider != null)
{
- out.write("");
- out.write(study.getLabel().replaceAll(" ", " "));
- out.write(" ");
+ oldWriter.write("");
+ oldWriter.write(study.getLabel().replaceAll(" ", " "));
+ oldWriter.write(" ");
}
}
}
@@ -881,12 +882,12 @@ public String renderURL(RenderContext ctx)
}
@Override
- public void renderGridCellContents(RenderContext ctx, Writer out) throws IOException
+ public void renderGridCellContents(RenderContext ctx, Writer oldWriter, HtmlWriter out) throws IOException
{
String url = renderURL(ctx);
if (url != null)
{
- out.write(PageFlowUtil.iconLink("fa fa-download", null).href(url).toString());
+ oldWriter.write(PageFlowUtil.iconLink("fa fa-download", null).href(url).toString());
}
}
};
diff --git a/flow/src/org/labkey/flow/view/GraphColumn.java b/flow/src/org/labkey/flow/view/GraphColumn.java
index 8a438d5bbb..47b2c7a85b 100644
--- a/flow/src/org/labkey/flow/view/GraphColumn.java
+++ b/flow/src/org/labkey/flow/view/GraphColumn.java
@@ -125,9 +125,9 @@ protected FlowQuerySettings.ShowGraphs showGraphs(RenderContext ctx)
}
@Override
- public void renderGridCellContents(RenderContext ctx, Writer out)
+ public void renderGridCellContents(RenderContext ctx, Writer oldWriter, HtmlWriter out)
{
- renderGraph(ctx, HtmlWriter.of(out));
+ renderGraph(ctx, HtmlWriter.of(oldWriter));
}
public void renderGraph(RenderContext ctx, HtmlWriter out)
diff --git a/flow/src/org/labkey/flow/webparts/AnalysisScriptsWebPart.java b/flow/src/org/labkey/flow/webparts/AnalysisScriptsWebPart.java
index 7f906ee47b..014889c8b6 100644
--- a/flow/src/org/labkey/flow/webparts/AnalysisScriptsWebPart.java
+++ b/flow/src/org/labkey/flow/webparts/AnalysisScriptsWebPart.java
@@ -35,6 +35,7 @@
import org.labkey.api.view.Portal;
import org.labkey.api.view.SimpleWebPartFactory;
import org.labkey.api.view.ViewContext;
+import org.labkey.api.writer.HtmlWriter;
import org.labkey.flow.controllers.editscript.ScriptController;
import org.labkey.flow.controllers.executescript.AnalysisScriptController;
import org.labkey.flow.data.FlowProtocolStep;
@@ -151,7 +152,7 @@ public FlowScript getScript(RenderContext ctx)
}
@Override
- public void renderGridCellContents(RenderContext ctx, Writer out) throws IOException
+ public void renderGridCellContents(RenderContext ctx, Writer oldWriter, HtmlWriter out) throws IOException
{
FlowScript script = getScript(ctx);
if (script != null)
@@ -161,21 +162,21 @@ public void renderGridCellContents(RenderContext ctx, Writer out) throws IOExcep
if (script.hasStep(FlowProtocolStep.calculateCompensation))
{
ActionURL url = script.urlFor(AnalysisScriptController.ChooseRunsToAnalyzeAction.class, FlowProtocolStep.calculateCompensation);
- out.write("Compensation ");
+ oldWriter.write("Compensation ");
and = " ";
}
if (script.hasStep(FlowProtocolStep.analysis))
{
ActionURL url = script.urlFor(AnalysisScriptController.ChooseRunsToAnalyzeAction.class, FlowProtocolStep.analysis);
- out.write(and);
- out.write("Statistics and Graphs ");
+ oldWriter.write(and);
+ oldWriter.write("Statistics and Graphs ");
}
}
else
{
- out.write(" ");
+ oldWriter.write(" ");
}
}
}
diff --git a/luminex/src/org/labkey/luminex/query/AnalyteSinglePointControlTable.java b/luminex/src/org/labkey/luminex/query/AnalyteSinglePointControlTable.java
index d74536fee3..9414bdd314 100644
--- a/luminex/src/org/labkey/luminex/query/AnalyteSinglePointControlTable.java
+++ b/luminex/src/org/labkey/luminex/query/AnalyteSinglePointControlTable.java
@@ -44,6 +44,7 @@
import org.labkey.api.settings.AppProps;
import org.labkey.api.util.HtmlString;
import org.labkey.api.util.Pair;
+import org.labkey.api.writer.HtmlWriter;
import org.labkey.luminex.AbstractLuminexControlUpdateService;
import org.labkey.luminex.LuminexDataHandler;
import org.labkey.luminex.model.Analyte;
@@ -120,7 +121,7 @@ public DisplayColumn createRenderer(ColumnInfo colInfo)
return new JavaScriptDisplayColumn(colInfo, List.of("clientapi/ext3", "vis/vis", "luminex/LeveyJenningsPlotHelpers.js", "luminex/LeveyJenningsReport.css"))
{
@Override
- public void renderGridCellContents(RenderContext ctx, Writer out)
+ public void renderGridCellContents(RenderContext ctx, Writer oldWriter, HtmlWriter out)
{
int protocolId = schema.getProtocol().getRowId();
int analyte = (int)ctx.get("analyte");
@@ -130,7 +131,7 @@ public void renderGridCellContents(RenderContext ctx, Writer out)
HtmlString html = HtmlString.unsafe(String.format(" ", AppProps.getInstance().getContextPath() + "/luminex/ljPlotIcon.png"));
- renderLink(out, html, onClick, null);
+ renderLink(oldWriter, html, onClick, null);
}
@Override
diff --git a/luminex/src/org/labkey/luminex/query/AnalyteTitrationTable.java b/luminex/src/org/labkey/luminex/query/AnalyteTitrationTable.java
index 0001bcfe28..c697e526bd 100644
--- a/luminex/src/org/labkey/luminex/query/AnalyteTitrationTable.java
+++ b/luminex/src/org/labkey/luminex/query/AnalyteTitrationTable.java
@@ -46,6 +46,7 @@
import org.labkey.api.util.Pair;
import org.labkey.api.view.NavTree;
import org.labkey.api.view.PopupMenu;
+import org.labkey.api.writer.HtmlWriter;
import org.labkey.luminex.AbstractLuminexControlUpdateService;
import org.labkey.luminex.LuminexDataHandler;
import org.labkey.luminex.model.Analyte;
@@ -125,7 +126,7 @@ public DisplayColumn createRenderer(ColumnInfo colInfo)
return new JavaScriptDisplayColumn(colInfo, List.of("clientapi/ext3", "vis/vis", "luminex/LeveyJenningsPlotHelpers.js", "luminex/LeveyJenningsReport.css"))
{
@Override
- public void renderGridCellContents(RenderContext ctx, Writer out) throws IOException
+ public void renderGridCellContents(RenderContext ctx, Writer oldWriter, HtmlWriter out) throws IOException
{
int protocolId = schema.getProtocol().getRowId();
int analyte = (int)ctx.get("analyte");
@@ -143,7 +144,7 @@ public void renderGridCellContents(RenderContext ctx, Writer out) throws IOExcep
ljPlotsNav.addChild(new NavTree("High MFI").setScript(String.format(jsFuncCall, protocolId, analyte, titration, "HighMFI")));
PopupMenu ljPlotsMenu = new PopupMenu(ljPlotsNav, PopupMenu.Align.LEFT, PopupMenu.ButtonStyle.IMAGE);
- ljPlotsMenu.renderMenuButton(ctx, out, false, null);
+ ljPlotsMenu.renderMenuButton(ctx, oldWriter, false, null);
}
@Override
diff --git a/luminex/src/org/labkey/luminex/query/ExclusionUIDisplayColumn.java b/luminex/src/org/labkey/luminex/query/ExclusionUIDisplayColumn.java
index 21e982faca..4e1f964d58 100644
--- a/luminex/src/org/labkey/luminex/query/ExclusionUIDisplayColumn.java
+++ b/luminex/src/org/labkey/luminex/query/ExclusionUIDisplayColumn.java
@@ -28,6 +28,7 @@
import org.labkey.api.util.HtmlString;
import org.labkey.api.util.Link;
import org.labkey.api.util.PageFlowUtil;
+import org.labkey.api.writer.HtmlWriter;
import java.io.IOException;
import java.io.Writer;
@@ -88,7 +89,7 @@ public HtmlString getTitle(RenderContext ctx)
}
@Override
- public void renderGridCellContents(RenderContext ctx, Writer out) throws IOException
+ public void renderGridCellContents(RenderContext ctx, Writer oldWriter, HtmlWriter out) throws IOException
{
String type = (String)ctx.get(_typeFieldKey);
String description = (String)ctx.get(_descriptionFieldKey);
@@ -111,11 +112,11 @@ public void renderGridCellContents(RenderContext ctx, Writer out) throws IOExcep
// add onclick handler to call the well exclusion window creation function
String onClick = "openExclusionsWellWindow(" + _protocolId + ", " + runId + ", " + dataId + ", " +
jsString(wellID) + ", " + (description == null ? null : jsString(description)) + ", " + jsString(type) + ");";
- new Link.LinkBuilder(img).href("#").onClick(onClick).clearClasses().appendTo(out);
+ new Link.LinkBuilder(img).href("#").onClick(onClick).clearClasses().appendTo(oldWriter);
}
else
{
- out.write(img.toString());
+ oldWriter.write(img.toString());
}
}
diff --git a/luminex/src/org/labkey/luminex/query/GuideSetTable.java b/luminex/src/org/labkey/luminex/query/GuideSetTable.java
index a1255ac8fe..6ef069f5e1 100644
--- a/luminex/src/org/labkey/luminex/query/GuideSetTable.java
+++ b/luminex/src/org/labkey/luminex/query/GuideSetTable.java
@@ -51,6 +51,7 @@
import org.labkey.api.assay.AssaySchema;
import org.labkey.api.assay.AssayService;
import org.labkey.api.util.HtmlString;
+import org.labkey.api.writer.HtmlWriter;
import org.labkey.luminex.LuminexDataHandler;
import org.labkey.luminex.model.AnalyteSinglePointControl;
import org.labkey.luminex.model.AnalyteTitration;
@@ -149,12 +150,12 @@ public DisplayColumn createRenderer(ColumnInfo colInfo)
{
return new DataColumn(colInfo){
@Override
- public void renderGridCellContents(RenderContext ctx, Writer out) throws IOException
+ public void renderGridCellContents(RenderContext ctx, Writer oldWriter, HtmlWriter out) throws IOException
{
if ( (Boolean)ctx.get(this.getColumnInfo().getFieldKey()) )
- out.write("Value-based");
+ oldWriter.write("Value-based");
else
- out.write("Run-based");
+ oldWriter.write("Run-based");
}
};
}
diff --git a/luminex/src/org/labkey/luminex/query/LuminexProtocolSchema.java b/luminex/src/org/labkey/luminex/query/LuminexProtocolSchema.java
index 3ac19c4dc6..a5a08e5578 100644
--- a/luminex/src/org/labkey/luminex/query/LuminexProtocolSchema.java
+++ b/luminex/src/org/labkey/luminex/query/LuminexProtocolSchema.java
@@ -69,6 +69,7 @@
import org.labkey.api.view.NavTree;
import org.labkey.api.view.ViewContext;
import org.labkey.api.view.template.ClientDependency;
+import org.labkey.api.writer.HtmlWriter;
import org.labkey.luminex.LuminexAssayProvider;
import org.labkey.luminex.LuminexDataHandler;
import org.labkey.luminex.LuminexResultsDataRegion;
@@ -623,7 +624,7 @@ public void addQueryFieldKeys(Set keys)
}
@Override
- public void renderGridCellContents(RenderContext ctx, Writer out) throws IOException
+ public void renderGridCellContents(RenderContext ctx, Writer oldWriter, HtmlWriter out) throws IOException
{
Map pdfs = new HashMap<>();
for (Map.Entry entry : _pdfColumns.entrySet())
@@ -641,9 +642,9 @@ public void renderGridCellContents(RenderContext ctx, Writer out) throws IOExcep
{
ActionURL url = PageFlowUtil.urlProvider(ExperimentUrls.class).getShowFileURL(getContainer());
url.addParameter("rowId", entry.getKey().toString());
- out.write("");
- out.write(" ");
- out.write(" ");
+ oldWriter.write("");
+ oldWriter.write(" ");
+ oldWriter.write(" ");
}
}
else if (pdfs.size() > 1)
@@ -664,7 +665,7 @@ else if (pdfs.size() > 1)
new LinkBuilder(image)
.onMouseOver("return showHelpDiv(this, 'Titration Curves', " + PageFlowUtil.jsString(PageFlowUtil.filter(sb.toString())) + ");")
.clearClasses()
- .appendTo(out);
+ .appendTo(oldWriter);
}
}
};
diff --git a/luminex/src/org/labkey/luminex/query/QCFlagHighlightDisplayColumn.java b/luminex/src/org/labkey/luminex/query/QCFlagHighlightDisplayColumn.java
index 23f2414793..f7db287cb3 100644
--- a/luminex/src/org/labkey/luminex/query/QCFlagHighlightDisplayColumn.java
+++ b/luminex/src/org/labkey/luminex/query/QCFlagHighlightDisplayColumn.java
@@ -20,16 +20,17 @@
import org.labkey.api.data.DataColumn;
import org.labkey.api.data.RenderContext;
import org.labkey.api.query.FieldKey;
-import java.io.IOException;
-import java.io.Writer;
+import org.labkey.api.util.DOM;
+import org.labkey.api.writer.HtmlWriter;
+
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
-/**
- * User: cnathe
- * Date: 1/9/12
- */
+import static org.labkey.api.util.DOM.Attribute.style;
+import static org.labkey.api.util.DOM.SPAN;
+import static org.labkey.api.util.DOM.at;
+
public class QCFlagHighlightDisplayColumn extends DataColumn
{
private final FieldKey _qcFlagsEnabledKey;
@@ -49,19 +50,26 @@ public void addQueryFieldKeys(Set keys)
}
@Override
- public void renderGridCellContents(RenderContext ctx, Writer out) throws IOException
+ public void renderGridCellContents(RenderContext ctx, HtmlWriter out)
{
// comma separated list of enabled states for any associated QC Flags (i.e. true,false)
String flagsEnabled = ctx.get(_qcFlagsEnabledKey, String.class);
List enabled = parseBooleans(flagsEnabled);
if (enabled.contains(true))
- out.write("");
-
- super.renderGridCellContents(ctx, out);
-
- if (enabled.contains(true))
- out.write(" ");
+ {
+ SPAN(
+ at(style, "color:red;"),
+ (DOM.Renderable) ret -> {
+ super.renderGridCellContents(ctx, out);
+ return ret;
+ }
+ ).appendTo(out);
+ }
+ else
+ {
+ super.renderGridCellContents(ctx, out);
+ }
}
private List parseBooleans(String s)
diff --git a/luminex/src/org/labkey/luminex/query/WellExclusionTable.java b/luminex/src/org/labkey/luminex/query/WellExclusionTable.java
index ffdf01f081..eb1f7e9e4e 100644
--- a/luminex/src/org/labkey/luminex/query/WellExclusionTable.java
+++ b/luminex/src/org/labkey/luminex/query/WellExclusionTable.java
@@ -48,8 +48,10 @@
import org.labkey.api.assay.AssayProvider;
import org.labkey.api.assay.AssayRunDatabaseContext;
import org.labkey.api.assay.AssayService;
+import org.labkey.api.util.HtmlString;
import org.labkey.api.util.PageFlowUtil;
import org.labkey.api.view.UnauthorizedException;
+import org.labkey.api.writer.HtmlWriter;
import org.labkey.luminex.LuminexManager;
import org.labkey.luminex.LuminexRunCreator;
@@ -111,10 +113,10 @@ public TableInfo getLookupTableInfo()
wellsCol.setDisplayColumnFactory(colInfo -> new DataColumn(colInfo)
{
@Override
- public void renderGridCellContents(RenderContext ctx, Writer out) throws IOException
+ public void renderGridCellContents(RenderContext ctx, HtmlWriter out)
{
Object o = getDisplayValue(ctx);
- out.write(null == o ? " " : PageFlowUtil.filter(o.toString()));
+ out.write(null == o ? HtmlString.NBSP : HtmlString.of(o.toString()));
}
@Override
diff --git a/ms2/src/org/labkey/ms2/MS2Controller.java b/ms2/src/org/labkey/ms2/MS2Controller.java
index 1e8004272f..b7eaeb8922 100644
--- a/ms2/src/org/labkey/ms2/MS2Controller.java
+++ b/ms2/src/org/labkey/ms2/MS2Controller.java
@@ -153,6 +153,7 @@
import org.labkey.api.view.ViewContext;
import org.labkey.api.view.WebPartView;
import org.labkey.api.view.template.PageConfig;
+import org.labkey.api.writer.HtmlWriter;
import org.labkey.ms2.compare.CompareDataRegion;
import org.labkey.ms2.compare.CompareExcelWriter;
import org.labkey.ms2.compare.CompareQuery;
@@ -2976,7 +2977,7 @@ public ModelAndView getView(Object o, BindException errors)
DataColumn descriptionColumn = new DataColumn(MS2Manager.getTableInfoRuns().getColumn("Description")) {
@Override
- public void renderGridCellContents(RenderContext ctx, Writer out) throws IOException
+ public void renderGridCellContents(RenderContext ctx, HtmlWriter out)
{
if (null != ctx.get("Container") && !((Boolean)ctx.get("deleted")).booleanValue())
super.renderGridCellContents(ctx, out);
diff --git a/ms2/src/org/labkey/ms2/ProteinDisplayColumn.java b/ms2/src/org/labkey/ms2/ProteinDisplayColumn.java
index b1de9ed96e..7253feb012 100644
--- a/ms2/src/org/labkey/ms2/ProteinDisplayColumn.java
+++ b/ms2/src/org/labkey/ms2/ProteinDisplayColumn.java
@@ -21,14 +21,15 @@
import org.labkey.api.data.ColumnInfo;
import org.labkey.api.data.RenderContext;
import org.labkey.api.query.FieldKey;
+import org.labkey.api.util.JavaScriptFragment;
import org.labkey.api.view.ActionURL;
-import org.labkey.api.view.HttpView;
+import org.labkey.api.writer.HtmlWriter;
-import java.io.IOException;
-import java.io.Writer;
import java.util.Map;
import java.util.Set;
+import static org.labkey.api.util.DOM.SCRIPT;
+
public class ProteinDisplayColumn extends AJAXDetailsDisplayColumn
{
private final FieldKey _seqIdFK;
@@ -47,17 +48,20 @@ public ProteinDisplayColumn(ColumnInfo col, ActionURL url, Map
}
@Override
- public void renderGridCellContents(RenderContext ctx, Writer out) throws IOException
+ public void renderGridCellContents(RenderContext ctx, HtmlWriter out)
{
if (!_renderedCSS)
{
- out.write("");
+ """;
+
+ SCRIPT(
+ JavaScriptFragment.unsafe(script)
+ ).appendTo(out);
+
_renderedCSS = true;
}
super.renderGridCellContents(ctx, out);
diff --git a/ms2/src/org/labkey/ms2/ProteinListDisplayColumn.java b/ms2/src/org/labkey/ms2/ProteinListDisplayColumn.java
index 5440ab333e..e109fac815 100644
--- a/ms2/src/org/labkey/ms2/ProteinListDisplayColumn.java
+++ b/ms2/src/org/labkey/ms2/ProteinListDisplayColumn.java
@@ -23,6 +23,7 @@
import org.labkey.api.util.PageFlowUtil;
import org.labkey.api.collections.CaseInsensitiveHashMap;
import org.labkey.api.query.FieldKey;
+import org.labkey.api.writer.HtmlWriter;
import java.io.Writer;
import java.io.IOException;
@@ -221,13 +222,13 @@ public Object getValue(RenderContext ctx)
}
@Override
- public void renderGridCellContents(RenderContext ctx, Writer out) throws IOException
+ public void renderGridCellContents(RenderContext ctx, Writer oldWriter, HtmlWriter out) throws IOException
{
Map row = ctx.getRow();
if (!row.containsKey(_columnName))
{
- out.write("ProteinGroupId not present in ResultSet");
+ oldWriter.write("ProteinGroupId not present in ResultSet");
return;
}
Object groupIdObject = row.get(_columnName);
@@ -237,7 +238,7 @@ public void renderGridCellContents(RenderContext ctx, Writer out) throws IOExcep
}
if (!(groupIdObject instanceof Number))
{
- out.write("ProteinGroupId is of unexpected type: " + groupIdObject.getClass());
+ oldWriter.write("ProteinGroupId is of unexpected type: " + groupIdObject.getClass());
return;
}
int groupId = ((Number) groupIdObject).intValue();
@@ -250,7 +251,7 @@ public void renderGridCellContents(RenderContext ctx, Writer out) throws IOExcep
{
for (ProteinSummary summary : summaryList)
{
- writeInfo(summary, out, url, groupId);
+ writeInfo(summary, oldWriter, url, groupId);
}
}
}
diff --git a/ms2/src/org/labkey/ms2/pipeline/mascot/MascotRun.java b/ms2/src/org/labkey/ms2/pipeline/mascot/MascotRun.java
index cc70da3822..1b5be134ce 100644
--- a/ms2/src/org/labkey/ms2/pipeline/mascot/MascotRun.java
+++ b/ms2/src/org/labkey/ms2/pipeline/mascot/MascotRun.java
@@ -20,9 +20,11 @@
import org.labkey.api.data.SimpleDisplayColumn;
import org.labkey.api.data.SimpleFilter;
import org.labkey.api.query.FieldKey;
+import org.labkey.api.util.HtmlString;
import org.labkey.api.view.JspView;
import org.labkey.api.view.ViewContext;
import org.labkey.api.view.WebPartView;
+import org.labkey.api.writer.HtmlWriter;
import org.labkey.ms2.MS2Controller;
import org.labkey.ms2.MS2Manager;
import org.labkey.ms2.MS2Peptide;
@@ -33,16 +35,9 @@
import org.labkey.ms2.peptideview.QueryPeptideMS2RunView;
import org.springframework.web.servlet.ModelAndView;
-import java.io.IOException;
import java.io.PrintWriter;
-import java.io.Writer;
import java.util.Map;
-/**
- * User: arauch
- * Date: Jul 21, 2005
- * Time: 10:19:11 PM
- */
public class MascotRun extends MS2Run
{
private String mascotFile;
@@ -173,17 +168,17 @@ public CurrentPeptideColumn(long currentPeptideId)
}
@Override
- public void renderDetailsCellContents(RenderContext ctx, Writer out) throws IOException
+ public void renderDetailsCellContents(RenderContext ctx, HtmlWriter out)
{
renderGridCellContents(ctx, out);
}
@Override
- public void renderGridCellContents(RenderContext ctx, Writer out) throws IOException
+ public void renderGridCellContents(RenderContext ctx, HtmlWriter out)
{
if (_currentPeptideId.equals(ctx.getRow().get("rowId")))
{
- out.write("✔ "); // html checkmark
+ out.write(HtmlString.unsafe("✔ ")); // html checkmark
}
}
}
diff --git a/viability/src/org/labkey/viability/ViabilityAssaySchema.java b/viability/src/org/labkey/viability/ViabilityAssaySchema.java
index 0eab1ad435..2159f38ee3 100644
--- a/viability/src/org/labkey/viability/ViabilityAssaySchema.java
+++ b/viability/src/org/labkey/viability/ViabilityAssaySchema.java
@@ -56,6 +56,7 @@
import org.labkey.api.query.QuerySettings;
import org.labkey.api.security.User;
import org.labkey.api.study.assay.SpecimenForeignKey;
+import org.labkey.api.util.DOM;
import org.labkey.api.util.HtmlString;
import org.labkey.api.util.HtmlStringBuilder;
import org.labkey.api.util.PageFlowUtil;
@@ -63,10 +64,9 @@
import org.labkey.api.view.ActionURL;
import org.labkey.api.view.HttpView;
import org.labkey.api.view.ViewContext;
+import org.labkey.api.writer.HtmlWriter;
import org.springframework.validation.BindException;
-import java.io.IOException;
-import java.io.Writer;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
@@ -76,6 +76,11 @@
import java.util.Map;
import java.util.Set;
+import static org.labkey.api.util.DOM.Attribute.align;
+import static org.labkey.api.util.DOM.Attribute.src;
+import static org.labkey.api.util.DOM.IMG;
+import static org.labkey.api.util.DOM.at;
+
public class ViabilityAssaySchema extends AssayProtocolSchema
{
public enum UserTables
@@ -382,7 +387,7 @@ public DisplayColumn createRenderer(ColumnInfo colInfo)
return new DataColumn(colInfo)
{
@Override
- public void renderGridCellContents(RenderContext ctx, Writer out) throws IOException
+ public void renderGridCellContents(RenderContext ctx, HtmlWriter out)
{
super.renderGridCellContents(ctx, out);
@@ -408,10 +413,12 @@ public void renderGridCellContents(RenderContext ctx, Writer out) throws IOExcep
.unsafeAppend("
")
.getHtmlString();
- HtmlString imgHtml = HtmlString.unsafe(" ");
+ DOM.Renderable image = IMG(
+ at(align, "top", src, HttpView.currentContext().getContextPath() + "/_images/mv_indicator.gif").
+ cl("labkey-mv-indicator")
+ );
- PageFlowUtil.popupHelp(popupHtml, "Unmatched Specimen IDs").link(imgHtml).width(0).appendTo(out);
+ PageFlowUtil.popupHelp(popupHtml, "Unmatched Specimen IDs").link(image).width(0).appendTo(out);
}
}
From 08c6e001c79a685a119481d48a6fa487c20776e5 Mon Sep 17 00:00:00 2001
From: Adam Rauch
Date: Thu, 13 Mar 2025 17:15:04 -0700
Subject: [PATCH 05/10] Clean up
---
.../controllers/executescript/SamplesConfirmGridView.java | 4 ++--
luminex/src/org/labkey/luminex/LuminexUploadWizardAction.java | 2 +-
.../labkey/luminex/query/NegativeBeadDisplayColumnGroup.java | 2 +-
3 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/flow/src/org/labkey/flow/controllers/executescript/SamplesConfirmGridView.java b/flow/src/org/labkey/flow/controllers/executescript/SamplesConfirmGridView.java
index 1ed897eca2..d610f9e3ee 100644
--- a/flow/src/org/labkey/flow/controllers/executescript/SamplesConfirmGridView.java
+++ b/flow/src/org/labkey/flow/controllers/executescript/SamplesConfirmGridView.java
@@ -335,7 +335,7 @@ protected void renderExtraRecordSelectorContent(RenderContext ctx, HtmlWriter ou
{
// Add a hidden input for spring form binding -- if this value is posted, the row was unchecked.
out.write(
- new Input.InputBuilder()
+ new Input.InputBuilder<>()
.type("hidden")
.name(SpringActionController.FIELD_MARKER + getRecordSelectorName(ctx))
.value(0)
@@ -515,7 +515,7 @@ public void renderGridCellContents(RenderContext ctx, HtmlWriter out)
String sampleId = ctx.get(SAMPLE_ID_FIELD_KEY, String.class);
for (FlowFCSFile candidate : candidates)
{
- out.write(new Input.InputBuilder().type("hidden").name("selectedSamples.rows[" + sampleId + "].candidateFile").value(candidate.getRowId()));
+ out.write(new Input.InputBuilder<>().type("hidden").name("selectedSamples.rows[" + sampleId + "].candidateFile").value(candidate.getRowId()));
}
}
}
diff --git a/luminex/src/org/labkey/luminex/LuminexUploadWizardAction.java b/luminex/src/org/labkey/luminex/LuminexUploadWizardAction.java
index 4678992cb8..7468acdd7a 100644
--- a/luminex/src/org/labkey/luminex/LuminexUploadWizardAction.java
+++ b/luminex/src/org/labkey/luminex/LuminexUploadWizardAction.java
@@ -437,7 +437,7 @@ public void writeSameCheckboxCell(RenderContext ctx, HtmlWriter out)
TD(
at(style, "display:" + (hideCell ? "none" : "table-cell")).
name(titrationCellName),
- new Input.InputBuilder().type("checkbox").name(id).id(id)
+ new Input.InputBuilder<>().type("checkbox").name(id).id(id)
).appendTo(out);
diff --git a/luminex/src/org/labkey/luminex/query/NegativeBeadDisplayColumnGroup.java b/luminex/src/org/labkey/luminex/query/NegativeBeadDisplayColumnGroup.java
index f107310d79..0055351476 100644
--- a/luminex/src/org/labkey/luminex/query/NegativeBeadDisplayColumnGroup.java
+++ b/luminex/src/org/labkey/luminex/query/NegativeBeadDisplayColumnGroup.java
@@ -46,7 +46,7 @@ public void writeSameCheckboxCell(RenderContext ctx, HtmlWriter out)
isCopyable() ? (DOM.Renderable) ret -> {
String inputName = ColumnInfo.propNameFromName(_inputName);
String id = inputName + "CheckBox";
- new Input.InputBuilder().type("checkbox").name(id).id(id).appendTo(out);
+ new Input.InputBuilder<>().type("checkbox").name(id).id(id).appendTo(out);
StringBuilder onChange = new StringBuilder("b = this.checked;\n");
getColumns().forEach(col -> {
From 5acf5678ba418c876bf0d504b2c1300766ff2a22 Mon Sep 17 00:00:00 2001
From: Adam Rauch
Date: Thu, 13 Mar 2025 17:18:13 -0700
Subject: [PATCH 06/10] CR CR
---
.../controllers/executescript/SamplesConfirmGridView.java | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/flow/src/org/labkey/flow/controllers/executescript/SamplesConfirmGridView.java b/flow/src/org/labkey/flow/controllers/executescript/SamplesConfirmGridView.java
index d610f9e3ee..80a4d4baad 100644
--- a/flow/src/org/labkey/flow/controllers/executescript/SamplesConfirmGridView.java
+++ b/flow/src/org/labkey/flow/controllers/executescript/SamplesConfirmGridView.java
@@ -46,7 +46,7 @@
import org.labkey.api.util.PageFlowUtil;
import org.labkey.api.util.SimpleNamedObject;
import org.labkey.api.util.StringExpression;
-import org.labkey.api.util.element.Input;
+import org.labkey.api.util.element.Input.InputBuilder;
import org.labkey.api.view.GridView;
import org.labkey.api.writer.HtmlWriter;
import org.labkey.flow.analysis.model.ISampleInfo;
@@ -335,7 +335,7 @@ protected void renderExtraRecordSelectorContent(RenderContext ctx, HtmlWriter ou
{
// Add a hidden input for spring form binding -- if this value is posted, the row was unchecked.
out.write(
- new Input.InputBuilder<>()
+ new InputBuilder<>()
.type("hidden")
.name(SpringActionController.FIELD_MARKER + getRecordSelectorName(ctx))
.value(0)
@@ -515,7 +515,8 @@ public void renderGridCellContents(RenderContext ctx, HtmlWriter out)
String sampleId = ctx.get(SAMPLE_ID_FIELD_KEY, String.class);
for (FlowFCSFile candidate : candidates)
{
- out.write(new Input.InputBuilder<>().type("hidden").name("selectedSamples.rows[" + sampleId + "].candidateFile").value(candidate.getRowId()));
+ out.write(new InputBuilder<>().type("hidden").name("selectedSamples.rows[" + sampleId + "].candidateFile").value(candidate.getRowId()));
+ out.write("\n");
}
}
}
From 2717fb77ea63b5f2ed93c7550bdecfda679ce8d9 Mon Sep 17 00:00:00 2001
From: Adam Rauch
Date: Thu, 13 Mar 2025 17:50:11 -0700
Subject: [PATCH 07/10] Better scripty stuff
---
.../luminex/query/ExclusionUIDisplayColumn.java | 4 ++--
.../query/NegativeBeadDisplayColumnFactory.java | 17 +++++++++++------
2 files changed, 13 insertions(+), 8 deletions(-)
diff --git a/luminex/src/org/labkey/luminex/query/ExclusionUIDisplayColumn.java b/luminex/src/org/labkey/luminex/query/ExclusionUIDisplayColumn.java
index 4e1f964d58..cc07e919ab 100644
--- a/luminex/src/org/labkey/luminex/query/ExclusionUIDisplayColumn.java
+++ b/luminex/src/org/labkey/luminex/query/ExclusionUIDisplayColumn.java
@@ -26,7 +26,7 @@
import org.labkey.api.util.DOM;
import org.labkey.api.util.DOM.Attribute;
import org.labkey.api.util.HtmlString;
-import org.labkey.api.util.Link;
+import org.labkey.api.util.Link.LinkBuilder;
import org.labkey.api.util.PageFlowUtil;
import org.labkey.api.writer.HtmlWriter;
@@ -112,7 +112,7 @@ public void renderGridCellContents(RenderContext ctx, Writer oldWriter, HtmlWrit
// add onclick handler to call the well exclusion window creation function
String onClick = "openExclusionsWellWindow(" + _protocolId + ", " + runId + ", " + dataId + ", " +
jsString(wellID) + ", " + (description == null ? null : jsString(description)) + ", " + jsString(type) + ");";
- new Link.LinkBuilder(img).href("#").onClick(onClick).clearClasses().appendTo(oldWriter);
+ new LinkBuilder(img).href("#").onClick(onClick).clearClasses().appendTo(oldWriter);
}
else
{
diff --git a/luminex/src/org/labkey/luminex/query/NegativeBeadDisplayColumnFactory.java b/luminex/src/org/labkey/luminex/query/NegativeBeadDisplayColumnFactory.java
index 74ac7a487c..d3815e0e5b 100644
--- a/luminex/src/org/labkey/luminex/query/NegativeBeadDisplayColumnFactory.java
+++ b/luminex/src/org/labkey/luminex/query/NegativeBeadDisplayColumnFactory.java
@@ -23,10 +23,11 @@
import org.labkey.api.data.DisplayColumn;
import org.labkey.api.data.DisplayColumnFactory;
import org.labkey.api.data.RenderContext;
+import org.labkey.api.util.DOM;
import org.labkey.api.util.HtmlString;
import org.labkey.api.util.HtmlStringBuilder;
+import org.labkey.api.util.JavaScriptFragment;
import org.labkey.api.util.PageFlowUtil;
-import org.labkey.api.view.HttpView;
import org.labkey.api.writer.HtmlWriter;
import org.labkey.luminex.LuminexDataHandler;
@@ -34,6 +35,8 @@
import java.io.Writer;
import java.util.Set;
+import static org.labkey.api.util.DOM.SCRIPT;
+
public class NegativeBeadDisplayColumnFactory implements DisplayColumnFactory
{
private final String _analyteName;
@@ -63,12 +66,14 @@ public String getFormFieldName(RenderContext ctx)
@Override
public @NotNull HtmlString getTitle(RenderContext ctx)
{
+ String script = """
+ LABKEY.requiresExt4Sandbox(function() {
+ LABKEY.requiresScript('luminex/NegativeBeadPopulation.js');
+ });
+ """;
+
return HtmlStringBuilder.of()
- .unsafeAppend("\n")
+ .append(DOM.createHtml(SCRIPT(JavaScriptFragment.unsafe(script))))
.append(_displayName).getHtmlString();
}
From bb7a99555354c669deb56652e1d2d497f42cddd6 Mon Sep 17 00:00:00 2001
From: Adam Rauch
Date: Fri, 14 Mar 2025 07:05:24 -0700
Subject: [PATCH 08/10] Fix assay upload wizard
---
.../query/AnalytePropStandardsDisplayColumn.java | 13 +++++++------
1 file changed, 7 insertions(+), 6 deletions(-)
diff --git a/luminex/src/org/labkey/luminex/query/AnalytePropStandardsDisplayColumn.java b/luminex/src/org/labkey/luminex/query/AnalytePropStandardsDisplayColumn.java
index fbe96011ea..b0e61d811c 100644
--- a/luminex/src/org/labkey/luminex/query/AnalytePropStandardsDisplayColumn.java
+++ b/luminex/src/org/labkey/luminex/query/AnalytePropStandardsDisplayColumn.java
@@ -23,6 +23,7 @@
import org.labkey.api.data.SqlSelector;
import org.labkey.api.util.DOM;
import org.labkey.api.util.PageFlowUtil;
+import org.labkey.api.util.element.Input.InputBuilder;
import org.labkey.api.writer.HtmlWriter;
import org.labkey.luminex.LuminexRunUploadForm;
import org.labkey.luminex.LuminexUploadWizardAction;
@@ -61,7 +62,7 @@ public AnalytePropStandardsDisplayColumn(LuminexRunUploadForm form, Titration ti
}
@Override
- public void renderInputHtml(RenderContext ctx, Writer oldWriter, HtmlWriter out, Object value) throws IOException
+ public void renderInputHtml(RenderContext ctx, HtmlWriter out, Object value)
{
String titrationName = _titration.getName();
String propertyName = PageFlowUtil.filter(LuminexUploadWizardAction.getTitrationCheckboxName(titrationName, _analyteName));
@@ -91,30 +92,30 @@ public void renderInputHtml(RenderContext ctx, Writer oldWriter, HtmlWriter out,
defVal = new SqlSelector(LuminexProtocolSchema.getSchema(), selectedSQL).exists() ? "true" : "false";
}
- String checked = "";
+ boolean checked = false;
if (_errorReshow)
{
// if reshowing form on error, preselect based on request value
if (_form.getViewContext().getRequest().getParameter(propertyName) != null)
- checked = "CHECKED";
+ checked = true;
}
else if (_standardTitrations.contains(_titration))
{
if (_standardTitrations.size() == 1)
{
// if there is only one standard, then preselect the checkbox
- checked = "CHECKED";
+ checked = true;
}
else if (defVal == null || defVal.equalsIgnoreCase("true"))
{
// if > 1 standard and default value exists, set checkbox based on default value
// else if no default value and titration is standard, then preselect the checkbox
- checked = "CHECKED";
+ checked = true;
}
}
- oldWriter.write(" ");
+ out.write(new InputBuilder<>().type("checkbox").value(1).name(propertyName).checked(checked));
}
@Override
From 2ad8a498c2c66626c438be789d9d671ddfaa36a3 Mon Sep 17 00:00:00 2001
From: labkey-jeckels
Date: Mon, 17 Mar 2025 11:15:43 -0700
Subject: [PATCH 09/10] Don't encode NBSP. Code cleanup. Delete unused class
---
ms2/src/org/labkey/ms2/MS2Controller.java | 36 ++-
.../labkey/ms2/compare/CompareDataRegion.java | 11 +-
.../ms2/query/AbstractRunCompareView.java | 262 ------------------
3 files changed, 19 insertions(+), 290 deletions(-)
delete mode 100644 ms2/src/org/labkey/ms2/query/AbstractRunCompareView.java
diff --git a/ms2/src/org/labkey/ms2/MS2Controller.java b/ms2/src/org/labkey/ms2/MS2Controller.java
index b7eaeb8922..9355e0a865 100644
--- a/ms2/src/org/labkey/ms2/MS2Controller.java
+++ b/ms2/src/org/labkey/ms2/MS2Controller.java
@@ -195,7 +195,6 @@
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
-import java.io.Writer;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Arrays;
@@ -1235,7 +1234,7 @@ protected boolean getRequiresSameType()
@Override
public ModelAndView getSetupView(RunListForm form, BindException errors, int runListId)
{
- JspView extraCompareOptions = new JspView<>("/org/labkey/ms2/compare/compareSearchEngineProteinOptions.jsp");
+ JspView> extraCompareOptions = new JspView<>("/org/labkey/ms2/compare/compareSearchEngineProteinOptions.jsp");
ActionURL nextURL = getViewContext().cloneActionURL().setAction(ApplyCompareViewAction.class);
return pickView(nextURL, "Select a view to apply a filter to all the runs.", extraCompareOptions, runListId, "Compare");
@@ -1341,7 +1340,7 @@ public ModelAndView getSetupView(PeptideFilteringComparisonForm form, BindExcept
{
CompareOptionsBean bean = new CompareOptionsBean<>(new ActionURL(ComparePeptideQueryAction.class, getContainer()), runListId, form);
- return new JspView("/org/labkey/ms2/compare/comparePeptideQueryOptions.jsp", bean);
+ return new JspView>("/org/labkey/ms2/compare/comparePeptideQueryOptions.jsp", bean);
}
@Override
@@ -1887,7 +1886,7 @@ public void addNavTrail(NavTree root)
}
// extraFormHtml gets inserted between the view dropdown and the button.
- private HttpView pickView(ActionURL nextURL, String viewInstructions, HttpView embeddedView, int runListId, String buttonText)
+ private HttpView> pickView(ActionURL nextURL, String viewInstructions, HttpView> embeddedView, int runListId, String buttonText)
{
JspView pickView = new JspView<>("/org/labkey/ms2/pickView.jsp", new PickViewBean());
@@ -1920,7 +1919,7 @@ protected boolean getRequiresSameType()
@Override
public ModelAndView getSetupView(RunListForm form, BindException errors, int runListId)
{
- JspView extraExportView = new JspView("/org/labkey/ms2/extraExportOptions.jsp");
+ JspView> extraExportView = new JspView<>("/org/labkey/ms2/extraExportOptions.jsp");
return pickView(getViewContext().cloneActionURL().setAction(ApplyExportRunsViewAction.class), "Select a view to apply a filter to all the runs and to indicate what columns to export.", extraExportView, runListId, "Export");
}
@@ -1963,12 +1962,12 @@ public void export(ExportForm form, HttpServletResponse response, BindException
@RequiresPermission(ReadPermission.class)
public class ShowCompareAction extends SimpleViewAction
{
- private StringBuilder _title = new StringBuilder();
+ private final StringBuilder _title = new StringBuilder();
@Override
public ModelAndView getView(ExportForm form, BindException errors)
{
- return compareRuns(form.getRunList(), false, _title, form.getColumn(), errors);
+ return compareRuns(form.getRunList(), false, _title, errors);
}
@Override
@@ -1985,7 +1984,7 @@ public class ExportCompareToExcel extends ExportAction
@Override
public void export(ExportForm form, HttpServletResponse response, BindException errors) throws Exception
{
- ModelAndView view = compareRuns(form.getRunList(), true, null, form.getColumn(), errors);
+ ModelAndView view = compareRuns(form.getRunList(), true, null, errors);
if (view != null)
{
throw new ExportException(view);
@@ -2171,7 +2170,7 @@ public ModelAndView getSetupView(SpectraCountForm form, BindException errors, in
{
CompareOptionsBean bean = new CompareOptionsBean<>(new ActionURL(SpectraCountAction.class, getContainer()), runListId, form);
- return new JspView("/org/labkey/ms2/compare/spectraCountOptions.jsp", bean);
+ return new JspView>("/org/labkey/ms2/compare/spectraCountOptions.jsp", bean);
}
@Override
@@ -2282,7 +2281,7 @@ public void addNavTrail(NavTree root)
}
}
- private ModelAndView compareRuns(int runListIndex, boolean exportToExcel, StringBuilder title, String column, BindException errors)
+ private ModelAndView compareRuns(int runListIndex, boolean exportToExcel, StringBuilder title, BindException errors)
{
ActionURL currentURL = getViewContext().getActionURL();
@@ -2352,7 +2351,7 @@ private ModelAndView compareRuns(int runListIndex, boolean exportToExcel, String
rgn.setColSpan(query.getColumnsPerRun());
rgn.setMultiColumnCaptions(runCaptions);
- HttpView filterView = new CurrentFilterView(query);
+ HttpView> filterView = new CurrentFilterView(query);
GridView compareView = new GridView(rgn, errors);
rgn.setShowPagination(false);
@@ -2544,10 +2543,9 @@ public ApiResponse execute(final ExportForm form, BindException errors) throws E
{
MS2Run run = form.validateRun();
AbstractMS2RunView peptideView = getPeptideView(form.getGrouping(), run);
- WebPartView gridView = peptideView.createGridView(form);
- if (gridView instanceof QueryView)
+ AbstractMS2QueryView queryView = peptideView.createGridView(form);
+ if (queryView != null)
{
- QueryView queryView = (QueryView)gridView;
int count = DataRegionSelection.setSelectionForAll(queryView, queryView.getSettings().getSelectionKey(), true);
return new DataRegionSelection.SelectionResponse(count);
}
@@ -3564,7 +3562,7 @@ private ProteinsView(ActionURL currentURL, MS2Run run, DetailsForm form, List sequenceView;
bean.run = run;
if (showPeptides && !form.isSimpleSequenceView())
{
@@ -3949,7 +3947,7 @@ public ModelAndView getView(DetailsForm form, BindException errors)
ms2Run = form.validateRun();
MS2Run[] runs = new MS2Run[] { ms2Run };
QueryPeptideMS2RunView peptideView = new QueryPeptideMS2RunView(getViewContext(), runs);
- WebPartView gv = peptideView.createGridView(form);
+ AbstractMS2QueryView gv = peptideView.createGridView(form);
VBox vBox = new VBox();
vBox.setFrame(WebPartView.FrameType.DIALOG);
vBox.addView(gv);
@@ -4011,11 +4009,11 @@ public ModelAndView getView(PieSliceSectionForm form, BindException errors)
if (StringUtils.isBlank(sliceDefinition))
sliceDefinition = "Miscellaneous or Defunct Category";
String html = "" + PageFlowUtil.filter(sliceDefinition) + " ";
- HttpView definitionView = new HtmlView("Definition", HtmlString.unsafe(html));
+ HtmlView definitionView = new HtmlView("Definition", HtmlString.unsafe(html));
vbox.addView(definitionView);
String sqids = form.getSqids();
- String sqidArr[] = sqids.split(",");
+ String[] sqidArr = sqids.split(",");
List proteins = new ArrayList<>(sqidArr.length);
for (String curSqid : sqidArr)
{
@@ -4814,7 +4812,7 @@ public void export(DetailsForm form, HttpServletResponse response, BindException
}
}
}
- if (paramsFile == null || !NetworkDrive.exists(paramsFile))
+ if (!NetworkDrive.exists(paramsFile))
{
// If not, fall back on the default name
paramsFile = new File(run.getPath() + "/" + run.getParamsFileName());
diff --git a/ms2/src/org/labkey/ms2/compare/CompareDataRegion.java b/ms2/src/org/labkey/ms2/compare/CompareDataRegion.java
index 13180f2191..344bc35564 100644
--- a/ms2/src/org/labkey/ms2/compare/CompareDataRegion.java
+++ b/ms2/src/org/labkey/ms2/compare/CompareDataRegion.java
@@ -43,17 +43,10 @@ public class CompareDataRegion extends DataRegion
int _offset = 0;
int _colSpan;
private final ResultSet _rs;
- private final String _columnHeader;
public CompareDataRegion(ResultSet rs)
- {
- this(rs, " ");
- }
-
- public CompareDataRegion(ResultSet rs, String columnHeader)
{
_rs = rs;
- _columnHeader = columnHeader;
setName(MS2Manager.getDataRegionNameCompare());
setShowPagination(false);
}
@@ -85,7 +78,7 @@ protected void renderGridHeaderColumns(RenderContext ctx, HtmlWriter out, boolea
// Add an extra row and render the multi-column captions
TR(
showRecordSelectors ? TD() : null,
- _offset > 0 ? TD(at(colspan, _offset, style, "text-align: center; vertical-align: bottom;"), _columnHeader) : null,
+ _offset > 0 ? TD(at(colspan, _offset, style, "text-align: center; vertical-align: bottom;"), HtmlString.NBSP) : null,
(Renderable) ret -> {
final MutableBoolean shade = new MutableBoolean(false);
final MutableInt columnIndex = new MutableInt(0);
@@ -103,7 +96,7 @@ protected void renderGridHeaderColumns(RenderContext ctx, HtmlWriter out, boolea
{
TD(
at(colspan, _offset, style, "text-align: center; vertical-align: bottom;"),
- _columnHeader
+ HtmlString.NBSP
).appendTo(out);
}
diff --git a/ms2/src/org/labkey/ms2/query/AbstractRunCompareView.java b/ms2/src/org/labkey/ms2/query/AbstractRunCompareView.java
deleted file mode 100644
index a632c2ef29..0000000000
--- a/ms2/src/org/labkey/ms2/query/AbstractRunCompareView.java
+++ /dev/null
@@ -1,262 +0,0 @@
-/*
- * Copyright (c) 2007-2018 LabKey Corporation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.labkey.ms2.query;
-
-import org.labkey.api.data.ColumnInfo;
-import org.labkey.api.data.Container;
-import org.labkey.api.data.DataRegion;
-import org.labkey.api.data.DisplayColumn;
-import org.labkey.api.data.SimpleFilter;
-import org.labkey.api.data.Sort;
-import org.labkey.api.data.TableInfo;
-import org.labkey.api.query.CustomView;
-import org.labkey.api.query.FieldKey;
-import org.labkey.api.query.QueryService;
-import org.labkey.api.query.QuerySettings;
-import org.labkey.api.query.QueryView;
-import org.labkey.api.security.permissions.ReadPermission;
-import org.labkey.api.util.PageFlowUtil;
-import org.labkey.api.view.ActionURL;
-import org.labkey.api.view.DataView;
-import org.labkey.api.view.UnauthorizedException;
-import org.labkey.api.view.ViewContext;
-import org.labkey.ms2.MS2Controller;
-import org.labkey.ms2.MS2Run;
-import org.labkey.ms2.RunListCache;
-import org.labkey.ms2.RunListException;
-import org.labkey.ms2.compare.CompareDataRegion;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-/**
- * User: jeckels
- * Date: Jun 21, 2007
- */
-public abstract class AbstractRunCompareView extends QueryView
-{
- protected List _runs;
- protected boolean _forExport;
- private final SimpleFilter _runFilter = new SimpleFilter();
- private List _columns;
-
- public AbstractRunCompareView(ViewContext context, int runListIndex, boolean forExport, String tableName)
- {
- super(new MS2Schema(context.getUser(), context.getContainer()));
- setSettings(createSettings(context, tableName));
-
- _viewContext.setActionURL(context.getActionURL());
-
- try
- {
- _runs = RunListCache.getCachedRuns(runListIndex, false, context);
- }
- catch (RunListException e)
- {
- _runs = null;
- }
-
- if (_runs != null)
- {
- for (MS2Run run : _runs)
- {
- Container c = run.getContainer();
- if (c == null || !c.hasPermission(getUser(), ReadPermission.class))
- {
- throw new UnauthorizedException();
- }
- }
-
- getSchema().setRuns(_runs);
-
- _forExport = forExport;
-
- setButtonBarPosition(DataRegion.ButtonBarPosition.TOP);
- }
- // ExcelWebQueries won't be part of the same HTTP session so we won't have access to the run list anymore
- setAllowExportExternalQuery(false);
- }
-
- public List getRuns()
- {
- return _runs;
- }
-
- private QuerySettings createSettings(ViewContext context, String tableName)
- {
- return getSchema().getSettings(context, "Compare", tableName);
- }
-
- @Override
- public MS2Schema getSchema()
- {
- return (MS2Schema)super.getSchema();
- }
-
- @Override
- public DataView createDataView()
- {
- DataView result = super.createDataView();
- Sort sort = result.getRenderContext().getBaseSort();
- if (sort == null)
- {
- sort = new Sort();
- }
- sort.insertSortColumn("-RunCount", false, sort.getSortList().size());
- sort.insertSortColumn("-Pattern", false, sort.getSortList().size());
- result.getRenderContext().setBaseSort(sort);
- result.getRenderContext().setViewContext(getViewContext());
- SimpleFilter filter = new SimpleFilter(result.getRenderContext().getBaseFilter());
-
- for (SimpleFilter.FilterClause clause : new ArrayList<>(filter.getClauses()))
- {
- for (FieldKey fieldKey : clause.getFieldKeys())
- {
- if (fieldKey.toString().startsWith("Run/"))
- {
- SimpleFilter filterToRemove = new SimpleFilter();
- filterToRemove.addClause(clause);
- String urlParam = filterToRemove.toQueryString(getSettings().getDataRegionName());
- if (urlParam != null && urlParam.indexOf('=') != -1)
- {
- filter.deleteConditions(fieldKey);
-
- SimpleFilter.OrClause orClause = new SimpleFilter.OrClause();
- for (MS2Run run : _runs)
- {
- String newParam = urlParam.replace("Run%2F", "Run" + run.getRun() + "%2F");
- ActionURL newURL = result.getRenderContext().getViewContext().cloneActionURL();
- newURL.deleteParameters();
- newURL = new ActionURL(newURL + newParam);
- SimpleFilter newFilter = new SimpleFilter(newURL, getSettings().getDataRegionName());
- for (SimpleFilter.FilterClause newClause : newFilter.getClauses())
- {
- orClause.addClause(newClause);
- }
- }
- _runFilter.addClause(orClause);
- }
- }
- }
- }
-
- filter.addAllClauses(_runFilter);
-
- result.getRenderContext().setBaseFilter(filter);
- return result;
- }
-
- protected abstract String getGroupHeader();
-
- public void setColumns(List columns)
- {
- _columns = columns;
- }
-
- @Override
- protected DataRegion createDataRegion()
- {
- CompareDataRegion rgn = new CompareDataRegion(null, getGroupHeader());
- configureDataRegion(rgn);
- List displayColumns = getDisplayColumns();
- int offset = 0;
- for (DisplayColumn col : displayColumns)
- {
- if (col.getColumnInfo() == null || (!col.getColumnInfo().getName().toLowerCase().startsWith("run") || col.getColumnInfo().getName().indexOf('/') == -1))
- {
- offset++;
- }
- }
- rgn.setOffset(offset);
- List headings = new ArrayList<>();
- for (MS2Run run : _runs)
- {
- ActionURL url = MS2Controller.getShowRunURL(getUser(), run.getContainer(), run.getRun());
- headings.add("" + PageFlowUtil.filter(run.getDescription()) + " ");
- }
- rgn.setMultiColumnCaptions(headings);
- rgn.setColSpan((displayColumns.size() - offset) / _runs.size());
- return rgn;
- }
-
- @Override
- public List getDisplayColumns()
- {
- List ret = new ArrayList<>();
- TableInfo table = getTable();
- if (table == null)
- return Collections.emptyList();
-
- CustomView view = getCustomView();
- List cols;
-
- if (_columns != null)
- {
- cols = _columns;
- }
- else if (view != null)
- {
- cols = view.getColumns();
- }
- else
- {
- cols = table.getDefaultVisibleColumns();
- }
-
- List nonRunCols = new ArrayList<>();
- List runCols = new ArrayList<>();
- int runColCount = 0;
- for (FieldKey col : cols)
- {
- if ("Run".equalsIgnoreCase(col.getParts().get(0)))
- {
- List parts = new ArrayList<>(col.getParts());
- int runOffset = 0;
- for (MS2Run run : _runs)
- {
- parts.set(0, "Run" + run.getRun());
- runCols.add((runColCount + 1) * runOffset + runColCount, FieldKey.fromParts(parts));
- runOffset++;
- }
- runColCount++;
- }
- else
- {
- nonRunCols.add(col);
- }
- }
-
- List newCols = new ArrayList<>(nonRunCols);
- newCols.addAll(runCols);
- if (view != null)
- {
- view.setColumns(newCols);
- ret.addAll(getQueryDef().getDisplayColumns(view, table));
- }
- else
- {
- for (ColumnInfo col : QueryService.get().getColumns(table, newCols).values())
- {
- DisplayColumn renderer = col.getRenderer();
- ret.add(renderer);
- }
- }
-
- return ret;
- }
-}
From 160e9ca8ffc65fbb45909a1cd37062a196a378d7 Mon Sep 17 00:00:00 2001
From: Adam Rauch
Date: Mon, 17 Mar 2025 11:41:29 -0700
Subject: [PATCH 10/10] Clean up a few unnecessary wrappings
---
flow/src/org/labkey/flow/view/GraphColumn.java | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/flow/src/org/labkey/flow/view/GraphColumn.java b/flow/src/org/labkey/flow/view/GraphColumn.java
index 47b2c7a85b..6739d690d6 100644
--- a/flow/src/org/labkey/flow/view/GraphColumn.java
+++ b/flow/src/org/labkey/flow/view/GraphColumn.java
@@ -39,8 +39,6 @@
import org.labkey.flow.controllers.well.WellController;
import org.labkey.flow.query.FlowQuerySettings;
-import java.io.Writer;
-
import static org.labkey.api.util.DOM.Attribute.alt;
import static org.labkey.api.util.DOM.Attribute.height;
import static org.labkey.api.util.DOM.Attribute.src;
@@ -125,9 +123,9 @@ protected FlowQuerySettings.ShowGraphs showGraphs(RenderContext ctx)
}
@Override
- public void renderGridCellContents(RenderContext ctx, Writer oldWriter, HtmlWriter out)
+ public void renderGridCellContents(RenderContext ctx, HtmlWriter out)
{
- renderGraph(ctx, HtmlWriter.of(oldWriter));
+ renderGraph(ctx, out);
}
public void renderGraph(RenderContext ctx, HtmlWriter out)