From 525d944c5835b1f37a815cb5de4364c0d951d1d9 Mon Sep 17 00:00:00 2001 From: Adam Rauch Date: Sat, 18 May 2019 08:33:41 -0700 Subject: [PATCH 1/3] Epic 5658: HTML filtering improvements JSP code should use out.print() instead of out.write() @Overrides --- ms1/src/org/labkey/ms1/view/FeatureDetailView.jsp | 6 +++--- ms2/src/org/labkey/ms2/compare/SpectraCountRReport.java | 5 +++++ 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/ms1/src/org/labkey/ms1/view/FeatureDetailView.jsp b/ms1/src/org/labkey/ms1/view/FeatureDetailView.jsp index 006802d737..8bb394bd57 100644 --- a/ms1/src/org/labkey/ms1/view/FeatureDetailView.jsp +++ b/ms1/src/org/labkey/ms1/view/FeatureDetailView.jsp @@ -193,14 +193,14 @@ String nextFeatureCaption = "Next Feature >>"; if (model.getPrevFeatureId() < 0) - out.write(PageFlowUtil.generateDisabledButton(prevFeatureCaption)); + out.print(PageFlowUtil.generateDisabledButton(prevFeatureCaption)); else out.print(button(prevFeatureCaption).href(model.getPrevFeatureUrl())); - out.write(" "); + out.print(" "); if (model.getNextFeatureId() < 0) - out.write(PageFlowUtil.generateDisabledButton(nextFeatureCaption)); + out.print(PageFlowUtil.generateDisabledButton(nextFeatureCaption)); else out.print(button(nextFeatureCaption).href(model.getNextFeatureUrl())); %> diff --git a/ms2/src/org/labkey/ms2/compare/SpectraCountRReport.java b/ms2/src/org/labkey/ms2/compare/SpectraCountRReport.java index c1d47646c0..5c16e84261 100644 --- a/ms2/src/org/labkey/ms2/compare/SpectraCountRReport.java +++ b/ms2/src/org/labkey/ms2/compare/SpectraCountRReport.java @@ -47,11 +47,13 @@ public enum Prop implements ReportDescriptor.ReportProperty } + @Override public Results generateResults(ViewContext context, boolean allowAsyncQuery) throws Exception { return getQueryView(context).getResults(); } + @Override public HttpView renderDataView(ViewContext context) throws Exception { SpectraCountQueryView view = getQueryView(context); @@ -101,11 +103,13 @@ private static String getRunList(ViewContext context) return context.getActionURL().getParameter(MS2Controller.PeptideFilteringFormElements.runList); } + @Override public String getType() { return TYPE; } + @Override public ActionURL getRunReportURL(ViewContext context) { if (hasValidParameters(context)) @@ -125,6 +129,7 @@ private boolean hasValidParameters(ViewContext context) return false; } + @Override public ActionURL getEditReportURL(ViewContext context) { // no editing from the manage page From 401dc3fa434b944b836ac532df1ea7ea4877589f Mon Sep 17 00:00:00 2001 From: Adam Rauch Date: Sat, 18 May 2019 11:15:14 -0700 Subject: [PATCH 2/3] Epic 5658: HTML filtering improvements @Overrides JSP code should use out.print() instead of out.write() --- .../flow/controllers/executescript/ChooseRunsView.java | 6 ++++++ flow/src/org/labkey/flow/view/FlowQueryView.java | 9 +++++++++ flow/src/org/labkey/flow/webparts/AnalysesWebPart.java | 1 + .../org/labkey/flow/webparts/AnalysisScriptsWebPart.java | 2 ++ 4 files changed, 18 insertions(+) diff --git a/flow/src/org/labkey/flow/controllers/executescript/ChooseRunsView.java b/flow/src/org/labkey/flow/controllers/executescript/ChooseRunsView.java index c515029c81..be8e738137 100644 --- a/flow/src/org/labkey/flow/controllers/executescript/ChooseRunsView.java +++ b/flow/src/org/labkey/flow/controllers/executescript/ChooseRunsView.java @@ -40,11 +40,13 @@ public ChooseRunsView(ChooseRunsToAnalyzeForm form) _form = form; } + @Override protected boolean canDelete() { return false; } + @Override protected DataRegion createDataRegion() { DataRegion rgn = new ChooseRunsRegion(_form); @@ -53,6 +55,7 @@ protected DataRegion createDataRegion() } + @Override public DataView createDataView() { DataView ret = super.createDataView(); @@ -68,6 +71,7 @@ public DataView createDataView() } + @Override protected void populateButtonBar(DataView view, ButtonBar bb) { view.getDataRegion().setShowRecordSelectors(true); @@ -75,12 +79,14 @@ protected void populateButtonBar(DataView view, ButtonBar bb) } + @Override protected boolean verboseErrors() { return false; } + @Override protected ActionURL urlFor(QueryAction action) { switch (action) diff --git a/flow/src/org/labkey/flow/view/FlowQueryView.java b/flow/src/org/labkey/flow/view/FlowQueryView.java index 4618e0c252..480928f3e4 100644 --- a/flow/src/org/labkey/flow/view/FlowQueryView.java +++ b/flow/src/org/labkey/flow/view/FlowQueryView.java @@ -121,11 +121,13 @@ protected void configureDataRegion(DataRegion rgn) rgn.setShowPaginationCount(false); } + @Override public User getUser() { return getViewContext().getUser(); } + @Override protected void renderView(Object model, HttpServletRequest request, HttpServletResponse response) throws Exception { if (!isPrintView()) @@ -164,6 +166,7 @@ protected void renderView(Object model, HttpServletRequest request, HttpServletR super.renderView(model, request, response); } + @Override public FlowQuerySettings getSettings() { return (FlowQuerySettings) super.getSettings(); @@ -202,6 +205,7 @@ protected boolean subtractBackground() return getSettings().getSubtractBackground(); } + @Override protected URLHelper urlChangeView() { URLHelper ret = super.urlChangeView(); @@ -209,11 +213,13 @@ protected URLHelper urlChangeView() return ret; } + @Override public FlowSchema getSchema() { return (FlowSchema) super.getSchema(); } + @Override protected void populateButtonBar(DataView view, ButtonBar bar) { if (showAnalysisFolderButton() && getSchema().getRun() == null /*&& getSchema().getScript() == null*/) @@ -329,6 +335,7 @@ else if (queryName.equals(FlowTableType.FCSFiles.toString()) || queryName.equals return panelButton; } + @Override public List getDisplayColumns() { if (_displayColumns != null) @@ -358,6 +365,7 @@ protected boolean hasGraphs() return __hasGraphs; } + @Override public NavTrailConfig getNavTrailConfig() { NavTrailConfig ntc = super.getNavTrailConfig(); @@ -391,6 +399,7 @@ else if (schema.getExperiment() != null) return ntc; } + @Override protected ColumnHeaderType getColumnHeaderType() { return ColumnHeaderType.FieldKey; diff --git a/flow/src/org/labkey/flow/webparts/AnalysesWebPart.java b/flow/src/org/labkey/flow/webparts/AnalysesWebPart.java index 831ea0cf52..3668780b11 100644 --- a/flow/src/org/labkey/flow/webparts/AnalysesWebPart.java +++ b/flow/src/org/labkey/flow/webparts/AnalysesWebPart.java @@ -52,6 +52,7 @@ public AnalysesWebPart(ViewContext context, Portal.WebPart wp) setButtonBarPosition(DataRegion.ButtonBarPosition.TOP); } + @Override protected void populateButtonBar(DataView view, ButtonBar bar) { super.populateButtonBar(view, bar); diff --git a/flow/src/org/labkey/flow/webparts/AnalysisScriptsWebPart.java b/flow/src/org/labkey/flow/webparts/AnalysisScriptsWebPart.java index ca1b42b5ba..68a5ad4a89 100644 --- a/flow/src/org/labkey/flow/webparts/AnalysisScriptsWebPart.java +++ b/flow/src/org/labkey/flow/webparts/AnalysisScriptsWebPart.java @@ -75,6 +75,7 @@ public AnalysisScriptsWebPart(ViewContext portalCtx, Portal.WebPart wp) setButtonBarPosition(DataRegion.ButtonBarPosition.TOP); } + @Override public List getDisplayColumns() { List ret = new ArrayList<>(); @@ -93,6 +94,7 @@ public List getDisplayColumns() return ret; } + @Override protected void populateButtonBar(DataView view, ButtonBar bar) { ActionButton btnNewScript = new ActionButton("Create Analysis Script", new ActionURL(ScriptController.NewProtocolAction.class, getContainer())); From bd519a39f14bf0f2ab4028cba76f30ac7b86e207 Mon Sep 17 00:00:00 2001 From: Adam Rauch Date: Sat, 18 May 2019 21:45:06 -0700 Subject: [PATCH 3/3] Move _HtmlString to a top-level, public HtmlString class. Introduce HasHtmlString and HtmlStringBuilder. Start using these new classes in helper methods and classes: generateHiddenFormField(), generateBackButton(), Button/ButtonBuilder, Link/LinkBuilder, HelpTopic Replace textLink() implementations with builder pattern. --- .../compensation/showCompensation.jsp | 48 +++++++++++-------- ms2/src/org/labkey/ms2/mascotConfig.jsp | 34 +++++++------ 2 files changed, 43 insertions(+), 39 deletions(-) diff --git a/flow/src/org/labkey/flow/controllers/compensation/showCompensation.jsp b/flow/src/org/labkey/flow/controllers/compensation/showCompensation.jsp index 435ce9a5c3..cee1b8ba5d 100644 --- a/flow/src/org/labkey/flow/controllers/compensation/showCompensation.jsp +++ b/flow/src/org/labkey/flow/controllers/compensation/showCompensation.jsp @@ -18,16 +18,17 @@ <%@ page import="org.labkey.api.announcements.DiscussionService" %> <%@ page import="org.labkey.api.jsp.JspLoader" %> <%@ page import="org.labkey.api.security.permissions.UpdatePermission" %> +<%@ page import="org.labkey.api.util.HtmlString" %> <%@ page import="org.labkey.api.view.ActionURL" %> <%@ page import="org.labkey.api.view.JspView" %> <%@ page import="org.labkey.flow.FlowPreference" %> <%@ page import="org.labkey.flow.analysis.model.CompensationMatrix" %> <%@ page import="org.labkey.flow.analysis.web.GraphSpec" %> <%@ page import="org.labkey.flow.controllers.FlowParam" %> -<%@ page import="org.labkey.flow.controllers.well.WellController" %> +<%@ page import="org.labkey.flow.controllers.well.WellController"%> <%@ page import="org.labkey.flow.data.FlowCompensationMatrix"%> <%@ page import="org.labkey.flow.data.FlowDataType"%> -<%@ page import="org.labkey.flow.data.FlowRun"%> +<%@ page import="org.labkey.flow.data.FlowRun" %> <%@ page import="org.labkey.flow.data.FlowWell" %> <%@ page import="org.labkey.flow.view.GraphDataRegion" %> <%@ page import="org.labkey.flow.view.SetCommentView" %> @@ -99,7 +100,7 @@ <% for (int iChannel = 0; iChannel < channelCount; iChannel++) { - _HtmlString className = getShadeRowClass(iChannel); + HtmlString className = getShadeRowClass(iChannel); %> <%=h(channelNames[iChannel])%> @@ -111,19 +112,22 @@ <%}%> +<% + final FlowRun run = flowComp.getRun(); - - <% final FlowRun run = flowComp.getRun(); if (run == null) { return; } + final List appWells = (List) run.getDatas(FlowDataType.CompensationControl); - final Map wellMap = new HashMap(); + final Map wellMap = new HashMap<>(); + for (FlowWell well : appWells) { wellMap.put(well.getName(), well); } + abstract class Callback { String title; @@ -138,22 +142,24 @@ final String graphSize = FlowPreference.graphSize.getValue(request); Callback[] callbacks = new Callback[] + { + new Callback("Uncompensated Graphs") + { + @Override + String render(int iChannel, int iChannelValue) { - new Callback("Uncompensated Graphs") - { - String render(int iChannel, int iChannelValue) - { - return compImg(wellMap.get(channelNames[iChannel] + "+"), channelNames[iChannelValue], graphSize); - } - }, - new Callback("Compensated Graphs") - { - String render(int iChannel, int iChannelValue) - { - return compImg(wellMap.get(channelNames[iChannel] + "+"), "<" + channelNames[iChannelValue] + ">", graphSize); - } - } - }; + return compImg(wellMap.get(channelNames[iChannel] + "+"), channelNames[iChannelValue], graphSize); + } + }, + new Callback("Compensated Graphs") + { + @Override + String render(int iChannel, int iChannelValue) + { + return compImg(wellMap.get(channelNames[iChannel] + "+"), "<" + channelNames[iChannelValue] + ">", graphSize); + } + } + }; %>
<% include(new JspView(JspLoader.createPage(GraphDataRegion.class, "setGraphSize.jsp")), out);%> diff --git a/ms2/src/org/labkey/ms2/mascotConfig.jsp b/ms2/src/org/labkey/ms2/mascotConfig.jsp index dea1bfd739..07496a9ad6 100644 --- a/ms2/src/org/labkey/ms2/mascotConfig.jsp +++ b/ms2/src/org/labkey/ms2/mascotConfig.jsp @@ -1,19 +1,19 @@ <% - /* - * Copyright (c) 2015-2017 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. - */ +/* + * Copyright (c) 2015-2017 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. + */ %> <%@ taglib prefix="labkey" uri="http://www.labkey.org/taglib" %> <%@ page import="org.labkey.api.admin.AdminUrls"%> @@ -22,14 +22,12 @@ <%@ page import="org.labkey.api.util.PageFlowUtil" %> <%@ page import="org.labkey.api.view.ActionURL" %> <%@ page import="org.labkey.api.view.HttpView" %> -<%@ page import="org.labkey.api.view.JspView" %> <%@ page import="org.labkey.ms2.MS2Controller" %> <%@ page import="org.labkey.ms2.pipeline.mascot.MascotConfig" %> <%@ page extends="org.labkey.api.jsp.JspBase" %> <%=formatMissedErrors("form")%> <% - MS2Controller.MascotSettingsForm bean = ((JspView)HttpView.currentView()).getModelBean(); Container container = HttpView.currentView().getViewContext().getContainer(); MascotConfig mascotConfig = MascotConfig.findMascotConfig(container); boolean inherited = !mascotConfig.getContainer().equals(container); @@ -65,7 +63,7 @@ - + <% if (inherited) { %>
Configure Mascot settings (<%=text(new HelpTopic("configMascot").getSimpleLinkHtml("more info..."))%>)Configure Mascot settings (<%=new HelpTopic("configMascot").getSimpleLinkHtml("more info...")%>)