Skip to content
15 changes: 4 additions & 11 deletions src/org/labkey/targetedms/TargetedMSController.java
Original file line number Diff line number Diff line change
Expand Up @@ -319,7 +319,6 @@
import static org.labkey.api.util.DOM.TD;
import static org.labkey.api.util.DOM.TR;
import static org.labkey.api.util.DOM.UL;
import static org.labkey.api.util.DOM.X.FORM;
import static org.labkey.api.util.DOM.at;
import static org.labkey.api.util.DOM.cl;
import static org.labkey.targetedms.TargetedMSModule.EXPERIMENT_FOLDER_WEB_PARTS;
Expand Down Expand Up @@ -491,7 +490,7 @@ else if (FolderType.QC.toString().equals(folderSetupForm.getFolderType()))
addDataPipelineTab(c);
addRawFilesPipelineTab(c);

// Inform listeners so that any additinal folder configuration can be done.
// Inform listeners so that any additional folder configuration can be done.
TargetedMSService.get().getTargetedMSFolderTypeListeners().forEach(listener -> listener.folderCreated(c, getUser()));

return true;
Expand All @@ -511,7 +510,6 @@ public URLHelper getSuccessURL(FolderSetupForm folderSetupForm)
{
return getContainer().getStartURL(getUser());
}

}

public static void addDashboardTab(String tab, Container c, String... includeWebParts)
Expand All @@ -530,9 +528,8 @@ public static void addDashboardTab(String tab, Container c, String... includeWeb
}
}

private static class ChromatogramCrawlerForm
public static class ChromatogramCrawlerForm
{

}

@RequiresPermission(ApplicationAdminPermission.class)
Expand All @@ -547,8 +544,8 @@ public void validateCommand(ChromatogramCrawlerForm target, Errors errors)
public ModelAndView getView(ChromatogramCrawlerForm form, boolean reshow, BindException errors)
{
return new HtmlView("Chromatogram Crawler", DIV("Crawl all containers under the parent " + getContainer().getPath(),
FORM(at(method, "POST"),
new Button.ButtonBuilder("Start Crawl").submit(true).build())));
DOM.LK.FORM(at(method, "POST"),
new Button.ButtonBuilder("Start Crawl").submit(true).build())));
}

@Override
Expand Down Expand Up @@ -4327,8 +4324,6 @@ public void addNavTrail(NavTree root, TargetedMSRun run)
@RequiresPermission(ReadPermission.class)
public abstract class ShowRunSplitDetailsAction<VIEWTYPE extends DocumentView> extends AbstractShowRunDetailsAction<RunDetailsForm, VIEWTYPE>
{
protected String _dataRegion;

public ShowRunSplitDetailsAction()
{
super(RunDetailsForm.class);
Expand All @@ -4346,15 +4341,13 @@ public ModelAndView getHtmlView(final RunDetailsForm form, BindException errors)
if(_run.getPeptideCount() > 0)
{
view = createInitializedQueryView(form, errors, false, getDataRegionNamePeptide());
_dataRegion = view.getDataRegionName();
vBox.addView(view);
}

// for small molecule version of the Precursor List query view
if(_run.getSmallMoleculeCount() > 0)
{
view = createInitializedQueryView(form, errors, false, getDataRegionNameSmallMolecule());
_dataRegion = view.getDataRegionName();
vBox.addView(view);
}

Expand Down
1 change: 0 additions & 1 deletion src/org/labkey/targetedms/TargetedMSModule.java
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,6 @@
import org.labkey.api.view.NavTree;
import org.labkey.api.view.Portal;
import org.labkey.api.view.ViewContext;
import org.labkey.api.view.WebPartConfigurationException;
import org.labkey.api.view.WebPartFactory;
import org.labkey.api.view.WebPartView;
import org.labkey.api.view.template.ClientDependency;
Expand Down
135 changes: 80 additions & 55 deletions src/org/labkey/targetedms/view/ChromatogramsDataRegion.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@

package org.labkey.targetedms.view;

import org.apache.commons.lang3.mutable.MutableBoolean;
import org.apache.commons.lang3.mutable.MutableInt;
import org.json.JSONArray;
import org.json.JSONObject;
import org.labkey.api.collections.ResultSetRowMapFactory;
Expand All @@ -25,18 +27,20 @@
import org.labkey.api.data.MenuButton;
import org.labkey.api.data.RenderContext;
import org.labkey.api.data.Results;
import org.labkey.api.data.RuntimeSQLException;
import org.labkey.api.data.UpdateColumn;
import org.labkey.api.query.FilteredTable;
import org.labkey.api.util.DOM;
import org.labkey.api.util.JavaScriptFragment;
import org.labkey.api.util.PageFlowUtil;
import org.labkey.api.util.StringUtilsLabKey;
import org.labkey.api.util.URLHelper;
import org.labkey.api.view.HttpView;
import org.labkey.api.view.NavTree;
import org.labkey.api.view.ViewContext;
import org.labkey.api.view.template.PageConfig;
import org.labkey.api.writer.HtmlWriter;
import org.labkey.targetedms.query.ChromatogramGridQuerySettings;

import java.io.IOException;
import java.io.Writer;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
Expand All @@ -45,6 +49,12 @@
import java.util.LinkedList;
import java.util.List;

import static org.labkey.api.util.DOM.Attribute.style;
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;

/**
* User: vsharma
* Date: 4/28/12
Expand Down Expand Up @@ -114,46 +124,46 @@ private MenuButton createSplitGraphButton()
}

@Override
protected void renderTable(RenderContext ctx, Writer out) throws SQLException, IOException
protected void renderTable(RenderContext ctx, HtmlWriter out) throws SQLException
{
super.renderTable(ctx, out);

out.write("\n<script type=\"text/javascript\" nonce=\"");
out.write(PageFlowUtil.filter(PageConfig.getScriptNonceHeader(ctx.getRequest())));
out.write("\">");
out.write("LABKEY.DataRegions[" + PageFlowUtil.jsString(getName()) + "].refreshPlots = function() {\n");
out.write(" const svgInfos = " + _svgs.toString() + ";\n");
out.write(" for (let i = 0; i < svgInfos.length; i++) {\n");
out.write(" let svgInfo = svgInfos[i];\n");
out.write(" LABKEY.targetedms.SVGChart.requestAndRenderSVG(svgInfo.url, document.getElementById(svgInfo.mainId), ");
out.write(_legendElementId == null ? "null" : ("document.getElementById(" + PageFlowUtil.jsString(_legendElementId) + ")"));
out.write(", document.getElementById(svgInfo.labelId));\n");
out.write(" }\n");
out.write("};\n");
out.write("LABKEY.DataRegions[" + PageFlowUtil.jsString(getName()) + "].refreshPlots();\n");
StringBuilder script = new StringBuilder("\n")
.append(HttpView.currentPageConfig().getScriptTagStart())
.append("LABKEY.DataRegions[").append(PageFlowUtil.jsString(getName())).append("].refreshPlots = function() {\n")
.append(" const svgInfos = ").append(_svgs.toString()).append(";\n")
.append(" for (let i = 0; i < svgInfos.length; i++) {\n")
.append(" let svgInfo = svgInfos[i];\n")
.append(" LABKEY.targetedms.SVGChart.requestAndRenderSVG(svgInfo.url, document.getElementById(svgInfo.mainId), ")
.append(_legendElementId == null ? "null" : ("document.getElementById(" + PageFlowUtil.jsString(_legendElementId) + ")"))
.append(", document.getElementById(svgInfo.labelId));\n")
.append(" }\n")
.append("};\n").append("LABKEY.DataRegions[").append(PageFlowUtil.jsString(getName())).append("].refreshPlots();\n");

for (String listeningDataRegionName : _listeningDataRegionNames)
{
out.write("LABKEY.DataRegions[");
out.write(PageFlowUtil.jsString(listeningDataRegionName));
out.write("].on('selectchange', LABKEY.DataRegions[" + PageFlowUtil.jsString(getName()) + "].refreshPlots);\n");
script.append("LABKEY.DataRegions[")
.append(PageFlowUtil.jsString(listeningDataRegionName))
.append("].on('selectchange', LABKEY.DataRegions[")
.append(PageFlowUtil.jsString(getName()))
.append("].refreshPlots);\n");
}

out.write("</script>\n");
out.write(JavaScriptFragment.unsafe(script.toString()));
out.writeElementEnd(DOM.Element.script);
}

@Override
protected void renderGridHeaderColumns(RenderContext ctx, Writer out, boolean showRecordSelectors, List<DisplayColumn> renderers)
protected void renderGridHeaderColumns(RenderContext ctx, HtmlWriter out, boolean showRecordSelectors, List<DisplayColumn> renderers)
{
// No need to render the headers for this specialized grid - they just take space
}

@Override
protected int renderTableContents(RenderContext ctx, Writer out, boolean showRecordSelectors, List<DisplayColumn> renderers) throws SQLException, IOException
protected int renderTableContents(RenderContext ctx, HtmlWriter out, boolean showRecordSelectors, List<DisplayColumn> renderers) throws SQLException
{
int rowIndex = 0;
MutableInt rowIndex = new MutableInt(0);
int maxRowSize = getSettings().getMaxRowSize();
int count = 0;

Results results = ctx.getResults();

Expand All @@ -162,43 +172,57 @@ protected int renderTableContents(RenderContext ctx, Writer out, boolean showRec
{
assert rs != null;
ResultSetRowMapFactory factory = ResultSetRowMapFactory.create(rs);
MutableBoolean hasRows = new MutableBoolean(rs.next());

while (rs.next())
// Render chromatograms in a grid with maximum width == maxRowSize
while (hasRows.getValue().booleanValue())
{
if (count == 0)
{
out.write("<tr");
String rowClass = getRowClass(ctx, rowIndex);
if (rowClass != null)
out.write(" class=\"" + rowClass + "\"");
out.write(">");
}
ctx.setRow(factory.getRowMap(rs));
renderTableRow(ctx, out, showRecordSelectors, renderers, rowIndex++);
count++;
if (count == maxRowSize)
{
out.write("</tr>\n");
count = 0;
}
MutableInt count = new MutableInt(0);
MutableBoolean firstRow = new MutableBoolean(true);

TR(
cl(getRowClass(ctx, rowIndex.intValue())),
(DOM.Renderable) ret -> {
do
{
if (hasRows.getValue().booleanValue())
{
try
{
ctx.setRow(factory.getRowMap(rs));
renderTableRow(ctx, out, showRecordSelectors, renderers, rowIndex.getAndIncrement());
hasRows.setValue(rs.next());
}
catch (SQLException e)
{
throw new RuntimeSQLException(e);
}
}
else
{
// We're out of ResultSet rows, so finish the row by adding empty TDs, one per renderer,
// just like renderTableRows() does. But no need to do this if it's just a single row.
if (firstRow.booleanValue())
{
for (int i = 0; i < renderers.size(); i++)
TD(at(style, "border:0;")).appendTo(out);
}
}
} while (count.incrementAndGet() < maxRowSize);

return ret;
}
).appendTo(out);

firstRow.setValue(false);
}
}

if (count != 0)
{
while(count < maxRowSize)
{
out.write("<td style=\"border:0;\"></td>");
count++;
}
out.write("</tr>\n");
}

return rowIndex;
return rowIndex.intValue();
}

@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)
{
DisplayColumn detailsColumn = getDetailsUpdateColumn(ctx, renderers, true);
DisplayColumn updateColumn = getDetailsUpdateColumn(ctx, renderers, false);
Expand All @@ -207,14 +231,15 @@ protected void renderTableRow(RenderContext ctx, Writer out, boolean showRecordS
renderActionColumn(ctx, out, rowIndex, showRecordSelectors, detailsColumn, updateColumn);

for (DisplayColumn renderer : renderers)
{
if (renderer.isVisible(ctx))
{
if (renderer instanceof DetailsColumn || renderer instanceof UpdateColumn)
continue;

renderer.renderGridDataCell(ctx, out);
}

}
}

@Override
Expand Down
9 changes: 0 additions & 9 deletions src/org/labkey/targetedms/view/passport/ProteinListView.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,22 +16,13 @@
import org.labkey.targetedms.passport.PassportController;
import org.springframework.validation.Errors;

import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

public class ProteinListView extends QueryView
{
public ProteinListView(UserSchema schema, QuerySettings settings, @Nullable Errors errors)
{
super(schema, settings, errors);
}

@Override
protected void renderView(Object model, HttpServletRequest request, HttpServletResponse response) throws Exception
{
super.renderView(model, request, response);
}

@Override
protected void populateButtonBar(DataView view, ButtonBar bar)
{
Expand Down
Loading