Skip to content

Commit db394cc

Browse files
committed
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
1 parent 4a6f1be commit db394cc

File tree

2 files changed

+17
-7
lines changed

2 files changed

+17
-7
lines changed

gitiles-servlet/src/main/java/com/google/gitiles/BaseServlet.java

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,6 @@
5252
/** Base servlet class for Gitiles servlets that serve Soy templates. */
5353
public abstract class BaseServlet extends HttpServlet {
5454
private static final long serialVersionUID = 1L;
55-
private static final String ACCESS_ATTRIBUTE = BaseServlet.class.getName() + "/GitilesAccess";
5655
private static final String DATA_ATTRIBUTE = BaseServlet.class.getName() + "/Data";
5756
private static final String STREAMING_ATTRIBUTE = BaseServlet.class.getName() + "/Streaming";
5857

@@ -366,12 +365,7 @@ protected void renderTextError(
366365
}
367366

368367
protected GitilesAccess getAccess(HttpServletRequest req) {
369-
GitilesAccess access = (GitilesAccess) req.getAttribute(ACCESS_ATTRIBUTE);
370-
if (access == null) {
371-
access = accessFactory.forRequest(req);
372-
req.setAttribute(ACCESS_ATTRIBUTE, access);
373-
}
374-
return access;
368+
return GitilesAccess.getAccess(req, accessFactory);
375369
}
376370

377371
protected void setCacheHeaders(HttpServletRequest req, HttpServletResponse res) {

gitiles-servlet/src/main/java/com/google/gitiles/GitilesAccess.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
import java.io.IOException;
1818
import java.util.Map;
19+
import java.util.Optional;
1920
import java.util.Set;
2021
import javax.annotation.Nullable;
2122
import javax.servlet.http.HttpServletRequest;
@@ -30,6 +31,21 @@
3031
* information about the host and repository.
3132
*/
3233
public interface GitilesAccess {
34+
/** Access for the current request, if it has been initialized. */
35+
public static Optional<GitilesAccess> getAccess(HttpServletRequest req) {
36+
return Optional.ofNullable((GitilesAccess) req.getAttribute(GitilesAccess.class.getName()));
37+
}
38+
39+
/** Access for the current request. */
40+
public static GitilesAccess getAccess(HttpServletRequest req, Factory factory) {
41+
GitilesAccess access = getAccess(req).orElse(null);
42+
if (access == null) {
43+
access = factory.forRequest(req);
44+
req.setAttribute(GitilesAccess.class.getName(), access);
45+
}
46+
return access;
47+
}
48+
3349
/** Factory for per-request access. */
3450
public interface Factory {
3551
GitilesAccess forRequest(HttpServletRequest req);

0 commit comments

Comments
 (0)