Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,15 @@

package org.labkey.flow.controllers.executescript;

import org.apache.commons.lang3.mutable.MutableInt;
import org.labkey.api.data.DataRegion;
import org.labkey.api.data.DetailsColumn;
import org.labkey.api.data.DisplayColumn;
import org.labkey.api.data.RenderContext;
import org.labkey.api.data.UpdateColumn;
import org.labkey.api.util.PageFlowUtil;
import org.labkey.api.util.DOM.Renderable;
import org.labkey.api.util.HtmlString;
import org.labkey.api.writer.HtmlWriter;
import org.labkey.flow.analysis.model.CompensationMatrix;
import org.labkey.flow.data.FlowCompensationControl;
import org.labkey.flow.data.FlowExperiment;
Expand All @@ -31,10 +34,16 @@

import java.io.File;
import java.io.IOException;
import java.io.Writer;
import java.sql.SQLException;
import java.util.List;

import static org.labkey.api.util.DOM.Attribute.colspan;
import static org.labkey.api.util.DOM.Attribute.style;
import static org.labkey.api.util.DOM.Attribute.title;
import static org.labkey.api.util.DOM.TD;
import static org.labkey.api.util.DOM.TR;
import static org.labkey.api.util.DOM.at;
import static org.labkey.api.util.DOM.cl;

public class ChooseRunsRegion extends DataRegion
{
ChooseRunsToAnalyzeForm _form;
Expand All @@ -46,15 +55,15 @@ public ChooseRunsRegion(ChooseRunsToAnalyzeForm form)


@Override
protected void renderFormBegin(RenderContext ctx, Writer out, int mode) throws IOException
protected void renderFormBegin(RenderContext ctx, HtmlWriter out, int mode)
{
renderHiddenFormFields(ctx, out, mode);
}

@Override
protected String getNoRowsMessage()
protected HtmlString getNoRowsMessage()
{
return "No runs available. Please import some FCS files or import a FlowJo workspace associated with FCS files.";
return HtmlString.of("No runs available. Please import some FCS files or import a FlowJo workspace associated with FCS files.");
}

@Override
Expand All @@ -66,53 +75,54 @@ protected boolean isRecordSelectorEnabled(RenderContext ctx)
// Allows subclasses to do pre-row and post-row processing
// CONSIDER: Separate as renderTableRow and renderTableRowContents?
@Override
protected void renderTableRow(RenderContext ctx, Writer out, boolean showRecordSelectors, List<DisplayColumn> renderers, int rowIndex) throws IOException
protected void renderTableRow(RenderContext ctx, HtmlWriter out, boolean showRecordSelectors, List<DisplayColumn> renderers, int rowIndex)
{
out.write("<tr");
String disabledReason = getDisabledReason(ctx);
if (disabledReason != null)
{
out.write(" title=\"" + PageFlowUtil.filter(disabledReason) + "\"");
out.write(" class=\"disabledRow\"");
}
out.write(">");

DisplayColumn detailsColumn = getDetailsUpdateColumn(ctx, renderers, true);
DisplayColumn updateColumn = getDetailsUpdateColumn(ctx, renderers, false);
MutableInt visibleCount = new MutableInt(0);
MutableInt nameColumn = new MutableInt(0);

int visibleCount = 0;
if (showRecordSelectors || (detailsColumn != null || updateColumn != null))
{
visibleCount++;
renderActionColumn(ctx, out, rowIndex, showRecordSelectors, detailsColumn, updateColumn);
}

int nameColumn = 0;
for (int i = 0, renderersSize = renderers.size(); i < renderersSize; i++)
{
DisplayColumn renderer = renderers.get(i);
if (renderer.isVisible(ctx))
{
if (renderer instanceof DetailsColumn || renderer instanceof UpdateColumn)
continue;
TR(
disabledReason != null ? cl("disabledRow").at(title, disabledReason) : null,
(Renderable) ret -> {
if (showRecordSelectors || (detailsColumn != null || updateColumn != null))
{
visibleCount.increment();
renderActionColumn(ctx, out, rowIndex, showRecordSelectors, detailsColumn, updateColumn);
}

if (renderer.getColumnInfo() != null && "name".equalsIgnoreCase(renderer.getColumnInfo().getName()))
nameColumn = i+1;
visibleCount++;
renderer.renderGridDataCell(ctx, out);
for (int i = 0, renderersSize = renderers.size(); i < renderersSize; i++)
{
DisplayColumn renderer = renderers.get(i);
if (renderer.isVisible(ctx))
{
if (renderer instanceof DetailsColumn || renderer instanceof UpdateColumn)
continue;

if (renderer.getColumnInfo() != null && "name".equalsIgnoreCase(renderer.getColumnInfo().getName()))
nameColumn.setValue(i + 1);
visibleCount.increment();
renderer.renderGridDataCell(ctx, out);
}
}
return ret;
}
}

out.write("</tr>\n");
).appendTo(out);

if (disabledReason != null)
{
out.write("<tr class='disabledRow'>");
out.write("<td style='border-right:0;' colspan='" + nameColumn + "'>&nbsp;</td>");
out.write("<td style='font-size:smaller;' colspan='" + visibleCount + "'>");
out.write(PageFlowUtil.filter(disabledReason));
out.write("</td>");
out.write("</tr>");
TR(
cl("disabledRow"),
TD(
at(style, "border-right:0;", colspan, nameColumn.getValue()),
HtmlString.NBSP
),
TD(
at(style, "font-size:smaller;", colspan, visibleCount.getValue()),
disabledReason
)
).appendTo(out);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@
*/
package org.labkey.flow.controllers.executescript;

import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.jetbrains.annotations.NotNull;
import org.labkey.api.action.SpringActionController;
import org.labkey.api.collections.NamedObject;
Expand Down Expand Up @@ -46,7 +46,9 @@
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.view.GridView;
import org.labkey.api.writer.HtmlWriter;
import org.labkey.flow.analysis.model.ISampleInfo;
import org.labkey.flow.analysis.model.Workspace;
import org.labkey.flow.data.FlowFCSFile;
Expand Down Expand Up @@ -277,7 +279,7 @@ private static class SamplesConfirmDataRegion extends DataRegion
protected int matchedCount = 0;

@Override
public Map<String, String> prepareMessages(RenderContext ctx) throws IOException
public Map<String, String> prepareMessages(RenderContext ctx)
{
Map<String, String> messages = super.prepareMessages(ctx);

Expand All @@ -295,13 +297,13 @@ public Map<String, String> prepareMessages(RenderContext ctx) throws IOException
}

@Override
protected void renderFormBegin(RenderContext ctx, Writer out, int mode) throws IOException
protected void renderFormBegin(RenderContext ctx, HtmlWriter out, int mode)
{
renderHiddenFormFields(ctx, out, mode);
}

@Override
protected void renderFormEnd(RenderContext ctx, Writer out)
protected void renderFormEnd(RenderContext ctx, HtmlWriter out)
{
// No-op. Don't close the form.
}
Expand Down Expand Up @@ -329,12 +331,15 @@ protected boolean isRecordSelectorChecked(RenderContext ctx, String checkboxValu
}

@Override
protected void renderExtraRecordSelectorContent(RenderContext ctx, Writer out) throws IOException
protected void renderExtraRecordSelectorContent(RenderContext ctx, HtmlWriter out)
{
// Add a hidden input for spring form binding -- if this value is posed, the row was unchecked.
out.write("<input type=\"hidden\" name=\"");
out.write(SpringActionController.FIELD_MARKER + getRecordSelectorName(ctx));
out.write("\" value=\"0\">");
// Add a hidden input for spring form binding -- if this value is posted, the row was unchecked.
out.write(
new Input.InputBuilder()
.type("hidden")
.name(SpringActionController.FIELD_MARKER + getRecordSelectorName(ctx))
.value(0)
);
}

@Override
Expand Down
25 changes: 13 additions & 12 deletions flow/src/org/labkey/flow/view/GraphColumn.java
Original file line number Diff line number Diff line change
Expand Up @@ -27,17 +27,18 @@
import org.labkey.api.query.QuerySettings;
import org.labkey.api.settings.AppProps;
import org.labkey.api.util.DOM.Renderable;
import org.labkey.api.util.HtmlString;
import org.labkey.api.util.PageFlowUtil;
import org.labkey.api.util.Pair;
import org.labkey.api.view.ActionURL;
import org.labkey.api.view.HttpView;
import org.labkey.api.view.template.PageConfig;
import org.labkey.api.writer.HtmlWriter;
import org.labkey.flow.FlowPreference;
import org.labkey.flow.controllers.FlowParam;
import org.labkey.flow.controllers.well.WellController;
import org.labkey.flow.query.FlowQuerySettings;

import java.io.IOException;
import java.io.Writer;

import static org.labkey.api.util.DOM.Attribute.alt;
Expand All @@ -49,6 +50,7 @@
import static org.labkey.api.util.DOM.BR;
import static org.labkey.api.util.DOM.IMG;
import static org.labkey.api.util.DOM.SPAN;
import static org.labkey.api.util.DOM.WBR;
import static org.labkey.api.util.DOM.at;
import static org.labkey.api.util.DOM.cl;

Expand All @@ -73,7 +75,6 @@ public GraphColumn(ColumnInfo colinfo)
static public Pair<Integer, String> parseObjectIdGraph(@NotNull String objectIdGraph)
{
Integer objectId = null;
String graphSpec = null;

String[] parts = objectIdGraph.split(SEP, 2);
if (parts.length != 2)
Expand All @@ -91,7 +92,7 @@ static public Pair<Integer, String> parseObjectIdGraph(@NotNull String objectIdG
}
}

graphSpec = parts[1];
String graphSpec = parts[1];
if (graphSpec.isEmpty())
{
throw new IllegalArgumentException("error parsing graph spec: expected second part to be non-empty string: " + objectIdGraph);
Expand Down Expand Up @@ -124,24 +125,24 @@ protected FlowQuerySettings.ShowGraphs showGraphs(RenderContext ctx)
}

@Override
public void renderGridCellContents(RenderContext ctx, Writer out) throws IOException
public void renderGridCellContents(RenderContext ctx, Writer out)
{
renderGraph(ctx, out);
renderGraph(ctx, HtmlWriter.of(out));
}

public void renderGraph(RenderContext ctx, Writer out) throws IOException
public void renderGraph(RenderContext ctx, HtmlWriter out)
{
if (!ctx.containsKey(INCLUDE_UTIL_SCRIPT))
{
out.write(String.format("<script type='text/javascript' src='%1$s/Flow/util.js' nonce='%2$s' ></script>", AppProps.getInstance().getContextPath(), PageConfig.getScriptNonceHeader(ctx.getRequest())));
out.write(HtmlString.unsafe(String.format("<script type='text/javascript' src='%1$s/Flow/util.js' nonce='%2$s'></script>", AppProps.getInstance().getContextPath(), PageConfig.getScriptNonceHeader(ctx.getRequest()))));
ctx.put(INCLUDE_UTIL_SCRIPT, true);
}

Object boundValue = getColumnInfo().getValue(ctx);
if ((!(boundValue instanceof String)))
{
LOG.debug("error parsing graph spec: expected pair of values, but got '" + boundValue + "'");
out.write("&nbsp;");
LOG.debug("error parsing graph spec: expected pair of values, but got '{}'", boundValue);
out.write(HtmlString.NBSP);
return;
}

Expand All @@ -157,7 +158,7 @@ public void renderGraph(RenderContext ctx, Writer out) throws IOException
catch (IllegalArgumentException ex)
{
LOG.debug(ex.getMessage());
out.write("&nbsp;");
out.write(HtmlString.NBSP);
return;
}

Expand All @@ -176,13 +177,13 @@ public void renderGraph(RenderContext ctx, Writer out) throws IOException
)
).appendTo(out);
ensureErrorHandler();
out.write("<wbr>");
WBR().appendTo(out);
}
else if (showGraphs(ctx) == FlowQuerySettings.ShowGraphs.Thumbnail)
{
if (objectId == null)
{
out.write("&nbsp;");
out.write(HtmlString.NBSP);
}
else
{
Expand Down
44 changes: 24 additions & 20 deletions flow/src/org/labkey/flow/view/GraphDataRegion.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,20 +20,24 @@
import org.labkey.api.data.DataRegion;
import org.labkey.api.data.DisplayColumn;
import org.labkey.api.data.RenderContext;
import org.labkey.api.util.DOM.Renderable;
import org.labkey.api.util.HtmlString;
import org.labkey.api.writer.HtmlWriter;

import java.io.IOException;
import java.io.Writer;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;

import static org.labkey.api.util.DOM.Attribute.colspan;
import static org.labkey.api.util.DOM.TD;
import static org.labkey.api.util.DOM.TR;
import static org.labkey.api.util.DOM.at;
import static org.labkey.api.util.DOM.cl;

/**
* Render row of values and row of graphs for every row in the grid.
* Replaces GraphView.
*
* User: kevink
* Date: 7/20/11
*/
public class GraphDataRegion extends DataRegion
{
Expand Down Expand Up @@ -72,24 +76,24 @@ public void addQueryColumns(Set<ColumnInfo> columns)
}

@Override
protected void renderTableRow(RenderContext ctx, Writer out, boolean showRecordSelectors, List<DisplayColumn> renderers, int rowIndex) throws SQLException, IOException
protected void renderTableRow(RenderContext ctx, HtmlWriter out, boolean showRecordSelectors, List<DisplayColumn> renderers, int rowIndex) throws SQLException
{
super.renderTableRow(ctx, out, showRecordSelectors, renderers, rowIndex);

out.write("<tr");
String rowClass = getRowClass(ctx, rowIndex);
if (rowClass != null)
out.write(" class=\"" + rowClass + "\"");
out.write(">");
// skip one cell for the [details] column
out.write("<td>&nbsp;</td>");
out.write("<td colspan=\"" + (renderers.size()) + "\">");
TR(
cl(getRowClass(ctx, rowIndex)),

for (GraphColumn graphColumn : _graphColumns)
{
if (graphColumn.isVisible(ctx))
graphColumn.renderGraph(ctx, out);
}
out.write("</td></tr>\n");
// skip one cell for the [details] column
TD(HtmlString.NBSP),
TD(
at(colspan, renderers.size()),
(Renderable) ret -> {
_graphColumns.stream()
.filter(gc -> gc.isVisible(ctx))
.forEach(gc -> gc.renderGraph(ctx, out));
return ret;
}
)
).appendTo(out);
}
}
Loading