Expose GitilesAccess.getAccess on interface These helpers allow callers to obtain the GitilesAccess outside of the context of being a subclass of BaseServlet. The Optional form exists for callers that can reasonably assume some prior logic has already setup the GitilesAccess for the request. Change-Id: Ie28bd75746b0c6f1d2f425b964ca9743fad1c74b
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/BaseServlet.java b/gitiles-servlet/src/main/java/com/google/gitiles/BaseServlet.java index 387a15f..bf19e88 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/BaseServlet.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/BaseServlet.java
@@ -52,7 +52,6 @@ /** Base servlet class for Gitiles servlets that serve Soy templates. */ public abstract class BaseServlet extends HttpServlet { private static final long serialVersionUID = 1L; - private static final String ACCESS_ATTRIBUTE = BaseServlet.class.getName() + "/GitilesAccess"; private static final String DATA_ATTRIBUTE = BaseServlet.class.getName() + "/Data"; private static final String STREAMING_ATTRIBUTE = BaseServlet.class.getName() + "/Streaming"; @@ -366,12 +365,7 @@ } protected GitilesAccess getAccess(HttpServletRequest req) { - GitilesAccess access = (GitilesAccess) req.getAttribute(ACCESS_ATTRIBUTE); - if (access == null) { - access = accessFactory.forRequest(req); - req.setAttribute(ACCESS_ATTRIBUTE, access); - } - return access; + return GitilesAccess.getAccess(req, accessFactory); } protected void setCacheHeaders(HttpServletRequest req, HttpServletResponse res) {
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/GitilesAccess.java b/gitiles-servlet/src/main/java/com/google/gitiles/GitilesAccess.java index ec3b5ff..505098a 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/GitilesAccess.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/GitilesAccess.java
@@ -16,6 +16,7 @@ import java.io.IOException; import java.util.Map; +import java.util.Optional; import java.util.Set; import javax.annotation.Nullable; import javax.servlet.http.HttpServletRequest; @@ -30,6 +31,21 @@ * information about the host and repository. */ public interface GitilesAccess { + /** Access for the current request, if it has been initialized. */ + public static Optional<GitilesAccess> getAccess(HttpServletRequest req) { + return Optional.ofNullable((GitilesAccess) req.getAttribute(GitilesAccess.class.getName())); + } + + /** Access for the current request. */ + public static GitilesAccess getAccess(HttpServletRequest req, Factory factory) { + GitilesAccess access = getAccess(req).orElse(null); + if (access == null) { + access = factory.forRequest(req); + req.setAttribute(GitilesAccess.class.getName(), access); + } + return access; + } + /** Factory for per-request access. */ public interface Factory { GitilesAccess forRequest(HttpServletRequest req);