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}