ServletBinderImpl.java

  1. /*
  2.  * Copyright (C) 2009-2010, Google Inc. and others
  3.  *
  4.  * This program and the accompanying materials are made available under the
  5.  * terms of the Eclipse Distribution License v. 1.0 which is available at
  6.  * https://www.eclipse.org/org/documents/edl-v10.php.
  7.  *
  8.  * SPDX-License-Identifier: BSD-3-Clause
  9.  */

  10. package org.eclipse.jgit.http.server.glue;

  11. import java.util.ArrayList;
  12. import java.util.List;

  13. import javax.servlet.Filter;
  14. import javax.servlet.http.HttpServlet;
  15. import javax.servlet.http.HttpServletResponse;

  16. import org.eclipse.jgit.http.server.HttpServerText;

  17. abstract class ServletBinderImpl implements ServletBinder {
  18.     private final List<Filter> filters;

  19.     private HttpServlet httpServlet;

  20.     ServletBinderImpl() {
  21.         this.filters = new ArrayList<>();
  22.     }

  23.     /** {@inheritDoc} */
  24.     @Override
  25.     public ServletBinder through(Filter filter) {
  26.         if (filter == null)
  27.             throw new NullPointerException(HttpServerText.get().filterMustNotBeNull);
  28.         filters.add(filter);
  29.         return this;
  30.     }

  31.     /** {@inheritDoc} */
  32.     @Override
  33.     public void with(HttpServlet servlet) {
  34.         if (servlet == null)
  35.             throw new NullPointerException(HttpServerText.get().servletMustNotBeNull);
  36.         if (httpServlet != null)
  37.             throw new IllegalStateException(HttpServerText.get().servletWasAlreadyBound);
  38.         httpServlet = servlet;
  39.     }

  40.     /**
  41.      * Get the servlet
  42.      *
  43.      * @return the configured servlet, or singleton returning 404 if none.
  44.      */
  45.     protected HttpServlet getServlet() {
  46.         if (httpServlet != null) {
  47.             return httpServlet;
  48.         }
  49.         return new ErrorServlet(HttpServletResponse.SC_NOT_FOUND);
  50.     }

  51.     /**
  52.      * Get filters
  53.      *
  54.      * @return the configured filters; zero-length array if none.
  55.      */
  56.     protected Filter[] getFilters() {
  57.         return filters.toArray(new Filter[0]);
  58.     }

  59.     /** @return the pipeline that matches and executes this chain. */
  60.     abstract UrlPipeline create();
  61. }