diff --git a/flow/src/org/labkey/flow/controllers/executescript/ChooseRunsRegion.java b/flow/src/org/labkey/flow/controllers/executescript/ChooseRunsRegion.java index 370919f22a..68d1ca85b8 100644 --- a/flow/src/org/labkey/flow/controllers/executescript/ChooseRunsRegion.java +++ b/flow/src/org/labkey/flow/controllers/executescript/ChooseRunsRegion.java @@ -33,7 +33,6 @@ import org.labkey.flow.data.FlowWell; import java.io.File; -import java.io.IOException; import java.util.List; import static org.labkey.api.util.DOM.Attribute.colspan; diff --git a/flow/src/org/labkey/flow/controllers/executescript/SamplesConfirmGridView.java b/flow/src/org/labkey/flow/controllers/executescript/SamplesConfirmGridView.java index 075a54bac1..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) @@ -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,7 +504,7 @@ protected String getSelectInputDisplayValue(NamedObject entry) } @Override - public void renderGridCellContents(RenderContext ctx, Writer out) throws IOException + public void renderGridCellContents(RenderContext ctx, HtmlWriter out) { super.renderGridCellContents(ctx, out); @@ -515,7 +515,8 @@ public void renderGridCellContents(RenderContext ctx, Writer out) throws IOExcep String sampleId = ctx.get(SAMPLE_ID_FIELD_KEY, String.class); for (FlowFCSFile candidate : candidates) { - out.write("\n"); + out.write(new InputBuilder<>().type("hidden").name("selectedSamples.rows[" + sampleId + "].candidateFile").value(candidate.getRowId())); + out.write("\n"); } } } 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..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 out) + public void renderGridCellContents(RenderContext ctx, HtmlWriter out) { - renderGraph(ctx, HtmlWriter.of(out)); + renderGraph(ctx, out); } 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/LuminexUploadWizardAction.java b/luminex/src/org/labkey/luminex/LuminexUploadWizardAction.java index f5435ee0d2..7468acdd7a 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,21 +571,30 @@ 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 - public void renderDetailsCaptionCell(RenderContext ctx, Writer out, @Nullable String cls) throws IOException + public void renderDetailsCaptionCell(RenderContext ctx, HtmlWriter out, @Nullable String cls) { - out.write(""); + Writer oldWriter = out.unwrap(); - renderTitle(ctx, out); - String sb = "Type: " + getBoundColumn().getFriendlyTypeName() + "\n"; - PageFlowUtil.popupHelp(HtmlString.of(sb), displayName).appendTo(out); + try + { + oldWriter.write(""); - out.write(""); + oldWriter.write(getTitle(ctx).toString()); + String sb = "Type: " + getBoundColumn().getFriendlyTypeName() + "\n"; + PageFlowUtil.popupHelp(HtmlString.of(sb), displayName).appendTo(oldWriter); + + oldWriter.write(""); + } + catch (IOException e) + { + throw new RuntimeException(e); + } } }; } diff --git a/luminex/src/org/labkey/luminex/query/AnalytePropStandardsDisplayColumn.java b/luminex/src/org/labkey/luminex/query/AnalytePropStandardsDisplayColumn.java index 9bff06b831..b0e61d811c 100644 --- a/luminex/src/org/labkey/luminex/query/AnalytePropStandardsDisplayColumn.java +++ b/luminex/src/org/labkey/luminex/query/AnalytePropStandardsDisplayColumn.java @@ -21,7 +21,10 @@ import org.labkey.api.data.SQLFragment; import org.labkey.api.data.SimpleDisplayColumn; 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; import org.labkey.luminex.model.Analyte; @@ -32,6 +35,10 @@ import java.util.Map; import java.util.Set; +import static org.labkey.api.util.DOM.Attribute.name; +import static org.labkey.api.util.DOM.Attribute.style; +import static org.labkey.api.util.DOM.at; + public class AnalytePropStandardsDisplayColumn extends SimpleDisplayColumn { private final LuminexRunUploadForm _form; @@ -55,7 +62,7 @@ public AnalytePropStandardsDisplayColumn(LuminexRunUploadForm form, Titration ti } @Override - public void renderInputHtml(RenderContext ctx, Writer 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)); @@ -85,50 +92,56 @@ public void renderInputHtml(RenderContext ctx, Writer out, Object value) throws 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; } } - out.write(""); + out.write(new InputBuilder<>().type("checkbox").value(1).name(propertyName).checked(checked)); } @Override - public void renderInputWrapperBegin(Writer out) throws IOException + public DOM._Attributes getInputAttributes() { String titrationCellName = LuminexUploadWizardAction.getTitrationColumnCellName(_titration.getName()); - out.write(""); + return at(style, "display:" + (_hideCell ? "none" : "table-cell"), name, titrationCellName); } @Override - public void renderDetailsCaptionCell(RenderContext ctx, Writer out, @Nullable String cls) throws IOException + public void renderDetailsCaptionCell(RenderContext ctx, HtmlWriter out, @Nullable String cls) { String titrationCellName = PageFlowUtil.filter(LuminexUploadWizardAction.getTitrationColumnCellName(_titration.getName())); - out.write(""); - renderTitle(ctx, out); - out.write(""); + Writer oldWriter = out.unwrap(); + try + { + oldWriter.write(""); + oldWriter.write(getTitle(ctx).toString()); + oldWriter.write(""); + } + catch (IOException e) + { + throw new RuntimeException(e); + } } @Override 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 56a165b82e..cc07e919ab 100644 --- a/luminex/src/org/labkey/luminex/query/ExclusionUIDisplayColumn.java +++ b/luminex/src/org/labkey/luminex/query/ExclusionUIDisplayColumn.java @@ -26,8 +26,9 @@ 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; import java.io.IOException; import java.io.Writer; @@ -82,13 +83,13 @@ 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 - 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 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 4992046ea4..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; @@ -64,10 +65,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 +122,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 @@ -153,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/NegativeBeadDisplayColumnFactory.java b/luminex/src/org/labkey/luminex/query/NegativeBeadDisplayColumnFactory.java index 69ab607c0e..d3815e0e5b 100644 --- a/luminex/src/org/labkey/luminex/query/NegativeBeadDisplayColumnFactory.java +++ b/luminex/src/org/labkey/luminex/query/NegativeBeadDisplayColumnFactory.java @@ -16,21 +16,27 @@ 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; 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; import java.io.IOException; 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; @@ -58,39 +64,49 @@ public String getFormFieldName(RenderContext ctx) } @Override - public void renderTitle(RenderContext ctx, Writer out) throws IOException + public @NotNull HtmlString getTitle(RenderContext ctx) { - out.write("\n"); + String script = """ + LABKEY.requiresExt4Sandbox(function() { + LABKEY.requiresScript('luminex/NegativeBeadPopulation.js'); + }); + """; - out.write(PageFlowUtil.filter(_displayName)); + return HtmlStringBuilder.of() + .append(DOM.createHtml(SCRIPT(JavaScriptFragment.unsafe(script)))) + .append(_displayName).getHtmlString(); } @Override - public void renderDetailsCaptionCell(RenderContext ctx, Writer out, @Nullable String cls) throws IOException + public void renderDetailsCaptionCell(RenderContext ctx, HtmlWriter out, @Nullable String cls) { - out.write(""); + Writer oldWriter = out.unwrap(); + try + { + oldWriter.write(""); - renderTitle(ctx, out); - StringBuilder sb = new StringBuilder(); - sb.append("The analyte to use in the FI-Bkgd-Neg transform script calculation. Available options are " + - "those selected as Negative Control analytes.\n\n"); - sb.append("Type: ").append(getBoundColumn().getFriendlyTypeName()).append("\n"); - PageFlowUtil.popupHelp(HtmlString.of(sb), _displayName).appendTo(out); + oldWriter.write(getTitle(ctx).toString()); + StringBuilder sb = new StringBuilder(); + sb.append("The analyte to use in the FI-Bkgd-Neg transform script calculation. Available options are " + + "those selected as Negative Control analytes.\n\n"); + sb.append("Type: ").append(getBoundColumn().getFriendlyTypeName()).append("\n"); + PageFlowUtil.popupHelp(HtmlString.of(sb), _displayName).appendTo(oldWriter); - out.write(""); + oldWriter.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(""); } }; } diff --git a/luminex/src/org/labkey/luminex/query/NegativeBeadDisplayColumnGroup.java b/luminex/src/org/labkey/luminex/query/NegativeBeadDisplayColumnGroup.java index 494d13ecf4..0055351476 100644 --- a/luminex/src/org/labkey/luminex/query/NegativeBeadDisplayColumnGroup.java +++ b/luminex/src/org/labkey/luminex/query/NegativeBeadDisplayColumnGroup.java @@ -19,13 +19,16 @@ import org.labkey.api.data.DisplayColumn; import org.labkey.api.data.DisplayColumnGroup; import org.labkey.api.data.RenderContext; +import org.labkey.api.util.DOM; +import org.labkey.api.util.element.Input; import org.labkey.api.view.HttpView; +import org.labkey.api.writer.HtmlWriter; import org.labkey.luminex.LuminexDataHandler; -import java.io.IOException; -import java.io.Writer; import java.util.List; +import static org.labkey.api.util.DOM.TD; + public class NegativeBeadDisplayColumnGroup extends DisplayColumnGroup { private final String _inputName; @@ -37,33 +40,35 @@ public NegativeBeadDisplayColumnGroup(List columns, String inputN } @Override - public void writeSameCheckboxCell(RenderContext ctx, Writer out) throws IOException + public void writeSameCheckboxCell(RenderContext ctx, HtmlWriter out) { - out.write(""); - if (isCopyable()) - { - String inputName = ColumnInfo.propNameFromName(_inputName); - String id = inputName + "CheckBox"; - out.write(""); - StringBuilder onChange = new StringBuilder("b = this.checked;\n"); - for (int i = 1; i < getColumns().size(); i++) - { - DisplayColumn col = getColumns().get(i); - if (col.getColumnInfo() != null) - { - onChange.append("s = document.getElementsByName('") - .append(col.getFormFieldName(ctx)) - .append("')[0].options.length;\n") - .append("document.getElementsByName('") - .append(col.getFormFieldName(ctx)) - .append("')[0].style.display = b || s == 0 ? 'none' : 'block';\n"); - } - } - onChange.append(" if (b) { ") - .append(inputName) - .append("Updated(); }"); - HttpView.currentPageConfig().addHandler(id, "change", onChange.toString()); - } - out.write(""); + TD( + isCopyable() ? (DOM.Renderable) ret -> { + String inputName = ColumnInfo.propNameFromName(_inputName); + String id = inputName + "CheckBox"; + new Input.InputBuilder<>().type("checkbox").name(id).id(id).appendTo(out); + StringBuilder onChange = new StringBuilder("b = this.checked;\n"); + + getColumns().forEach(col -> { + if (col.getColumnInfo() != null) + { + onChange.append("s = document.getElementsByName('") + .append(col.getFormFieldName(ctx)) + .append("')[0].options.length;\n") + .append("document.getElementsByName('") + .append(col.getFormFieldName(ctx)) + .append("')[0].style.display = b || s == 0 ? 'none' : 'block';\n"); + } + }); + + onChange.append(" if (b) { ") + .append(inputName) + .append("Updated(); }"); + HttpView.currentPageConfig().addHandler(id, "change", onChange.toString()); + + return ret; + } : + null + ).appendTo(out); } } 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/DeltaScanColumn.java b/ms2/src/org/labkey/ms2/DeltaScanColumn.java index 3b9fc11a0b..e388f9561a 100644 --- a/ms2/src/org/labkey/ms2/DeltaScanColumn.java +++ b/ms2/src/org/labkey/ms2/DeltaScanColumn.java @@ -108,7 +108,7 @@ public Object getValue(RenderContext ctx) @Override - public Class getValueClass() + public Class getValueClass() { return Double.class; } diff --git a/ms2/src/org/labkey/ms2/GroupNumberDisplayColumn.java b/ms2/src/org/labkey/ms2/GroupNumberDisplayColumn.java index 4953c5e190..46e82974df 100644 --- a/ms2/src/org/labkey/ms2/GroupNumberDisplayColumn.java +++ b/ms2/src/org/labkey/ms2/GroupNumberDisplayColumn.java @@ -65,7 +65,7 @@ public Object getDisplayValue(RenderContext ctx) } @Override - public Class getDisplayValueClass() + public Class getDisplayValueClass() { return String.class; } diff --git a/ms2/src/org/labkey/ms2/HydrophobicityColumn.java b/ms2/src/org/labkey/ms2/HydrophobicityColumn.java index c7126f2bf6..5260cf0996 100644 --- a/ms2/src/org/labkey/ms2/HydrophobicityColumn.java +++ b/ms2/src/org/labkey/ms2/HydrophobicityColumn.java @@ -58,7 +58,7 @@ public Object getValue(RenderContext ctx) } @Override - public Class getValueClass() + public Class getValueClass() { return Double.class; } diff --git a/ms2/src/org/labkey/ms2/MS2Controller.java b/ms2/src/org/labkey/ms2/MS2Controller.java index 1e8004272f..9355e0a865 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; @@ -194,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; @@ -1234,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"); @@ -1340,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 @@ -1886,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()); @@ -1919,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"); } @@ -1962,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 @@ -1984,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); @@ -2170,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 @@ -2281,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(); @@ -2351,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); @@ -2543,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); } @@ -2976,7 +2975,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); @@ -3563,7 +3562,7 @@ private ProteinsView(ActionURL currentURL, MS2Run run, DetailsForm form, List sequenceView; bean.run = run; if (showPeptides && !form.isSimpleSequenceView()) { @@ -3948,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); @@ -4010,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) { @@ -4813,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/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/compare/CompareDataRegion.java b/ms2/src/org/labkey/ms2/compare/CompareDataRegion.java index 096a4d932d..344bc35564 100644 --- a/ms2/src/org/labkey/ms2/compare/CompareDataRegion.java +++ b/ms2/src/org/labkey/ms2/compare/CompareDataRegion.java @@ -26,7 +26,6 @@ import org.labkey.api.writer.HtmlWriter; import org.labkey.ms2.MS2Manager; -import java.io.IOException; import java.sql.ResultSet; import java.sql.SQLException; import java.util.List; @@ -44,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); } @@ -86,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); @@ -104,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/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/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; - } -} diff --git a/ms2/src/org/labkey/ms2/query/PeptideAggregrationDisplayColumn.java b/ms2/src/org/labkey/ms2/query/PeptideAggregrationDisplayColumn.java index 0243298c46..c2c49c702b 100644 --- a/ms2/src/org/labkey/ms2/query/PeptideAggregrationDisplayColumn.java +++ b/ms2/src/org/labkey/ms2/query/PeptideAggregrationDisplayColumn.java @@ -28,14 +28,10 @@ import java.util.Objects; import java.util.Set; -/** - * User: jeckels - * Date: Apr 9, 2007 - */ public abstract class PeptideAggregrationDisplayColumn extends SimpleDisplayColumn { - private ColumnInfo _groupingColumn; - private ColumnInfo _peptideColumn; + private final ColumnInfo _groupingColumn; + private final ColumnInfo _peptideColumn; private static final Logger LOG = LogManager.getLogger(PeptideAggregrationDisplayColumn.class); private boolean _loggedError = false; @@ -147,19 +143,6 @@ private void logError(String message) protected abstract Object calculateValue(RenderContext ctx, List peptides) throws SQLException; - - @Override - public boolean isFilterable() - { - return false; - } - - @Override - public boolean isSortable() - { - return false; - } - @Override public void addQueryColumns(Set set) { @@ -175,5 +158,5 @@ public void addQueryColumns(Set set) } @Override - public abstract Class getValueClass(); + public abstract Class getValueClass(); } diff --git a/ms2/src/org/labkey/ms2/query/PeptideCountCoverageColumn.java b/ms2/src/org/labkey/ms2/query/PeptideCountCoverageColumn.java index 5a80520bb8..95fd42389d 100644 --- a/ms2/src/org/labkey/ms2/query/PeptideCountCoverageColumn.java +++ b/ms2/src/org/labkey/ms2/query/PeptideCountCoverageColumn.java @@ -21,10 +21,6 @@ import java.util.List; -/** - * User: jeckels - * Date: Apr 9, 2007 - */ public class PeptideCountCoverageColumn extends PeptideAggregrationDisplayColumn { public PeptideCountCoverageColumn(ColumnInfo colInfo, ColumnInfo peptideColumn, String caption) @@ -33,7 +29,7 @@ public PeptideCountCoverageColumn(ColumnInfo colInfo, ColumnInfo peptideColumn, } @Override - public Class getValueClass() + public Class getValueClass() { return Integer.class; } diff --git a/ms2/src/org/labkey/ms2/query/QueryAACoverageColumn.java b/ms2/src/org/labkey/ms2/query/QueryAACoverageColumn.java index 64cff55d29..3617230524 100644 --- a/ms2/src/org/labkey/ms2/query/QueryAACoverageColumn.java +++ b/ms2/src/org/labkey/ms2/query/QueryAACoverageColumn.java @@ -56,7 +56,7 @@ public ColumnInfo getColumnInfo() } @Override - public Class getValueClass() + public Class getValueClass() { return Double.class; } diff --git a/ms2/src/org/labkey/ms2/query/UniquePeptideCountCoverageColumn.java b/ms2/src/org/labkey/ms2/query/UniquePeptideCountCoverageColumn.java index ecd5252fee..e8c742cf45 100644 --- a/ms2/src/org/labkey/ms2/query/UniquePeptideCountCoverageColumn.java +++ b/ms2/src/org/labkey/ms2/query/UniquePeptideCountCoverageColumn.java @@ -19,14 +19,9 @@ import org.labkey.api.data.ColumnInfo; import org.labkey.api.data.RenderContext; -import java.util.List; import java.util.HashSet; -import java.sql.SQLException; +import java.util.List; -/** - * User: jeckels - * Date: Apr 9, 2007 - */ public class UniquePeptideCountCoverageColumn extends PeptideAggregrationDisplayColumn { public UniquePeptideCountCoverageColumn(ColumnInfo colInfo, ColumnInfo peptideColumn, String caption) @@ -41,7 +36,7 @@ protected Object calculateValue(RenderContext ctx, List peptides) } @Override - public Class getValueClass() + public Class getValueClass() { return Integer.class; } 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); } } 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