blob: a3c15b33e2f8925ecdbb44ac7ea5b91281266852 [file] [log] [blame]
Dave Borowitz9de65952012-08-13 16:09:45 -07001// Copyright 2012 Google Inc. All Rights Reserved.
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15package com.google.gitiles;
16
Dave Borowitz6ed598f2014-04-17 10:09:50 -070017import com.google.gitiles.blame.BlameCache;
18
Dave Borowitz9de65952012-08-13 16:09:45 -070019import org.eclipse.jgit.http.server.glue.MetaServlet;
Dave Borowitz03397692012-12-18 17:11:16 -080020import org.eclipse.jgit.lib.Config;
Dave Borowitz9de65952012-08-13 16:09:45 -070021import org.eclipse.jgit.transport.resolver.RepositoryResolver;
22
23import java.util.Enumeration;
24
Dave Borowitz03397692012-12-18 17:11:16 -080025import javax.annotation.Nullable;
Dave Borowitz9de65952012-08-13 16:09:45 -070026import javax.servlet.Filter;
27import javax.servlet.FilterConfig;
28import javax.servlet.ServletConfig;
29import javax.servlet.ServletContext;
30import javax.servlet.ServletException;
31import javax.servlet.http.HttpServlet;
32import javax.servlet.http.HttpServletRequest;
33
34/**
35 * Servlet to serve Gitiles.
36 * <p>
37 * This servlet can either be constructed manually with its dependencies, or
38 * configured to use default implementations for the Gitiles interfaces. To
39 * configure the defaults, you must provide a single init parameter
40 * "configPath", which is the path to a git config file containing additional
41 * configuration.
42 */
43public class GitilesServlet extends MetaServlet {
Chad Horohoead23f142012-11-12 09:45:39 -080044 private static final long serialVersionUID = 1L;
45
Dave Borowitz9de65952012-08-13 16:09:45 -070046 /** The prefix from which static resources are served. */
47 public static final String STATIC_PREFIX = "/+static/";
48
Dave Borowitz03397692012-12-18 17:11:16 -080049 public GitilesServlet(
David Pursehouse49164f62013-10-02 18:13:33 +090050 Config config,
Dave Borowitz03397692012-12-18 17:11:16 -080051 @Nullable Renderer renderer,
52 @Nullable GitilesUrls urls,
53 @Nullable GitilesAccess.Factory accessFactory,
54 @Nullable RepositoryResolver<HttpServletRequest> resolver,
Dave Borowitz14ce8282012-12-20 14:08:25 -080055 @Nullable VisibilityCache visibilityCache,
Dave Borowitzd91bdf72013-01-10 20:07:32 -080056 @Nullable TimeCache timeCache,
Dave Borowitz86462df2014-02-03 14:23:57 -080057 @Nullable BlameCache blameCache,
Dave Borowitzd91bdf72013-01-10 20:07:32 -080058 @Nullable GitwebRedirectFilter gitwebRedirect) {
Dave Borowitz14ce8282012-12-20 14:08:25 -080059 super(new GitilesFilter(
Dave Borowitz86462df2014-02-03 14:23:57 -080060 config, renderer, urls, accessFactory, resolver, visibilityCache, timeCache, blameCache,
Dave Borowitzd91bdf72013-01-10 20:07:32 -080061 gitwebRedirect));
Dave Borowitz9de65952012-08-13 16:09:45 -070062 }
63
64 public GitilesServlet() {
65 super(new GitilesFilter());
66 }
67
68 @Override
69 protected GitilesFilter getDelegateFilter() {
70 return (GitilesFilter) super.getDelegateFilter();
71 }
72
73 @Override
74 public void init(final ServletConfig config) throws ServletException {
75 getDelegateFilter().init(new FilterConfig() {
76 @Override
77 public String getFilterName() {
78 return getDelegateFilter().getClass().getName();
79 }
80
81 @Override
82 public String getInitParameter(String name) {
83 return config.getInitParameter(name);
84 }
85
86 @SuppressWarnings("rawtypes")
87 @Override
88 public Enumeration getInitParameterNames() {
89 return config.getInitParameterNames();
90 }
91
92 @Override
93 public ServletContext getServletContext() {
94 return config.getServletContext();
95 }
96 });
97 }
98
99 /**
100 * Add a custom filter for a view.
101 * <p>
102 * Must be called before initializing the servlet.
103 *
104 * @param view view type.
105 * @param filter filter.
106 */
107 public void addFilter(GitilesView.Type view, Filter filter) {
108 getDelegateFilter().addFilter(view, filter);
109 }
110
111 /**
112 * Set a custom handler for a view.
113 * <p>
114 * Must be called before initializing the servlet.
115 *
116 * @param view view type.
117 * @param handler handler.
118 */
119 public void setHandler(GitilesView.Type view, HttpServlet handler) {
120 getDelegateFilter().setHandler(view, handler);
121 }
122
123 public BaseServlet getDefaultHandler(GitilesView.Type view) {
124 return getDelegateFilter().getDefaultHandler(view);
125 }
126}