blob: 472f0a8ef7bc485ce62d622fadf8d23b6634392d [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
17import org.eclipse.jgit.http.server.glue.MetaServlet;
Dave Borowitz03397692012-12-18 17:11:16 -080018import org.eclipse.jgit.lib.Config;
Dave Borowitz9de65952012-08-13 16:09:45 -070019import org.eclipse.jgit.transport.resolver.RepositoryResolver;
20
21import java.util.Enumeration;
22
Dave Borowitz03397692012-12-18 17:11:16 -080023import javax.annotation.Nullable;
Dave Borowitz9de65952012-08-13 16:09:45 -070024import javax.servlet.Filter;
25import javax.servlet.FilterConfig;
26import javax.servlet.ServletConfig;
27import javax.servlet.ServletContext;
28import javax.servlet.ServletException;
29import javax.servlet.http.HttpServlet;
30import javax.servlet.http.HttpServletRequest;
31
32/**
33 * Servlet to serve Gitiles.
34 * <p>
35 * This servlet can either be constructed manually with its dependencies, or
36 * configured to use default implementations for the Gitiles interfaces. To
37 * configure the defaults, you must provide a single init parameter
38 * "configPath", which is the path to a git config file containing additional
39 * configuration.
40 */
41public class GitilesServlet extends MetaServlet {
Chad Horohoead23f142012-11-12 09:45:39 -080042 private static final long serialVersionUID = 1L;
43
Dave Borowitz9de65952012-08-13 16:09:45 -070044 /** The prefix from which static resources are served. */
45 public static final String STATIC_PREFIX = "/+static/";
46
Dave Borowitz03397692012-12-18 17:11:16 -080047 public GitilesServlet(
48 @Nullable Config config,
49 @Nullable Renderer renderer,
50 @Nullable GitilesUrls urls,
51 @Nullable GitilesAccess.Factory accessFactory,
52 @Nullable RepositoryResolver<HttpServletRequest> resolver,
Dave Borowitz14ce8282012-12-20 14:08:25 -080053 @Nullable VisibilityCache visibilityCache,
Dave Borowitzd91bdf72013-01-10 20:07:32 -080054 @Nullable TimeCache timeCache,
55 @Nullable GitwebRedirectFilter gitwebRedirect) {
Dave Borowitz14ce8282012-12-20 14:08:25 -080056 super(new GitilesFilter(
Dave Borowitzd91bdf72013-01-10 20:07:32 -080057 config, renderer, urls, accessFactory, resolver, visibilityCache, timeCache,
58 gitwebRedirect));
Dave Borowitz9de65952012-08-13 16:09:45 -070059 }
60
61 public GitilesServlet() {
62 super(new GitilesFilter());
63 }
64
65 @Override
66 protected GitilesFilter getDelegateFilter() {
67 return (GitilesFilter) super.getDelegateFilter();
68 }
69
70 @Override
71 public void init(final ServletConfig config) throws ServletException {
72 getDelegateFilter().init(new FilterConfig() {
73 @Override
74 public String getFilterName() {
75 return getDelegateFilter().getClass().getName();
76 }
77
78 @Override
79 public String getInitParameter(String name) {
80 return config.getInitParameter(name);
81 }
82
83 @SuppressWarnings("rawtypes")
84 @Override
85 public Enumeration getInitParameterNames() {
86 return config.getInitParameterNames();
87 }
88
89 @Override
90 public ServletContext getServletContext() {
91 return config.getServletContext();
92 }
93 });
94 }
95
96 /**
97 * Add a custom filter for a view.
98 * <p>
99 * Must be called before initializing the servlet.
100 *
101 * @param view view type.
102 * @param filter filter.
103 */
104 public void addFilter(GitilesView.Type view, Filter filter) {
105 getDelegateFilter().addFilter(view, filter);
106 }
107
108 /**
109 * Set a custom handler for a view.
110 * <p>
111 * Must be called before initializing the servlet.
112 *
113 * @param view view type.
114 * @param handler handler.
115 */
116 public void setHandler(GitilesView.Type view, HttpServlet handler) {
117 getDelegateFilter().setHandler(view, handler);
118 }
119
120 public BaseServlet getDefaultHandler(GitilesView.Type view) {
121 return getDelegateFilter().getDefaultHandler(view);
122 }
123}