diff --git a/lincs/src/org/labkey/lincs/LincsController.java b/lincs/src/org/labkey/lincs/LincsController.java index 4918de43..19dc19ad 100644 --- a/lincs/src/org/labkey/lincs/LincsController.java +++ b/lincs/src/org/labkey/lincs/LincsController.java @@ -78,6 +78,7 @@ import org.labkey.api.view.ViewBackgroundInfo; import org.labkey.api.view.ViewContext; import org.labkey.api.view.WebPartView; +import org.labkey.api.writer.HtmlWriter; import org.labkey.lincs.cromwell.CromwellConfig; import org.labkey.lincs.cromwell.CromwellException; import org.labkey.lincs.psp.LincsPspException; @@ -95,7 +96,6 @@ import java.io.FilenameFilter; import java.io.IOException; import java.io.InputStream; -import java.io.Writer; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.StandardCopyOption; @@ -114,6 +114,7 @@ import static org.labkey.api.util.DOM.BR; import static org.labkey.api.util.DOM.DIV; +import static org.labkey.api.util.DOM.PRE; public class LincsController extends SpringActionController { @@ -161,11 +162,11 @@ public boolean accept(File dir, String name) // Copy both to the GCT folder for(File file: reportDirFiles) { - if(file.getName().toLowerCase().equals("lincs.gct")) + if(file.getName().equalsIgnoreCase("lincs.gct")) { Files.copy(file.toPath(), gct, StandardCopyOption.REPLACE_EXISTING); } - else if(file.getName().toLowerCase().equals("console.txt")) + else if(file.getName().equalsIgnoreCase("console.txt")) { Files.copy(file.toPath(), gctDir.resolve(outputFileBaseName + ".console.txt" ), StandardCopyOption.REPLACE_EXISTING); } @@ -1280,13 +1281,15 @@ private static DataRegion getPspJobDetailsDataRegion() SimpleDisplayColumn jsonCol = new SimpleDisplayColumn(){ @Override - public void renderDetailsCellContents(RenderContext ctx, Writer out) throws IOException + public void renderDetailsCellContents(RenderContext ctx, HtmlWriter out) { String json = ctx.get(FieldKey.fromParts("Json"), String.class); - if(!StringUtils.isBlank(json)) + if (!StringUtils.isBlank(json)) { JSONObject jsonObj = new JSONObject(json); - out.write("
" + PageFlowUtil.filter(jsonObj.toString(2)) + "
"); + PRE( + jsonObj.toString(2) + ).appendTo(out); } else { @@ -1379,7 +1382,7 @@ public ModelAndView getView(LincsPspJobForm form, BindException errors) DOM.P("Status for job: " + pspJob.getId() +", PSP job Id: " + pspJob.getPspJobId() + ", Run Id: " + pspJob.getRunId()), "JSON Output:", DOM.BR(), - DOM.P(DOM.PRE(jsonStatus))))); + DOM.P(PRE(jsonStatus))))); view.setTitle("PSP job status"); view.setFrame(WebPartView.FrameType.PORTAL); return view; diff --git a/lincs/src/org/labkey/lincs/LincsDataTable.java b/lincs/src/org/labkey/lincs/LincsDataTable.java index 2bb76c16..3d2e8a57 100644 --- a/lincs/src/org/labkey/lincs/LincsDataTable.java +++ b/lincs/src/org/labkey/lincs/LincsDataTable.java @@ -17,6 +17,7 @@ import org.apache.commons.lang3.StringUtils; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import org.labkey.api.analytics.AnalyticsService; import org.labkey.api.data.ColumnInfo; import org.labkey.api.data.DataColumn; @@ -33,10 +34,9 @@ import org.labkey.api.util.Link; import org.labkey.api.util.PageFlowUtil; import org.labkey.api.view.ActionURL; +import org.labkey.api.writer.HtmlWriter; import org.labkey.lincs.psp.LincsPspJob; -import java.io.IOException; -import java.io.Writer; import java.nio.file.Files; import java.nio.file.Path; import java.util.ArrayList; @@ -45,6 +45,10 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; +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; + /** * Created by vsharma on 8/21/2017. */ @@ -72,17 +76,21 @@ public LincsDataTable(@NotNull TableInfo table, @NotNull UserSchema userSchema) addColumn(level1Col); level1Col.setDisplayColumnFactory(colInfo -> new DataColumn(colInfo){ @Override - public void renderGridCellContents(RenderContext ctx, Writer out) throws IOException + public void renderGridCellContents(RenderContext ctx, HtmlWriter out) { ActionURL downloadUrl = new ActionURL("targetedms", "DownloadDocument", getContainer()); Integer runId = ctx.get(FieldKey.fromParts("Id"), Integer.class); downloadUrl.addParameter("id", runId); - out.write(""); - out.write(new Link.LinkBuilder("Download").iconCls("fa fa-download").href(downloadUrl).toString()); ActionURL docDetailsUrl = new ActionURL("targetedms", "ShowPrecursorList", getContainer()); docDetailsUrl.addParameter("id", runId); - out.write(" " + new Link.LinkBuilder("Skyline").href(docDetailsUrl).clearClasses().toString()); - out.write(""); + + // is recommended instead of deprecated + SPAN( + at(style, "white-space: nowrap;"), + new Link.LinkBuilder("Download").iconCls("fa fa-download").href(downloadUrl), + HtmlString.NBSP, + new Link.LinkBuilder("Skyline").href(docDetailsUrl).clearClasses() + ).appendTo(out); } @Override @@ -133,7 +141,7 @@ public boolean isFilterable() pspJobCol.setDisplayColumnFactory(colInfo -> new DataColumn(colInfo) { @Override - public void renderGridCellContents(RenderContext ctx, Writer out) throws IOException + public void renderGridCellContents(RenderContext ctx, HtmlWriter out) { Integer runId = ctx.get(FieldKey.fromParts("Id"), Integer.class); if(runId == null) @@ -150,7 +158,7 @@ public void renderGridCellContents(RenderContext ctx, Writer out) throws IOExcep ActionURL url = new ActionURL(LincsController.SubmitPspJobAction.class, getContainer()); url.addParameter("runId", runId); - out.write(new Link.LinkBuilder(" [Submit Job]").href(url).usePost().toString()); + out.write(new Link.LinkBuilder(" [Submit Job]").href(url).usePost()); } return; } @@ -168,7 +176,7 @@ public void renderGridCellContents(RenderContext ctx, Writer out) throws IOExcep } ActionURL url = new ActionURL(LincsController.LincsPspJobDetailsAction.class, getContainer()); url.addParameter("runId", pspJob.getRunId()); - out.write(PageFlowUtil.link(text).href(url).toString()); + out.write(PageFlowUtil.link(text).href(url)); } @Override @@ -290,7 +298,7 @@ private String getAnalyticsScript(String eventAction, String fileName, boolean a return null; } - private String externalHeatmapViewerLink(String fileName, LincsModule.LincsAssay assayType) + private HtmlString externalHeatmapViewerLink(String fileName, LincsModule.LincsAssay assayType) { String gctFileUrl = davUrl + "GCT/" + PageFlowUtil.encodePath(fileName); String morpheusUrl = getMorpheusUrl(gctFileUrl, assayType); @@ -299,7 +307,9 @@ private String externalHeatmapViewerLink(String fileName, LincsModule.LincsAssay String onclickEvt = StringUtils.isBlank(analyticsScript) ? "" : "onclick=\"" + analyticsScript + "\""; String imgUrl = AppProps.getInstance().getContextPath() + "/lincs/GENE-E_icon.png"; - return "[ View in Morpheus  ]"; + + // TODO: Should use a LinkBuilder, etc. + return HtmlString.unsafe("[ View in Morpheus  ]"); } private String getMorpheusUrl(String gctFileUrl, LincsModule.LincsAssay assayType) @@ -323,7 +333,7 @@ private String getMorpheusUrl(String gctFileUrl, LincsModule.LincsAssay assayTyp } @Override - public void renderGridCellContents(RenderContext ctx, Writer out) throws IOException + public void renderGridCellContents(RenderContext ctx, HtmlWriter out) { if(getAssayType() == null) { @@ -333,7 +343,7 @@ public void renderGridCellContents(RenderContext ctx, Writer out) throws IOExcep String fileName = ctx.get(getDisplayColumn().getFieldKey(), String.class); if(fileName == null) { - out.write(" "); + out.write(HtmlString.NBSP); return; } @@ -355,23 +365,25 @@ public void renderGridCellContents(RenderContext ctx, Writer out) throws IOExcep String actionName = (getLevel() == LincsModule.LincsLevel.Config) ? "DownloadConfig" : "DownloadGCT"; String analyticsScript = getAnalyticsScript(actionName, downloadFileName, true); - String morpheusUrl = externalHeatmapViewerLink(downloadFileName, getAssayType(), getLevel()); + HtmlString morpheusUrl = externalHeatmapViewerLink(downloadFileName, getAssayType(), getLevel()); String downloadText = (getLevel() == LincsModule.LincsLevel.Config) ? "CFG" : "GCT"; - renderGridCell(out, analyticsScript, getGctDavUrlUnencoded(downloadFileName), getGctDavUrl(downloadFileName), downloadText, morpheusUrl); + renderGridCell(out, analyticsScript, getGctDavUrlUnencoded(downloadFileName), downloadText, morpheusUrl); } - private void renderGridCell(Writer out, String analyticsScript, String downloadUrl, String downloadUrlEncoded, String downloadText, String morpheusUrl) throws IOException + private void renderGridCell(HtmlWriter out, String analyticsScript, String downloadUrl, String downloadText, HtmlString morpheusUrl) { - out.write(" "); - out.write(new Link.LinkBuilder("Download").iconCls("fa fa-download").href(downloadUrl).onClick(analyticsScript).toString()); - out.write(" "); - out.write(new Link.LinkBuilder(downloadText).href(downloadUrl).onClick(analyticsScript).clearClasses().toString()); - out.write(" "); - if(morpheusUrl != null) - { - out.write(" " + morpheusUrl + " "); - } - out.write(""); + // is recommended instead of deprecated + SPAN( + at(style, "white-space: nowrap;"), + HtmlString.NBSP, + new Link.LinkBuilder("Download").iconCls("fa fa-download").href(downloadUrl).onClick(analyticsScript), + HtmlString.NBSP, + new Link.LinkBuilder(downloadText).href(downloadUrl).onClick(analyticsScript).clearClasses(), + HtmlString.NBSP, + morpheusUrl != null ? HtmlString.NBSP : null, + morpheusUrl, + morpheusUrl != null ? HtmlString.NBSP : null + ).appendTo(out); } private boolean fileAvailable(Integer runId, String downloadFileName) @@ -396,7 +408,7 @@ private boolean fileAvailable(Integer runId, String downloadFileName) } } - String externalHeatmapViewerLink(String fileName, LincsModule.LincsAssay assayType, LincsModule.LincsLevel level) + @Nullable HtmlString externalHeatmapViewerLink(String fileName, LincsModule.LincsAssay assayType, LincsModule.LincsLevel level) { if(level == LincsModule.LincsLevel.Config) { diff --git a/lincs/src/org/labkey/lincs/LincsSchema.java b/lincs/src/org/labkey/lincs/LincsSchema.java index 971c20b1..338fd6c9 100644 --- a/lincs/src/org/labkey/lincs/LincsSchema.java +++ b/lincs/src/org/labkey/lincs/LincsSchema.java @@ -20,7 +20,6 @@ import org.jetbrains.annotations.Nullable; import org.json.JSONObject; import org.labkey.api.collections.CaseInsensitiveHashSet; -import org.labkey.api.data.ColumnInfo; import org.labkey.api.data.Container; import org.labkey.api.data.ContainerFilter; import org.labkey.api.data.ContainerForeignKey; @@ -28,7 +27,6 @@ import org.labkey.api.data.DbSchema; import org.labkey.api.data.DbSchemaType; import org.labkey.api.data.DisplayColumn; -import org.labkey.api.data.DisplayColumnFactory; import org.labkey.api.data.RenderContext; import org.labkey.api.data.TableInfo; import org.labkey.api.data.dialect.SqlDialect; @@ -48,13 +46,14 @@ import org.labkey.api.security.UserPrincipal; import org.labkey.api.security.permissions.Permission; 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.List; import java.util.Set; +import static org.labkey.api.util.DOM.PRE; + public class LincsSchema extends UserSchema { public static final String SCHEMA_NAME = "lincs"; @@ -102,20 +101,16 @@ public TableInfo createTable(String name, ContainerFilter cf) ContainerForeignKey.initColumn(containerCol, this); var jsonCol = result.getMutableColumn(FieldKey.fromParts("Json")); - jsonCol.setDisplayColumnFactory(new DisplayColumnFactory() - { + jsonCol.setDisplayColumnFactory(colInfo -> new DataColumn(colInfo){ @Override - public DisplayColumn createRenderer(ColumnInfo colInfo) + public void renderDetailsCellContents(RenderContext ctx, HtmlWriter out) { - return new DataColumn(colInfo){ - @Override - public void renderDetailsCellContents(RenderContext ctx, Writer out) throws IOException - { - String json = ctx.get(colInfo.getFieldKey(), String.class); - JSONObject jsonObj = new JSONObject(json); - out.write("
" + jsonObj.toString(2) + "
"); - } - }; + String json = ctx.get(colInfo.getFieldKey(), String.class); + JSONObject jsonObj = new JSONObject(json); + + PRE( + jsonObj.toString(2) + ).appendTo(out); } }); return result; diff --git a/panoramapublic/src/org/labkey/panoramapublic/query/CatalogEntryTableInfo.java b/panoramapublic/src/org/labkey/panoramapublic/query/CatalogEntryTableInfo.java index fd975bb2..df4e7037 100644 --- a/panoramapublic/src/org/labkey/panoramapublic/query/CatalogEntryTableInfo.java +++ b/panoramapublic/src/org/labkey/panoramapublic/query/CatalogEntryTableInfo.java @@ -13,6 +13,7 @@ import org.labkey.api.util.PageFlowUtil; import org.labkey.api.view.ActionURL; import org.labkey.api.view.ShortURLRecord; +import org.labkey.api.writer.HtmlWriter; import org.labkey.panoramapublic.PanoramaPublicController; import org.labkey.panoramapublic.PanoramaPublicManager; import org.labkey.panoramapublic.PanoramaPublicSchema; @@ -21,8 +22,6 @@ import org.labkey.panoramapublic.view.publish.CatalogEntryWebPart; import org.labkey.panoramapublic.view.publish.ShortUrlDisplayColumnFactory; -import java.io.IOException; -import java.io.Writer; import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -63,7 +62,7 @@ public Object getDisplayValue(RenderContext ctx) } @Override - public void renderGridCellContents(RenderContext ctx, Writer out) throws IOException + public void renderGridCellContents(RenderContext ctx, HtmlWriter out) { Object viewCatalogEntryUrl = getValue(ctx); if (viewCatalogEntryUrl instanceof ActionURL url) @@ -108,7 +107,7 @@ public Object getDisplayValue(RenderContext ctx) } @Override - public void renderGridCellContents(RenderContext ctx, Writer out) throws IOException + public void renderGridCellContents(RenderContext ctx, HtmlWriter out) { String fileName = (String) getValue(ctx); ShortURLRecord shortUrl = ctx.get(_shortUrlFieldKey, ShortURLRecord.class); @@ -116,10 +115,11 @@ public void renderGridCellContents(RenderContext ctx, Writer out) throws IOExcep if (fileName != null && expAnnotations != null) { ActionURL downloadLink = PanoramaPublicController.getCatalogImageDownloadUrl(expAnnotations, fileName); - SPAN(at(style, "white-space: nowrap;"), - fileName, - PageFlowUtil.iconLink("fa fa-download", null).href(downloadLink).style("margin-left:10px;").build()) - .appendTo(out); + SPAN( + at(style, "white-space: nowrap;"), + fileName, + PageFlowUtil.iconLink("fa fa-download", null).href(downloadLink).style("margin-left:10px;").build() + ).appendTo(out); return; } super.renderGridCellContents(ctx, out); @@ -157,7 +157,7 @@ public Object getDisplayValue(RenderContext ctx) reviewCol.setDisplayColumnFactory(colInfo -> new DataColumn(colInfo) { @Override - public void renderGridCellContents(RenderContext ctx, Writer out) + public void renderGridCellContents(RenderContext ctx, HtmlWriter out) { Integer catalogEntryId = ctx.get(getColumnInfo().getFieldKey(), Integer.class); if (catalogEntryId != null && ctx.getViewContext().getUser().hasSiteAdminPermission()) @@ -166,9 +166,9 @@ public void renderGridCellContents(RenderContext ctx, Writer out) ExperimentAnnotations expAnnotations = ExperimentAnnotationsManager.getExperimentForShortUrl(entry.getShortUrl()); if (expAnnotations != null) { - DIV(CatalogEntryWebPart.changeStatusButtonBuilder(entry.getApproved(), expAnnotations.getId(), catalogEntryId, expAnnotations.getContainer()) - .build()) - .appendTo(out); + DIV( + CatalogEntryWebPart.changeStatusButtonBuilder(entry.getApproved(), expAnnotations.getId(), catalogEntryId, expAnnotations.getContainer()) + ).appendTo(out); } } } diff --git a/panoramapublic/src/org/labkey/panoramapublic/query/ExperimentAnnotationsTableInfo.java b/panoramapublic/src/org/labkey/panoramapublic/query/ExperimentAnnotationsTableInfo.java index 4c4df823..38d66ffb 100644 --- a/panoramapublic/src/org/labkey/panoramapublic/query/ExperimentAnnotationsTableInfo.java +++ b/panoramapublic/src/org/labkey/panoramapublic/query/ExperimentAnnotationsTableInfo.java @@ -58,15 +58,18 @@ import org.labkey.api.settings.AppProps; import org.labkey.api.util.DOM; import org.labkey.api.util.HtmlString; +import org.labkey.api.util.JavaScriptFragment; import org.labkey.api.util.Link; import org.labkey.api.util.PageFlowUtil; import org.labkey.api.util.SimpleNamedObject; import org.labkey.api.util.StringExpressionFactory; import org.labkey.api.util.UniqueID; +import org.labkey.api.util.element.Input.InputBuilder; import org.labkey.api.view.ActionURL; import org.labkey.api.view.HttpView; import org.labkey.api.view.template.ClientDependency; import org.labkey.api.view.template.PageConfig; +import org.labkey.api.writer.HtmlWriter; import org.labkey.panoramapublic.PanoramaPublicController; import org.labkey.panoramapublic.PanoramaPublicManager; import org.labkey.panoramapublic.PanoramaPublicSchema; @@ -77,8 +80,6 @@ import org.labkey.panoramapublic.view.publish.CatalogEntryWebPart; import org.labkey.panoramapublic.view.publish.ShortUrlDisplayColumnFactory; -import java.io.IOException; -import java.io.Writer; import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -86,10 +87,12 @@ import static org.labkey.api.util.DOM.Attribute.height; import static org.labkey.api.util.DOM.Attribute.href; import static org.labkey.api.util.DOM.Attribute.src; +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.Attribute.width; import static org.labkey.api.util.DOM.DIV; import static org.labkey.api.util.DOM.IMG; +import static org.labkey.api.util.DOM.SCRIPT; import static org.labkey.api.util.DOM.at; /** @@ -132,8 +135,8 @@ public DisplayColumn createRenderer(ColumnInfo colInfo) { return new DataColumn(colInfo, true) { - private FieldKey _containerKey = new FieldKey(getColumnInfo().getFieldKey().getParent(), "container"); - private FieldKey _idKey = new FieldKey(getColumnInfo().getFieldKey().getParent(), "id"); + private final FieldKey _containerKey = new FieldKey(getColumnInfo().getFieldKey().getParent(), "container"); + private final FieldKey _idKey = new FieldKey(getColumnInfo().getFieldKey().getParent(), "id"); @Override public @NotNull Set getClientDependencies() @@ -146,22 +149,25 @@ public DisplayColumn createRenderer(ColumnInfo colInfo) } @Override - public void renderGridCellContents(RenderContext ctx, Writer out) throws IOException + public void renderGridCellContents(RenderContext ctx, HtmlWriter out) { Integer id = ctx.get(_idKey, Integer.class); Container container = ctx.get(_containerKey, Container.class); - if(id != null && container != null) + if (id != null && container != null) { ActionURL detailsPage = PageFlowUtil.urlProvider(ProjectUrls.class).getBeginURL(container); // experiment container PageConfig pageConfig = HttpView.currentPageConfig(); String spanId = pageConfig.makeId("expt_details_"); - DOM.SPAN(at(DOM.Attribute.id, spanId) - .data("active", "false") // will be rendered as "data-active" attribute - .data("loaded", "false"), // will be rendered as "data-loaded" attribute - IMG(at(DOM.Attribute.id, "expandcontract-" + id) - .at(src, PageFlowUtil.staticResourceUrl("_images/plus.gif"))), - HtmlString.NBSP) - .appendTo(out); + DOM.SPAN( + at(DOM.Attribute.id, spanId) + .data("active", "false") // will be rendered as "data-active" attribute + .data("loaded", "false"), // will be rendered as "data-loaded" attribute + IMG( + at(DOM.Attribute.id, "expandcontract-" + id) + .at(src, PageFlowUtil.staticResourceUrl("_images/plus.gif")) + ), + HtmlString.NBSP + ).appendTo(out); pageConfig.addHandler(spanId, "click", "viewExperimentDetails(this,'" + container.getPath() + "', '" + id + "','" + detailsPage + "')"); } super.renderGridCellContents(ctx, out); @@ -188,16 +194,16 @@ public void addQueryFieldKeys(Set keys) public @NotNull Set getClientDependencies() { return PageFlowUtil.set( - ClientDependency.fromPath("PanoramaPublic/css/ExperimentAnnotations.css"), - ClientDependency.fromPath("hopscotch/css/hopscotch.min.css"), - ClientDependency.fromPath("PanoramaPublic/js/ExperimentAnnotations.js"), - ClientDependency.fromPath("PanoramaPublic/js/clipboard.min.js"), - ClientDependency.fromPath("hopscotch/js/hopscotch.min.js") - ); + ClientDependency.fromPath("PanoramaPublic/css/ExperimentAnnotations.css"), + ClientDependency.fromPath("hopscotch/css/hopscotch.min.css"), + ClientDependency.fromPath("PanoramaPublic/js/ExperimentAnnotations.js"), + ClientDependency.fromPath("PanoramaPublic/js/clipboard.min.js"), + ClientDependency.fromPath("hopscotch/js/hopscotch.min.js") + ); } @Override - public void renderGridCellContents(RenderContext ctx, Writer out) throws IOException + public void renderGridCellContents(RenderContext ctx, HtmlWriter out) { // Get the ExperimentAnnotations record Integer experimentAnnotationsId = ctx.get(colInfo.getFieldKey(), Integer.class); @@ -205,18 +211,14 @@ public void renderGridCellContents(RenderContext ctx, Writer out) throws IOExcep String accessUrl = ExperimentAnnotationsManager.getExperimentShortUrl(expAnnotations); - if(accessUrl == null) - { - out.write(""); - } - else + if (accessUrl != null) { var link = new Link.LinkBuilder("Share") - .clearClasses().addClass("button-small button-small-green") - .style("margin:0px 5px 0px 2px;") - .onClick("showShareLink(this, " + PageFlowUtil.jsString(accessUrl) + ");return false;"); - DIV(link.build()).appendTo(out); + .clearClasses().addClass("button-small button-small-green") + .style("margin:0px 5px 0px 2px;") + .onClick("showShareLink(this, " + PageFlowUtil.jsString(accessUrl) + ");return false;"); + DIV(link).appendTo(out); } } }); @@ -286,12 +288,12 @@ public String renderURL(RenderContext ctx) return license != null ? license.getUrl() : null; } @Override - public Class getValueClass() + public Class getValueClass() { return String.class; } @Override - public Class getDisplayValueClass() + public Class getDisplayValueClass() { return String.class; } @@ -314,7 +316,7 @@ public Class getDisplayValueClass() getMutableColumn("ModifiedBy").setFk(new UserIdQueryForeignKey(schema)); ExprColumn catalogEntryCol = getCatalogEntryCol(); - catalogEntryCol.setDisplayColumnFactory(colInfo -> new CatalogEntryIconColumn(colInfo)); + catalogEntryCol.setDisplayColumnFactory(CatalogEntryIconColumn::new); addColumn(catalogEntryCol); List visibleColumns = new ArrayList<>(); @@ -700,7 +702,7 @@ public AutoCompleteColumn(ColumnInfo col, ActionURL autocompletionUrl, boolean p } @Override - public void renderInputHtml(RenderContext ctx, Writer out, Object value) throws IOException + public void renderInputHtml(RenderContext ctx, HtmlWriter out, Object value) { String name = getFormFieldName(ctx); String valueString = getStringValue(value, isDisabledInput(ctx)); @@ -710,20 +712,31 @@ public void renderInputHtml(RenderContext ctx, Writer out, Object value) throws } String renderId = getRenderId(); - StringBuilder sb = new StringBuilder(); - - sb.append("\n"); - sb.append("
"); - sb.append(""); - sb.append("
"); - sb.append("
").append(PageFlowUtil.filter(getHelpText(), true, false)).append("
"); - out.write(sb.toString()); + SCRIPT( + JavaScriptFragment.unsafe( + "LABKEY.requiresScript([\"/PanoramaPublic/js/ExpAnnotAutoComplete.js\"], function() {\n" + + " Ext4.onReady(function(){\n" + + " initAutoComplete(" + _autoCompletionUrl + ", " + PageFlowUtil.jsString(renderId) + ", " + (_prefetch ? "true" : "false") + ");\n" + + " });" + + "});\n" + ) + ).appendTo(out); + + DIV( + at(style, "margin-top:5px;").id(renderId).cl("scrollable-dropdown-menu"), + new InputBuilder<>() + .type("text") + .className("tags") + .placeholder(_placeholderText) + .name(name) + .value(valueString) + ).appendTo(out); + + DIV( + at(style, "font-size:11px"), + HtmlString.unsafe(PageFlowUtil.filter(getHelpText(), true, false)) + ).appendTo(out); } @NotNull @@ -740,19 +753,18 @@ String getHelpText() private static class OrganismColumn extends AutoCompleteColumn { - public OrganismColumn(ColumnInfo col, ActionURL autocompletionUrl, boolean prefetch, String placeHolderText) { super(col, autocompletionUrl, prefetch, placeHolderText); } @Override - public void renderGridCellContents(RenderContext ctx, Writer out) throws IOException + public void renderGridCellContents(RenderContext ctx, HtmlWriter out) { String organismsStr = ctx.get(getColumnInfo().getFieldKey(), String.class); if(!StringUtils.isBlank(organismsStr)) { - out.write(PageFlowUtil.filter(ExperimentAnnotations.getOrganismsNoTaxId(organismsStr))); + out.write(ExperimentAnnotations.getOrganismsNoTaxId(organismsStr)); } else { @@ -769,6 +781,7 @@ String getHelpText() } @Override + @NotNull String getRenderId() { return "input-picker-div-organism"; @@ -777,13 +790,13 @@ String getRenderId() private static class InstrumentColumn extends AutoCompleteColumn { - public InstrumentColumn(ColumnInfo col, ActionURL autocompletionUrl, boolean prefetch, String placeHolderText) { super(col, autocompletionUrl, prefetch, placeHolderText); } @Override + @NotNull String getRenderId() { return "input-picker-div-instrument"; @@ -799,12 +812,12 @@ public CatalogEntryIconColumn(ColumnInfo col) } @Override - public void renderGridCellContents(RenderContext ctx, Writer out) throws IOException + public void renderGridCellContents(RenderContext ctx, HtmlWriter out) { User user = ctx.getViewContext().getUser(); if (user == null || user.isGuest()) { - HtmlString.NBSP.appendTo(out); + out.write(HtmlString.NBSP); return; } Integer catalogEntryId = ctx.get(getColumnInfo().getFieldKey(), Integer.class); @@ -824,13 +837,16 @@ public void renderGridCellContents(RenderContext ctx, Writer out) throws IOExcep ActionURL returnUrl = ctx.getViewContext().getActionURL().clone(); ActionURL catalogEntryLink = entry != null ? PanoramaPublicController.getViewCatalogEntryUrl(expAnnot, entry).addReturnUrl(returnUrl) : PanoramaPublicController.getAddCatalogEntryUrl(expAnnot).addReturnUrl(returnUrl); - DOM.A(at(href, catalogEntryLink.getLocalURIString(), title, PageFlowUtil.filter(imageTitle)), - DOM.IMG(at(src, imageUrl, height, 22, width, 22))) - .appendTo(out); + DOM.A( + at(href, catalogEntryLink.getLocalURIString(), title, PageFlowUtil.filter(imageTitle)), + DOM.IMG( + at(src, imageUrl, height, 22, width, 22) + ) + ).appendTo(out); return; } } - HtmlString.NBSP.appendTo(out); + out.write(HtmlString.NBSP); } } } diff --git a/panoramapublic/src/org/labkey/panoramapublic/query/PeptideMatchesDisplayColumnFactory.java b/panoramapublic/src/org/labkey/panoramapublic/query/PeptideMatchesDisplayColumnFactory.java index f47f1dcc..e5582de5 100644 --- a/panoramapublic/src/org/labkey/panoramapublic/query/PeptideMatchesDisplayColumnFactory.java +++ b/panoramapublic/src/org/labkey/panoramapublic/query/PeptideMatchesDisplayColumnFactory.java @@ -11,9 +11,8 @@ import org.labkey.api.util.Link; import org.labkey.api.util.PageFlowUtil; import org.labkey.api.view.ActionURL; +import org.labkey.api.writer.HtmlWriter; -import java.io.IOException; -import java.io.Writer; import java.util.Set; public class PeptideMatchesDisplayColumnFactory implements DisplayColumnFactory @@ -37,7 +36,7 @@ public void addQueryFieldKeys(Set keys) } @Override - public void renderGridCellContents(RenderContext ctx, Writer out) throws IOException + public void renderGridCellContents(RenderContext ctx, HtmlWriter out) { String proteinLabel = ctx.get(PEPTIDE_SEQUENCE, String.class); String exactMatch = ctx.get(EXACT_MATCH, String.class); @@ -48,8 +47,8 @@ public void renderGridCellContents(RenderContext ctx, Writer out) throws IOExcep searchUrl.addParameter("peptideSequence", proteinLabel); searchUrl.addParameter("exactMatch", exactMatch); - out.write(new Link.LinkBuilder(String.valueOf(matches)).href(searchUrl).toString()); - out.write(PageFlowUtil.button("View").href(searchUrl).toString()); + out.write(new Link.LinkBuilder(String.valueOf(matches)).href(searchUrl)); + out.write(PageFlowUtil.button("View").href(searchUrl)); } }; } diff --git a/panoramapublic/src/org/labkey/panoramapublic/query/ProteinMatchesDisplayColumnFactory.java b/panoramapublic/src/org/labkey/panoramapublic/query/ProteinMatchesDisplayColumnFactory.java index 22b20a13..3821717e 100644 --- a/panoramapublic/src/org/labkey/panoramapublic/query/ProteinMatchesDisplayColumnFactory.java +++ b/panoramapublic/src/org/labkey/panoramapublic/query/ProteinMatchesDisplayColumnFactory.java @@ -11,14 +11,12 @@ import org.labkey.api.util.Link; import org.labkey.api.util.PageFlowUtil; import org.labkey.api.view.ActionURL; +import org.labkey.api.writer.HtmlWriter; -import java.io.IOException; -import java.io.Writer; import java.util.Set; public class ProteinMatchesDisplayColumnFactory implements DisplayColumnFactory { - private static final FieldKey PROTEIN_LABEL = FieldKey.fromParts("proteinLabel"); private static final FieldKey EXACT_MATCH = FieldKey.fromParts("exactMatch"); private static final FieldKey CONTAINER = FieldKey.fromParts("container"); @@ -38,7 +36,7 @@ public void addQueryFieldKeys(Set keys) } @Override - public void renderGridCellContents(RenderContext ctx, Writer out) throws IOException + public void renderGridCellContents(RenderContext ctx, HtmlWriter out) { Integer matches = ctx.get(FieldKey.fromParts("Matches"), Integer.class); String proteinLabel = ctx.get(PROTEIN_LABEL, String.class); @@ -49,8 +47,8 @@ public void renderGridCellContents(RenderContext ctx, Writer out) throws IOExcep searchUrl.addParameter("proteinLabel", proteinLabel); searchUrl.addParameter("exactMatch", exactMatch); - out.write(new Link.LinkBuilder(String.valueOf(matches)).href(searchUrl).toString()); - out.write(PageFlowUtil.button("View").href(searchUrl).toString()); + out.write(new Link.LinkBuilder(String.valueOf(matches)).href(searchUrl)); + out.write(PageFlowUtil.button("View").href(searchUrl)); } }; } diff --git a/panoramapublic/src/org/labkey/panoramapublic/query/SmallMoleculesMatchesDisplayColumnFactory.java b/panoramapublic/src/org/labkey/panoramapublic/query/SmallMoleculesMatchesDisplayColumnFactory.java index df45b586..ba06932b 100644 --- a/panoramapublic/src/org/labkey/panoramapublic/query/SmallMoleculesMatchesDisplayColumnFactory.java +++ b/panoramapublic/src/org/labkey/panoramapublic/query/SmallMoleculesMatchesDisplayColumnFactory.java @@ -11,9 +11,8 @@ import org.labkey.api.util.Link; import org.labkey.api.util.PageFlowUtil; import org.labkey.api.view.ActionURL; +import org.labkey.api.writer.HtmlWriter; -import java.io.IOException; -import java.io.Writer; import java.util.Set; public class SmallMoleculesMatchesDisplayColumnFactory implements DisplayColumnFactory @@ -37,7 +36,7 @@ public void addQueryFieldKeys(Set keys) } @Override - public void renderGridCellContents(RenderContext ctx, Writer out) throws IOException + public void renderGridCellContents(RenderContext ctx, HtmlWriter out) { String smallMol= ctx.get(SMALL_MOLECULE, String.class); String exactMatch = ctx.get(EXACT_MATCH, String.class); @@ -48,8 +47,8 @@ public void renderGridCellContents(RenderContext ctx, Writer out) throws IOExcep searchUrl.addParameter("smallMolecule", smallMol); searchUrl.addParameter("exactMatch", exactMatch); - out.write(new Link.LinkBuilder(String.valueOf(matches)).href(searchUrl).toString()); - out.write(PageFlowUtil.button("View").href(searchUrl).toString()); + out.write(new Link.LinkBuilder(String.valueOf(matches)).href(searchUrl)); + out.write(PageFlowUtil.button("View").href(searchUrl)); } }; } diff --git a/panoramapublic/src/org/labkey/panoramapublic/query/SubmissionTableInfo.java b/panoramapublic/src/org/labkey/panoramapublic/query/SubmissionTableInfo.java index 45b7fcac..4159b01b 100644 --- a/panoramapublic/src/org/labkey/panoramapublic/query/SubmissionTableInfo.java +++ b/panoramapublic/src/org/labkey/panoramapublic/query/SubmissionTableInfo.java @@ -14,6 +14,7 @@ import org.labkey.api.util.HtmlString; import org.labkey.api.util.PageFlowUtil; import org.labkey.api.view.ActionURL; +import org.labkey.api.writer.HtmlWriter; import org.labkey.panoramapublic.PanoramaPublicController; import org.labkey.panoramapublic.PanoramaPublicManager; import org.labkey.panoramapublic.PanoramaPublicSchema; @@ -22,8 +23,6 @@ import org.labkey.panoramapublic.model.Submission; import org.labkey.panoramapublic.view.publish.ShortUrlDisplayColumnFactory; -import java.io.IOException; -import java.io.Writer; import java.util.ArrayList; import java.util.List; @@ -157,7 +156,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) { Integer id = ctx.get(colInfo.getFieldKey(), Integer.class); Submission s = SubmissionManager.getSubmission(id, ctx.getContainer()); @@ -165,7 +164,7 @@ public void renderGridCellContents(RenderContext ctx, Writer out) throws IOExcep { // Show the delete link only if the experiment has not yet been copied _url.replaceParameter("id", id); - out.write(PageFlowUtil.link("Delete").href(_url).toString()); + out.write(PageFlowUtil.link("Delete").href(_url)); } } }; @@ -187,7 +186,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) { Integer id = ctx.get(colInfo.getFieldKey(), Integer.class); Submission s = SubmissionManager.getSubmission(id, ctx.getContainer()); @@ -205,13 +204,13 @@ public void renderGridCellContents(RenderContext ctx, Writer out) throws IOExcep { ActionURL resubmitUrl = PanoramaPublicController.getResubmitExperimentURL(js.getExperimentAnnotationsId(), js.getJournalId(), _container, s.isKeepPrivate(), true /*check if data is valid for PXD. Always do this check on a resubmit.*/); - out.write(PageFlowUtil.link("Resubmit").href(resubmitUrl).toString()); + out.write(PageFlowUtil.link("Resubmit").href(resubmitUrl)); } } else { ActionURL ediUrl = PanoramaPublicController.getUpdateSubmissionURL(js.getExperimentAnnotationsId(), js.getJournalId(), _container, s.isKeepPrivate(), true); - out.write(PageFlowUtil.link("Edit").href(ediUrl).toString()); + out.write(PageFlowUtil.link("Edit").href(ediUrl)); } } } diff --git a/panoramapublic/src/org/labkey/panoramapublic/query/modification/ModificationDocsDisplayColumnFactory.java b/panoramapublic/src/org/labkey/panoramapublic/query/modification/ModificationDocsDisplayColumnFactory.java index 9c2cbfb1..2112e4c4 100644 --- a/panoramapublic/src/org/labkey/panoramapublic/query/modification/ModificationDocsDisplayColumnFactory.java +++ b/panoramapublic/src/org/labkey/panoramapublic/query/modification/ModificationDocsDisplayColumnFactory.java @@ -18,10 +18,9 @@ import org.labkey.api.util.HtmlString; import org.labkey.api.util.Link; import org.labkey.api.util.PageFlowUtil; +import org.labkey.api.writer.HtmlWriter; import org.labkey.panoramapublic.PanoramaPublicSchema; -import java.io.IOException; -import java.io.Writer; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -54,7 +53,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) { String runIds = ctx.get(colInfo.getFieldKey(), String.class); if (!StringUtils.isBlank(runIds)) @@ -66,7 +65,7 @@ public void renderGridCellContents(RenderContext ctx, Writer out) throws IOExcep .collect(Collectors.toSet()); List runs = getRuns(ids, user); - if (runs.size() > 0) + if (!runs.isEmpty()) { Long modId = ctx.get(MOD_ID, Long.class); List runPeptideLinks = new ArrayList<>(); @@ -81,7 +80,7 @@ public void renderGridCellContents(RenderContext ctx, Writer out) throws IOExcep } else { - out.write("No runs found for Ids: " + PageFlowUtil.filter(runIds)); + out.write("No runs found for Ids: " + runIds); } } } diff --git a/panoramapublic/src/org/labkey/panoramapublic/query/modification/UnimodIdDisplayColumnFactory.java b/panoramapublic/src/org/labkey/panoramapublic/query/modification/UnimodIdDisplayColumnFactory.java index de303db5..e80dc387 100644 --- a/panoramapublic/src/org/labkey/panoramapublic/query/modification/UnimodIdDisplayColumnFactory.java +++ b/panoramapublic/src/org/labkey/panoramapublic/query/modification/UnimodIdDisplayColumnFactory.java @@ -5,10 +5,9 @@ import org.labkey.api.data.DisplayColumn; import org.labkey.api.data.DisplayColumnFactory; import org.labkey.api.data.RenderContext; +import org.labkey.api.writer.HtmlWriter; import org.labkey.panoramapublic.proteomexchange.UnimodModification; -import java.io.Writer; - /** * Displays a link to the Unimod page for a modification with the given Unimod Id. * Example: https://www.unimod.org/modifications_view.php?editid1=4 @@ -21,7 +20,7 @@ public DisplayColumn createRenderer(ColumnInfo colInfo) return new DataColumn(colInfo) { @Override - public void renderGridCellContents(RenderContext ctx, Writer out) + public void renderGridCellContents(RenderContext ctx, HtmlWriter out) { Integer unimodId = ctx.get(colInfo.getFieldKey(), Integer.class); if (unimodId != null) diff --git a/panoramapublic/src/org/labkey/panoramapublic/query/modification/UnimodMatchDisplayColumnFactory.java b/panoramapublic/src/org/labkey/panoramapublic/query/modification/UnimodMatchDisplayColumnFactory.java index c4be47be..a60698e4 100644 --- a/panoramapublic/src/org/labkey/panoramapublic/query/modification/UnimodMatchDisplayColumnFactory.java +++ b/panoramapublic/src/org/labkey/panoramapublic/query/modification/UnimodMatchDisplayColumnFactory.java @@ -14,13 +14,13 @@ import org.labkey.api.util.HtmlString; import org.labkey.api.util.Link; import org.labkey.api.view.ActionURL; +import org.labkey.api.writer.HtmlWriter; import org.labkey.panoramapublic.PanoramaPublicController; import org.labkey.panoramapublic.model.ExperimentAnnotations; import org.labkey.panoramapublic.proteomexchange.UnimodModification; import org.labkey.panoramapublic.query.ExperimentAnnotationsManager; import org.labkey.panoramapublic.query.ModificationInfoManager; -import java.io.Writer; import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -48,7 +48,7 @@ public DisplayColumn createRenderer(ColumnInfo colInfo) return new DataColumn(colInfo) { @Override - public void renderGridCellContents(RenderContext ctx, Writer out) + public void renderGridCellContents(RenderContext ctx, HtmlWriter out) { Integer unimodId = ctx.get(colInfo.getFieldKey(), Integer.class); diff --git a/panoramapublic/src/org/labkey/panoramapublic/query/speclib/EditLibInfoDisplayColumnFactory.java b/panoramapublic/src/org/labkey/panoramapublic/query/speclib/EditLibInfoDisplayColumnFactory.java index df5d46a7..0019af9b 100644 --- a/panoramapublic/src/org/labkey/panoramapublic/query/speclib/EditLibInfoDisplayColumnFactory.java +++ b/panoramapublic/src/org/labkey/panoramapublic/query/speclib/EditLibInfoDisplayColumnFactory.java @@ -10,12 +10,11 @@ import org.labkey.api.util.PageFlowUtil; import org.labkey.api.util.URLHelper; import org.labkey.api.view.ActionURL; +import org.labkey.api.writer.HtmlWriter; import org.labkey.panoramapublic.PanoramaPublicController; import org.labkey.panoramapublic.model.ExperimentAnnotations; import org.labkey.panoramapublic.query.ExperimentAnnotationsManager; -import java.io.IOException; -import java.io.Writer; import java.util.Set; public class EditLibInfoDisplayColumnFactory implements DisplayColumnFactory @@ -31,7 +30,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) { if (ctx.getContainer().hasPermission(ctx.getViewContext().getUser(), UpdatePermission.class)) { @@ -58,18 +57,16 @@ public void renderGridCellContents(RenderContext ctx, Writer out) throws IOExcep } ActionURL editUrl = PanoramaPublicController.getEditSpecLibInfoURL(experimentAnnotationsId, specLibId, specLibInfoId, ctx.getContainer()); editUrl.addReturnUrl(returnUrl); - out.write(PageFlowUtil.link(specLibInfoId != null ? "Edit" : "Add").href(editUrl).toString()); + out.write(PageFlowUtil.link(specLibInfoId != null ? "Edit" : "Add").href(editUrl)); if (specLibInfoId != null) { ActionURL deleteUrl = PanoramaPublicController.getDeleteSpecLibInfoURL(experimentAnnotationsId, specLibInfoId, ctx.getContainer()); deleteUrl.addReturnUrl(returnUrl); - out.write(PageFlowUtil.link("Delete").href(deleteUrl).usePost("Are you sure you want to delete the spectral library information?").toString()); + out.write(PageFlowUtil.link("Delete").href(deleteUrl).usePost("Are you sure you want to delete the spectral library information?")); } - return; } } } - out.write(""); } @Override diff --git a/panoramapublic/src/org/labkey/panoramapublic/query/speclib/LibraryDocsDisplayColumnFactory.java b/panoramapublic/src/org/labkey/panoramapublic/query/speclib/LibraryDocsDisplayColumnFactory.java index fa9cbf5d..f6c594c9 100644 --- a/panoramapublic/src/org/labkey/panoramapublic/query/speclib/LibraryDocsDisplayColumnFactory.java +++ b/panoramapublic/src/org/labkey/panoramapublic/query/speclib/LibraryDocsDisplayColumnFactory.java @@ -10,12 +10,10 @@ import org.labkey.api.query.FieldKey; import org.labkey.api.security.User; import org.labkey.api.util.DOM; -import org.labkey.api.util.PageFlowUtil; +import org.labkey.api.writer.HtmlWriter; import org.labkey.panoramapublic.model.speclib.SpectralLibrary; import org.labkey.panoramapublic.query.SpecLibInfoManager; -import java.io.IOException; -import java.io.Writer; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -40,7 +38,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) { String specLibIds = ctx.get(colInfo.getFieldKey(), String.class); if (!StringUtils.isBlank(specLibIds)) @@ -51,7 +49,7 @@ public void renderGridCellContents(RenderContext ctx, Writer out) throws IOExcep .filter(l -> l != 0) .collect(Collectors.toSet()); List libraries = SpecLibInfoManager.getLibraries(ids, user); - if (libraries.size() > 0) + if (!libraries.isEmpty()) { Integer specLibInfoId = ctx.get(SPECLIB_INFO_ID, Integer.class); List runLibraryLinks = new ArrayList<>(); @@ -69,7 +67,7 @@ public void renderGridCellContents(RenderContext ctx, Writer out) throws IOExcep } else { - out.write("No libraries found for Ids: " + PageFlowUtil.filter(specLibIds)); + out.write("No libraries found for Ids: " + specLibIds); } } } diff --git a/panoramapublic/test/src/org/labkey/test/tests/panoramapublic/PanoramaWebPublicSearchTest.java b/panoramapublic/test/src/org/labkey/test/tests/panoramapublic/PanoramaWebPublicSearchTest.java index 87f764ce..3fb9c64b 100644 --- a/panoramapublic/test/src/org/labkey/test/tests/panoramapublic/PanoramaWebPublicSearchTest.java +++ b/panoramapublic/test/src/org/labkey/test/tests/panoramapublic/PanoramaWebPublicSearchTest.java @@ -118,7 +118,7 @@ public void testExperimentSearch() } catch (StaleElementReferenceException e) { - shortWait().until(ExpectedConditions.stalenessOf(Locator.tagWithAttribute("form", "lk-region-form", "Targeted MS Experiment List").findElement(getDriver()))); + shortWait().until(ExpectedConditions.stalenessOf(Locator.tagWithAttribute("form", "data-region-form", "Targeted MS Experiment List").findElement(getDriver()))); } checker().verifyEquals("Incorrect search results", 3, table.getDataRowCount()); checker().verifyEquals("Incorrect values for experiment title", Arrays.asList(" Test experiment for search improvements", " Experiment for small molecule search", " Submitter Experiment"), @@ -135,7 +135,7 @@ public void testExperimentSearch() } catch (StaleElementReferenceException e) { - shortWait().until(ExpectedConditions.stalenessOf(Locator.tagWithAttribute("form", "lk-region-form", "Targeted MS Experiment List").findElement(getDriver()))); + shortWait().until(ExpectedConditions.stalenessOf(Locator.tagWithAttribute("form", "data-region-form", "Targeted MS Experiment List").findElement(getDriver()))); } checker().verifyEquals("Incorrect search results", 1, table.getDataRowCount()); checker().verifyEquals("Incorrect values for experiment title", Arrays.asList(" Submitter Experiment"), diff --git a/pwebdashboard/src/org/labkey/pwebdashboard/ProjectAdminsTable.java b/pwebdashboard/src/org/labkey/pwebdashboard/ProjectAdminsTable.java index 85fa71bf..d5d360f1 100644 --- a/pwebdashboard/src/org/labkey/pwebdashboard/ProjectAdminsTable.java +++ b/pwebdashboard/src/org/labkey/pwebdashboard/ProjectAdminsTable.java @@ -31,12 +31,12 @@ import org.labkey.api.security.roles.RoleManager; import org.labkey.api.security.roles.SiteAdminRole; import org.labkey.api.util.HtmlString; +import org.labkey.api.util.HtmlStringBuilder; import org.labkey.api.util.Link; import org.labkey.api.util.PageFlowUtil; import org.labkey.api.view.ActionURL; +import org.labkey.api.writer.HtmlWriter; -import java.io.IOException; -import java.io.Writer; import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -135,7 +135,7 @@ private String getCommaSeparatedAdmins(Container container) String space = ""; - if (allAdmins.size() > 0) + if (!allAdmins.isEmpty()) { for(UserPrincipal user: allAdmins) { @@ -150,8 +150,10 @@ private String getCommaSeparatedAdmins(Container container) return null; } + private static final HtmlString COMMA_SPACE = HtmlStringBuilder.of(",").append(HtmlString.NBSP).getHtmlString(); + @Override - public void renderGridCellContents(RenderContext ctx, Writer out) throws IOException + public void renderGridCellContents(RenderContext ctx, HtmlWriter out) { String entityId = ctx.get(getColumnInfo().getFieldKey(), String.class); Container container = ContainerManager.getForId(entityId); @@ -160,28 +162,18 @@ public void renderGridCellContents(RenderContext ctx, Writer out) throws IOExcep { List allAdmins = getAdmins(container); - StringBuilder display = new StringBuilder(); - - String space = ""; + HtmlString space = HtmlString.EMPTY_STRING; - if (allAdmins.size() > 0) + if (!allAdmins.isEmpty()) { for(UserPrincipal user: allAdmins) { - display.append(space); - display.append(getUserDetails(container, user)); - space = ", "; - + out.write(space); + out.write(getUserDetails(container, user)); + space = COMMA_SPACE; } - - out.write(display.toString()); - return; } } - else - { - out.write(""); - } } @NotNull diff --git a/signup/src/org/labkey/signup/SignUpSchema.java b/signup/src/org/labkey/signup/SignUpSchema.java index ca6bbf28..0edda9bc 100644 --- a/signup/src/org/labkey/signup/SignUpSchema.java +++ b/signup/src/org/labkey/signup/SignUpSchema.java @@ -40,9 +40,8 @@ import org.labkey.api.security.User; import org.labkey.api.security.permissions.AdminPermission; import org.labkey.api.view.ActionURL; +import org.labkey.api.writer.HtmlWriter; -import java.io.IOException; -import java.io.Writer; import java.util.Set; public class SignUpSchema extends UserSchema @@ -91,7 +90,7 @@ public TableInfo createTable(String name, ContainerFilter containerFilter) oldgroup.setDisplayColumnFactory(colInfo -> new DataColumn(colInfo) { @Override - public void renderGridCellContents(RenderContext ctx, Writer out) throws IOException + public void renderGridCellContents(RenderContext ctx, HtmlWriter out) { Group old = org.labkey.api.security.SecurityManager.getGroup(Integer.parseInt(String.valueOf(ctx.get(FieldKey.fromParts("oldgroup"))))); out.write(old.getName()); @@ -100,7 +99,7 @@ public void renderGridCellContents(RenderContext ctx, Writer out) throws IOExcep newgroup.setDisplayColumnFactory(colInfo -> new DataColumn(colInfo) { @Override - public void renderGridCellContents(RenderContext ctx, Writer out) throws IOException + public void renderGridCellContents(RenderContext ctx, HtmlWriter out) { Group old = org.labkey.api.security.SecurityManager.getGroup(Integer.parseInt(String.valueOf(ctx.get(FieldKey.fromParts("newgroup"))))); out.write(old.getName()); @@ -120,7 +119,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) { Container container = ContainerManager.getForId(String.valueOf(ctx.get(FieldKey.fromParts("Container")))); String email = String.valueOf(ctx.get(FieldKey.fromParts("email")));