001/*
002 * The contents of this file are subject to the license and copyright
003 * detailed in the LICENSE and NOTICE files at the root of the source
004 * tree.
005 */
006package org.fcrepo.persistence.ocfl;
007
008import java.io.IOException;
009import javax.inject.Inject;
010import javax.servlet.Filter;
011import javax.servlet.FilterChain;
012import javax.servlet.ServletException;
013import javax.servlet.ServletRequest;
014import javax.servlet.ServletResponse;
015import javax.servlet.http.HttpServletRequest;
016import javax.servlet.http.HttpServletResponse;
017
018/**
019 * Filter which blocks requests if the repository initialization is ongoing
020 *
021 * @author mikejritter
022 */
023public class RepositoryInitializationFilter implements Filter {
024
025    @Inject
026    private RepositoryInitializer initializer;
027
028    @Override
029    public void doFilter(final ServletRequest request, final ServletResponse response, final FilterChain chain)
030        throws IOException, ServletException {
031        if (!(request instanceof HttpServletRequest) || !(response instanceof HttpServletResponse)) {
032            throw new ServletException("Unable to handle non http request");
033        }
034
035        final var httpResponse = (HttpServletResponse) response;
036        if (!initializer.isInitializationComplete()) {
037            httpResponse.sendError(HttpServletResponse.SC_SERVICE_UNAVAILABLE);
038            return;
039        }
040
041        chain.doFilter(request, response);
042    }
043}