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 void registerUrlProvider(Class inter, Class innerClass)
+ public void registerUrlProvider(Class inter, Class extends UrlProvider> 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 extends Controller> 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 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 boolean hasUrlProvider(Class inter)
+ /**
+ * Returns a specified 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;
ListUrlProvider interface
* implementation, for use in writing URLs implemented in other modules.
@@ -435,7 +429,7 @@ public 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