/*
* Copyright (C) 2009-2010, Google Inc. and others
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Distribution License v. 1.0 which is available at
* https://www.eclipse.org/org/documents/edl-v10.php.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
package org.eclipse.jgit.http.server.glue;
import java.io.IOException;
import java.util.Enumeration;
import java.util.NoSuchElementException;
import java.util.Set;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Encapsulates the entire serving stack for a single URL.
*
* Subclasses provide the implementation of {@link #match(HttpServletRequest)},
* which is called by {@link MetaServlet} in registration order to determine the
* pipeline that will be used to handle a request.
*
* The very bottom of each pipeline is a single {@link HttpServlet} that will
* handle producing the response for this pipeline's URL. {@link Filter}s may
* also be registered and applied around the servlet's processing, to manage
* request attributes, set standard response headers, or completely override the
* response generation.
*/
abstract class UrlPipeline {
/** Filters to apply around {@link #servlet}; may be empty but never null. */
private final Filter[] filters;
/** Instance that must generate the response; never null. */
private final HttpServlet servlet;
UrlPipeline(Filter[] filters, HttpServlet servlet) {
this.filters = filters;
this.servlet = servlet;
}
/**
* Initialize all contained filters and servlets.
*
* @param context
* the servlet container context our {@link MetaServlet} is
* running within.
* @param inited
* (input/output) the set of filters and servlets which
* have already been initialized within the container context. If
* those same instances appear in this pipeline they are not
* initialized a second time. Filters and servlets that are first
* initialized by this pipeline will be added to this set.
* @throws ServletException
* a filter or servlet is unable to initialize.
*/
void init(ServletContext context, Set