diff --git a/api/src/org/labkey/api/action/SpringActionController.java b/api/src/org/labkey/api/action/SpringActionController.java index 0019f9cdcb0..2dac648cf55 100644 --- a/api/src/org/labkey/api/action/SpringActionController.java +++ b/api/src/org/labkey/api/action/SpringActionController.java @@ -266,7 +266,7 @@ protected User getUser() // Convenience method protected static

P urlProvider(Class

inter) { - return Objects.requireNonNull(PageFlowUtil.urlProvider(inter)); + return PageFlowUtil.urlProvider(inter); } protected void requiresLogin() diff --git a/api/src/org/labkey/api/action/UrlProviderService.java b/api/src/org/labkey/api/action/UrlProviderService.java index d4270ef039f..c180d3091f7 100644 --- a/api/src/org/labkey/api/action/UrlProviderService.java +++ b/api/src/org/labkey/api/action/UrlProviderService.java @@ -18,7 +18,9 @@ import org.jetbrains.annotations.Nullable; import org.labkey.api.module.Module; import org.labkey.api.util.Pair; +import org.labkey.api.util.UnexpectedException; +import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -27,7 +29,7 @@ public class UrlProviderService { private static final UrlProviderService instance = new UrlProviderService(); - private static final Map> _urlProviderToImpl = new HashMap<>(); + private static final Map, Class> _urlProviderToImpl = new HashMap<>(); private static final Map, List>> _urlProviderToOverrideImpls = new HashMap<>(); public static UrlProviderService getInstance() @@ -35,17 +37,11 @@ public static UrlProviderService getInstance() return instance; } - public

void registerUrlProvider(Class

inter, Class innerClass) + public

void registerUrlProvider(Class

inter, Class innerClass) { _urlProviderToImpl.put(inter, innerClass); } - /** @return true if the UrlProvider exists. */ - public

boolean hasUrlProvider(Class

inter) - { - return _urlProviderToImpl.get(inter) != null; - } - @Nullable public

P getUrlProvider(Class

inter) { @@ -56,16 +52,11 @@ public

P getUrlProvider(Class

inter) try { - P impl = (P) clazz.newInstance(); - return impl; - } - catch (InstantiationException e) - { - throw new RuntimeException("Failed to instantiate provider class " + clazz.getName() + " for " + inter.getName(), e); + return (P) clazz.getDeclaredConstructor().newInstance(); } - catch (IllegalAccessException e) + catch (InstantiationException | InvocationTargetException | IllegalAccessException | NoSuchMethodException e) { - throw new RuntimeException("Illegal access of provider class " + clazz.getName() + " for " + inter.getName(), e); + throw UnexpectedException.wrap(e, "Failed to instantiate provider class " + clazz.getName() + " for " + inter.getName()); } } diff --git a/api/src/org/labkey/api/assay/AssayRunType.java b/api/src/org/labkey/api/assay/AssayRunType.java index 617ffa51d93..f0019f20497 100644 --- a/api/src/org/labkey/api/assay/AssayRunType.java +++ b/api/src/org/labkey/api/assay/AssayRunType.java @@ -73,7 +73,7 @@ public void populateButtonBar(ViewContext context, ButtonBar bar, DataView view, Domain domain = provider.getResultsDomain(_protocol); if (domain != null && domain.getTypeId() > 0) { - StudyUrls urls = PageFlowUtil.urlProvider(StudyUrls.class); + StudyUrls urls = PageFlowUtil.urlProviderOptional(StudyUrls.class); if (null != urls) { diff --git a/api/src/org/labkey/api/assay/query/ResultsQueryView.java b/api/src/org/labkey/api/assay/query/ResultsQueryView.java index 6be14b9b7ef..b46448a9b09 100644 --- a/api/src/org/labkey/api/assay/query/ResultsQueryView.java +++ b/api/src/org/labkey/api/assay/query/ResultsQueryView.java @@ -145,7 +145,7 @@ private ActionButton getLinkToStudyButton(DataView view, Container container) if (null == StudyPublishService.get() || StudyPublishService.get().getValidPublishTargets(getUser(), InsertPermission.class).isEmpty()) return null; - StudyUrls urls = PageFlowUtil.urlProvider(StudyUrls.class); + StudyUrls urls = PageFlowUtil.urlProviderOptional(StudyUrls.class); if (urls == null) return null; diff --git a/api/src/org/labkey/api/data/DataRegion.java b/api/src/org/labkey/api/data/DataRegion.java index 43e66f0f5f3..ac454282646 100644 --- a/api/src/org/labkey/api/data/DataRegion.java +++ b/api/src/org/labkey/api/data/DataRegion.java @@ -1450,7 +1450,7 @@ protected JSONObject toJSON(RenderContext ctx) ignoreViewFilter = getSettings().getIgnoreViewFilter(); dataRegionJSON.put("ignoreViewFilter", ignoreViewFilter); - VisualizationUrls visUrlProvider = PageFlowUtil.urlProvider(VisualizationUrls.class); + VisualizationUrls visUrlProvider = PageFlowUtil.urlProviderOptional(VisualizationUrls.class); if (visUrlProvider != null) dataRegionJSON.put("chartWizardURL", visUrlProvider.getGenericChartDesignerURL(ctx.getContainer(), user, getSettings(), null)); diff --git a/api/src/org/labkey/api/exp/LsidManager.java b/api/src/org/labkey/api/exp/LsidManager.java index 81fdea4868a..a9a6bf43870 100644 --- a/api/src/org/labkey/api/exp/LsidManager.java +++ b/api/src/org/labkey/api/exp/LsidManager.java @@ -216,7 +216,7 @@ public AssayResultIdentifiable(AssayProvider provider, OntologyObject oo, ExpPro @Override public @Nullable ActionURL detailsURL() { - var urls = PageFlowUtil.urlProvider(AssayUrls.class); + var urls = PageFlowUtil.urlProviderOptional(AssayUrls.class); if (urls == null) return null; diff --git a/api/src/org/labkey/api/jsp/JspBase.java b/api/src/org/labkey/api/jsp/JspBase.java index 173e5b8b8b4..0e15e5603e7 100644 --- a/api/src/org/labkey/api/jsp/JspBase.java +++ b/api/src/org/labkey/api/jsp/JspBase.java @@ -422,12 +422,6 @@ public ActionURL urlFor(Class actionClass) return new ActionURL(actionClass, getContainer()); } - /** @return true if the UrlProvider exists. */ - public

boolean hasUrlProvider(Class

inter) - { - return PageFlowUtil.hasUrlProvider(inter); - } - /** * Convenience function for getting a specified UrlProvider interface * implementation, for use in writing URLs implemented in other modules. @@ -435,7 +429,7 @@ public

boolean hasUrlProvider(Class

inter) * @param inter interface extending UrlProvider * @return an implementation of the interface */ - @Nullable + @NotNull public

P urlProvider(Class

inter) { return PageFlowUtil.urlProvider(inter); diff --git a/api/src/org/labkey/api/module/ModuleLoader.java b/api/src/org/labkey/api/module/ModuleLoader.java index 6248d1b0e75..69dadae1fdd 100644 --- a/api/src/org/labkey/api/module/ModuleLoader.java +++ b/api/src/org/labkey/api/module/ModuleLoader.java @@ -2217,7 +2217,7 @@ public void initControllerToModule() { Class[] supr = inter.getInterfaces(); if (supr.length == 1 && UrlProvider.class.equals(supr[0])) - UrlProviderService.getInstance().registerUrlProvider((Class) inter, innerClass); + UrlProviderService.getInstance().registerUrlProvider((Class) inter, (Class) innerClass); } } } @@ -2323,7 +2323,7 @@ private void registerResourcePrefix(String prefix, String name, String sourcePat return; ResourceFinder finder = new ResourceFinder(name, sourcePath, buildPath); - Collection col = _resourceFinders.computeIfAbsent(prefix, k -> new ArrayList<>()); + Collection col = _resourceFinders.computeIfAbsent(prefix, _ -> new ArrayList<>()); synchronized (col) { @@ -2334,8 +2334,8 @@ private void registerResourcePrefix(String prefix, String name, String sourcePat public @NotNull Collection getResourceFindersForPath(String path) { //NOTE: jasper encodes underscores and dashes in JSPs, so decode them here - path = path.replaceAll("_005f", "_"); - path = path.replaceAll("_002d", "-"); + path = path.replace("_005f", "_"); + path = path.replace("_002d", "-"); Collection finders = new LinkedList<>(); diff --git a/api/src/org/labkey/api/security/Encryption.java b/api/src/org/labkey/api/security/Encryption.java index 5f913e3f665..4ade75d3980 100644 --- a/api/src/org/labkey/api/security/Encryption.java +++ b/api/src/org/labkey/api/security/Encryption.java @@ -127,7 +127,7 @@ public void addDynamicWarnings(@NotNull Warnings warnings, @Nullable ViewContext if (context != null && context.getUser().hasSiteAdminPermission()) { who = "you"; - link = LinkBuilder.simpleLink("this link", Objects.requireNonNull(PageFlowUtil.urlProvider(AdminUrls.class)).getDeleteEncryptedContentURL()); + link = LinkBuilder.simpleLink("this link", PageFlowUtil.urlProvider(AdminUrls.class).getDeleteEncryptedContentURL()); } else { diff --git a/api/src/org/labkey/api/util/PageFlowUtil.java b/api/src/org/labkey/api/util/PageFlowUtil.java index 1e6fa06dc12..a2ed67d15c7 100644 --- a/api/src/org/labkey/api/util/PageFlowUtil.java +++ b/api/src/org/labkey/api/util/PageFlowUtil.java @@ -3198,10 +3198,23 @@ public void testFormNameEncoding() } } - /** @return true if the UrlProvider exists. */ - static public

boolean hasUrlProvider(Class

inter) + /** + * Returns a specified UrlProvider interface implementation, for use + * in writing URLs implemented in other modules. + * + * @param inter interface extending UrlProvider + * @return an implementation of the interface + * @throws IllegalArgumentException if the provider is not available. Use urlProviderOptional() if you're OK with it not being present + */ + @NotNull + static public

P urlProvider(Class

inter) { - return UrlProviderService.getInstance().hasUrlProvider(inter); + P result = urlProviderOptional(inter); + if (result == null) + { + throw new IllegalArgumentException("No provider registered for " + inter.getName()); + } + return result; } /** @@ -3212,7 +3225,7 @@ static public

boolean hasUrlProvider(Class

inter) * @return an implementation of the interface. */ @Nullable - static public

P urlProvider(Class

inter) + static public

P urlProviderOptional(Class

inter) { return UrlProviderService.getInstance().getUrlProvider(inter); } @@ -3228,7 +3241,7 @@ static public

P urlProvider(Class

inter) * @param checkForOverrides true to check for module overrides to this interface * @return an implementation of the interface. */ - @Nullable + @NotNull static public

P urlProvider(Class

inter, boolean checkForOverrides) { if (checkForOverrides) diff --git a/api/src/org/labkey/api/view/PopupMenu.java b/api/src/org/labkey/api/view/PopupMenu.java index aa72dfd412a..10ebd261687 100644 --- a/api/src/org/labkey/api/view/PopupMenu.java +++ b/api/src/org/labkey/api/view/PopupMenu.java @@ -199,7 +199,7 @@ else if (_buttonStyle == ButtonStyle.IMAGE || _buttonStyle == ButtonStyle.IMAGE_ UL( cl("dropdown-menu dropdown-menu-left"), - (DOM.Renderable) ret2 -> PopupMenuView.renderTree(_navTree, out) + (DOM.Renderable) _ -> PopupMenuView.renderTree(_navTree, out) ).appendTo(out); return ret; @@ -245,7 +245,7 @@ public enum Align LEFT("tl-bl?"), RIGHT("tr-br?"); - String extPosition; + final String extPosition; Align(String position) { extPosition = position; diff --git a/api/src/org/labkey/api/view/Portal.java b/api/src/org/labkey/api/view/Portal.java index 687696aa5cb..b71e9961fcf 100644 --- a/api/src/org/labkey/api/view/Portal.java +++ b/api/src/org/labkey/api/view/Portal.java @@ -199,7 +199,7 @@ public static void clearWebPartProperties(String nameSearchText, String properti @NotNull static ProjectUrls urlProvider() { - return Objects.requireNonNull(PageFlowUtil.urlProvider(ProjectUrls.class)); + return PageFlowUtil.urlProvider(ProjectUrls.class); } /** Issue 51727 - metrics to track web part usage */ diff --git a/core/src/org/labkey/core/admin/DisplayFormatAnalyzer.java b/core/src/org/labkey/core/admin/DisplayFormatAnalyzer.java index f880d17894e..6926cacf78f 100644 --- a/core/src/org/labkey/core/admin/DisplayFormatAnalyzer.java +++ b/core/src/org/labkey/core/admin/DisplayFormatAnalyzer.java @@ -215,10 +215,6 @@ public static UsageMetricsProvider getMetricsProvider() private

@NotNull P urlProvider(Class

inter) { - P provider = PageFlowUtil.urlProvider(inter); - if (provider == null) - throw new IllegalStateException("No urlProvider found for " + inter.getName()); - - return provider; + return PageFlowUtil.urlProvider(inter); } } diff --git a/core/src/org/labkey/core/admin/editMenuBar.jsp b/core/src/org/labkey/core/admin/editMenuBar.jsp index 8a20690dfa7..78a39629b0e 100644 --- a/core/src/org/labkey/core/admin/editMenuBar.jsp +++ b/core/src/org/labkey/core/admin/editMenuBar.jsp @@ -23,7 +23,7 @@ <%@ taglib prefix="labkey" uri="http://www.labkey.org/taglib" %> <%@ page extends="org.labkey.api.jsp.JspBase" %> <% - HttpView me = HttpView.currentView(); + HttpView me = HttpView.currentView(); ActionURL refreshURL = urlProvider(AdminUrls.class).getProjectSettingsMenuURL(getContainer()); boolean isAdminMode = PageFlowUtil.isPageAdminMode(getViewContext()); String toggleUrl = urlProvider(ProjectUrls.class).getTogglePageAdminModeURL(getContainer(), getViewContext().getActionURL()).toString(); diff --git a/core/src/org/labkey/core/view/template/bootstrap/WarningServiceImpl.java b/core/src/org/labkey/core/view/template/bootstrap/WarningServiceImpl.java index a4d9137a4a6..5de2aff2dc1 100644 --- a/core/src/org/labkey/core/view/template/bootstrap/WarningServiceImpl.java +++ b/core/src/org/labkey/core/view/template/bootstrap/WarningServiceImpl.java @@ -176,13 +176,10 @@ public HtmlString getWarningsHtml(Warnings warnings, ViewContext context) appendMessageContent(warnings, html); html.unsafeAppend("\n"); CoreUrls coreUrls = urlProvider(CoreUrls.class); - if (coreUrls != null) - { - String dismissURL = coreUrls.getDismissWarningsActionURL(context).toString(); - html.unsafeAppend("\n"); - } + String dismissURL = coreUrls.getDismissWarningsActionURL(context).toString(); + html.unsafeAppend("\n"); html.unsafeAppend(""); return html.getHtmlString(); diff --git a/core/src/org/labkey/core/view/template/bootstrap/header.jsp b/core/src/org/labkey/core/view/template/bootstrap/header.jsp index 3a0ea0ccfc6..2d107a64fc0 100644 --- a/core/src/org/labkey/core/view/template/bootstrap/header.jsp +++ b/core/src/org/labkey/core/view/template/bootstrap/header.jsp @@ -83,7 +83,7 @@ LookAndFeelProperties laf = LookAndFeelProperties.getInstance(c); ModuleLoader moduleLoader = ModuleLoader.getInstance(); boolean isStartupComplete = moduleLoader.isStartupComplete(); - boolean showSearch = isStartupComplete && hasUrlProvider(SearchUrls.class); + boolean showSearch = isStartupComplete && PageFlowUtil.urlProviderOptional(SearchUrls.class) != null; HtmlView headerHtml = new HeaderProperties(getContainer()).getView(); String siteShortName = (laf.getShortName() != null && !laf.getShortName().isEmpty()) ? laf.getShortName() : null; @@ -182,9 +182,7 @@ <% CoreUrls coreUrls = urlProvider(CoreUrls.class); - if (coreUrls != null) - { - String displayUrl = coreUrls.getDisplayWarningsActionURL(getViewContext()).toString(); + String displayUrl = coreUrls.getDisplayWarningsActionURL(getViewContext()).toString(); %> <% - } - if (showProductMenu) { %> diff --git a/experiment/src/org/labkey/experiment/ProtocolSteps.jsp b/experiment/src/org/labkey/experiment/ProtocolSteps.jsp index 6cffc5d43ec..d34825de5e3 100644 --- a/experiment/src/org/labkey/experiment/ProtocolSteps.jsp +++ b/experiment/src/org/labkey/experiment/ProtocolSteps.jsp @@ -45,7 +45,6 @@ ppURL.addParameter("ParentLSID", protocol.getLSID()); ExperimentUrls urls = urlProvider(ExperimentUrls.class); - assert urls != null; List steps = protocol.getSteps(); boolean debug = getViewContext().getRequest().getParameter("_debug") != null; diff --git a/experiment/src/org/labkey/experiment/RunGroupWebPart.java b/experiment/src/org/labkey/experiment/RunGroupWebPart.java index d609d68e3b7..ba3f06fd166 100644 --- a/experiment/src/org/labkey/experiment/RunGroupWebPart.java +++ b/experiment/src/org/labkey/experiment/RunGroupWebPart.java @@ -122,7 +122,7 @@ protected void populateButtonBar(DataView view, ButtonBar bb) super.populateButtonBar(view, bb); if (!_narrow) { - AssayUrls urls = PageFlowUtil.urlProvider(AssayUrls.class); + AssayUrls urls = PageFlowUtil.urlProviderOptional(AssayUrls.class); if (null != urls) { ActionButton addXarFile = new ActionButton(urls.getImportAssayDesignURL(getViewContext().getContainer()), "Upload XAR"); diff --git a/experiment/src/org/labkey/experiment/api/ExpDataClassImpl.java b/experiment/src/org/labkey/experiment/api/ExpDataClassImpl.java index 721352497db..6b49ecf1655 100644 --- a/experiment/src/org/labkey/experiment/api/ExpDataClassImpl.java +++ b/experiment/src/org/labkey/experiment/api/ExpDataClassImpl.java @@ -396,13 +396,8 @@ public ActionURL urlFor(Class actionClass, Container c) return null; ExperimentUrls urlProvider = PageFlowUtil.urlProvider(ExperimentUrls.class); - ActionURL url = null; - - if (urlProvider != null) - { - url = urlProvider.getShowDataClassURL(container, getRowId()); - url.setExtraPath(container.getId()); - } + ActionURL url = urlProvider.getShowDataClassURL(container, getRowId()); + url.setExtraPath(container.getId()); Map props = new HashMap<>(); Set identifiersHi = new HashSet<>(); diff --git a/experiment/src/org/labkey/experiment/api/ExpSampleTypeImpl.java b/experiment/src/org/labkey/experiment/api/ExpSampleTypeImpl.java index 0b42122ac78..48f94b3eeed 100644 --- a/experiment/src/org/labkey/experiment/api/ExpSampleTypeImpl.java +++ b/experiment/src/org/labkey/experiment/api/ExpSampleTypeImpl.java @@ -1000,13 +1000,8 @@ public String toString() return null; ExperimentUrls urlProvider = PageFlowUtil.urlProvider(ExperimentUrls.class); - ActionURL url = null; - - if (urlProvider != null) - { - url = urlProvider.getShowSampleTypeURL(this); - url.setExtraPath(container.getId()); - } + ActionURL url = urlProvider.getShowSampleTypeURL(this); + url.setExtraPath(container.getId()); Map props = new HashMap<>(); Set identifiersHi = new HashSet<>(); diff --git a/experiment/src/org/labkey/experiment/api/property/StorageProvisionerImpl.java b/experiment/src/org/labkey/experiment/api/property/StorageProvisionerImpl.java index b799e59ad83..cd73dd58aea 100644 --- a/experiment/src/org/labkey/experiment/api/property/StorageProvisionerImpl.java +++ b/experiment/src/org/labkey/experiment/api/property/StorageProvisionerImpl.java @@ -1479,12 +1479,9 @@ else if (hardColumnNames.remove(propDescriptor.getStorageColumnName())) if (!domainReport.getErrors().isEmpty()) { ExperimentUrls urls = PageFlowUtil.urlProvider(ExperimentUrls.class); - if (null != urls) - { - ActionURL fix = urls.getRepairTypeURL(domain.getContainer()); - fix.addParameter("domainUri", domain.getTypeURI()); - domainReport.addError("See this page for more info: " + fix.getURIString()); - } + ActionURL fix = urls.getRepairTypeURL(domain.getContainer()); + fix.addParameter("domainUri", domain.getTypeURI()); + domainReport.addError("See this page for more info: " + fix.getURIString()); } } diff --git a/experiment/src/org/labkey/experiment/controllers/exp/SampleTypeContentsView.java b/experiment/src/org/labkey/experiment/controllers/exp/SampleTypeContentsView.java index a8373a2ecbe..b0b9977f7b9 100644 --- a/experiment/src/org/labkey/experiment/controllers/exp/SampleTypeContentsView.java +++ b/experiment/src/org/labkey/experiment/controllers/exp/SampleTypeContentsView.java @@ -92,7 +92,7 @@ private ActionButton getLinkToStudyButton(DataView view) if (null == StudyPublishService.get() || StudyPublishService.get().getValidPublishTargets(getUser(), InsertPermission.class).isEmpty()) return null; - StudyUrls urls = PageFlowUtil.urlProvider(StudyUrls.class); + StudyUrls urls = PageFlowUtil.urlProviderOptional(StudyUrls.class); if (urls == null) return null; diff --git a/pipeline/src/org/labkey/pipeline/status/deleteStatus.jsp b/pipeline/src/org/labkey/pipeline/status/deleteStatus.jsp index 160aba533d6..0d8bc6d953e 100644 --- a/pipeline/src/org/labkey/pipeline/status/deleteStatus.jsp +++ b/pipeline/src/org/labkey/pipeline/status/deleteStatus.jsp @@ -53,7 +53,7 @@ Container c = file.lookupContainer(); PipelineStatusUrls provider = urlProvider(PipelineStatusUrls.class); - ActionURL detailsURL = null != provider ? provider.urlDetails(c, file.getRowId()) : null; + ActionURL detailsURL = provider.urlDetails(c, file.getRowId()); sb.append("job: ").append(h(file.getDescription())).append(""); // Directory that will be deleted if they aren't any usages diff --git a/pipeline/src/org/labkey/pipeline/validators/PipelineSetupValidatorFactory.java b/pipeline/src/org/labkey/pipeline/validators/PipelineSetupValidatorFactory.java index c7118d5178c..4469447555e 100644 --- a/pipeline/src/org/labkey/pipeline/validators/PipelineSetupValidatorFactory.java +++ b/pipeline/src/org/labkey/pipeline/validators/PipelineSetupValidatorFactory.java @@ -71,15 +71,8 @@ public SiteValidationResultList runValidation(Container c, User u) SiteValidationResultList results = new SiteValidationResultList(); for (String error : errors) { - if (null != pipelineUrls) - { - SiteValidationResult result = results.addError(error, pipelineUrls.urlSetup(c)); - result.append(" Click link to go to pipeline setup for this folder."); - } - else - { - results.addError(error); - } + SiteValidationResult result = results.addError(error, pipelineUrls.urlSetup(c)); + result.append(" Click link to go to pipeline setup for this folder."); } return results; } diff --git a/query/src/org/labkey/query/DataViewsWebPartFactory.java b/query/src/org/labkey/query/DataViewsWebPartFactory.java index c7a45611626..ea220370933 100644 --- a/query/src/org/labkey/query/DataViewsWebPartFactory.java +++ b/query/src/org/labkey/query/DataViewsWebPartFactory.java @@ -124,7 +124,7 @@ public WebPartView getWebPartView(@NotNull ViewContext portalCtx, @NotNull Po if (isAdmin) { StudyService svc = StudyService.get(); - StudyUrls urls = PageFlowUtil.urlProvider(StudyUrls.class); + StudyUrls urls = PageFlowUtil.urlProviderOptional(StudyUrls.class); if (svc != null && svc.getStudy(c) != null && urls != null) menu.addChild("Manage Datasets", urls.getManageDatasetsURL(c)); menu.addChild("Manage Queries", PageFlowUtil.urlProvider(QueryUrls.class).urlSchemaBrowser(c)); diff --git a/query/src/org/labkey/query/reports/ReportViewProvider.java b/query/src/org/labkey/query/reports/ReportViewProvider.java index bb57b9231d6..edf5953719c 100644 --- a/query/src/org/labkey/query/reports/ReportViewProvider.java +++ b/query/src/org/labkey/query/reports/ReportViewProvider.java @@ -221,7 +221,7 @@ private List getViews(ViewContext context, @Nullable String schema ActionURL reportPermUrl = null; if (c.hasPermission(user, AdminPermission.class)) { - StudyUrls urls = PageFlowUtil.urlProvider(StudyUrls.class); + StudyUrls urls = PageFlowUtil.urlProviderOptional(StudyUrls.class); if (urls != null) { reportPermUrl = urls.getManageReportPermissions(c) diff --git a/study/src/org/labkey/study/assay/AssayPublishStartAction.java b/study/src/org/labkey/study/assay/AssayPublishStartAction.java index 6ef7039d9c8..4b1d9727386 100644 --- a/study/src/org/labkey/study/assay/AssayPublishStartAction.java +++ b/study/src/org/labkey/study/assay/AssayPublishStartAction.java @@ -143,8 +143,7 @@ public ModelAndView getView(AssayPublishStartForm form, BindException errors) // Copy url parameters to hidden inputs ActionURL url = urlProvider(StudyUrls.class).getLinkToStudyConfirmURL(getContainer(), _protocol); - for (Pair parameter : url.getParameters()) - inputs.add(parameter); + inputs.addAll(url.getParameters()); url.deleteParameters(); getPageConfig().setTemplate(PageConfig.Template.None); diff --git a/study/src/org/labkey/study/view/StudyToolsWebPartFactory.java b/study/src/org/labkey/study/view/StudyToolsWebPartFactory.java index 3dac9eb6029..99ae1bb7209 100644 --- a/study/src/org/labkey/study/view/StudyToolsWebPartFactory.java +++ b/study/src/org/labkey/study/view/StudyToolsWebPartFactory.java @@ -34,7 +34,7 @@ protected List getItems(ViewContext portalCtx) String iconBase = portalCtx.getContextPath() + "/study/tools/"; List items = new ArrayList<>(); - VisualizationUrls visUrlProvider = PageFlowUtil.urlProvider(VisualizationUrls.class); + VisualizationUrls visUrlProvider = PageFlowUtil.urlProviderOptional(VisualizationUrls.class); if (visUrlProvider != null) { URLHelper timeChartURL = visUrlProvider.getTimeChartDesignerURL(portalCtx.getContainer());