package edu.harvard.iq.dataverse.api.datadeposit; import java.io.IOException; import java.util.concurrent.locks.ReentrantLock; import javax.inject.Inject; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.swordapp.server.ContainerAPI; import org.swordapp.server.ContainerManager; import org.swordapp.server.StatementManager; import org.swordapp.server.servlets.SwordServlet; public class SWORDv2ContainerServlet extends SwordServlet { @Inject ContainerManagerImpl containerManagerImpl; @Inject StatementManagerImpl statementManagerImpl; private ContainerManager cm; private ContainerAPI api; private StatementManager sm; private final ReentrantLock lock = new ReentrantLock(); @Override public void init() throws ServletException { super.init(); // load the container manager implementation this.cm = containerManagerImpl; // load the statement manager implementation this.sm = statementManagerImpl; // initialise the underlying servlet processor this.api = new ContainerAPI(this.cm, this.sm, this.config); } @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { try { lock.lock(); setRequest(req); this.api.get(req, resp); setRequest(null); } finally { lock.unlock(); } } @Override protected void doHead(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { try { lock.lock(); setRequest(req); this.api.head(req, resp); setRequest(null); } finally { lock.unlock(); } } @Override protected void doPut(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { try { lock.lock(); setRequest(req); this.api.put(req, resp); setRequest(null); } finally { lock.unlock(); } } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { try { lock.lock(); setRequest(req); this.api.post(req, resp); setRequest(null); } finally { lock.unlock(); } } @Override protected void doDelete(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { try { lock.lock(); setRequest(req); this.api.delete(req, resp); setRequest(null); } finally { lock.unlock(); } } private void setRequest( HttpServletRequest r ) { containerManagerImpl.setHttpRequest(r); statementManagerImpl.setHttpRequest(r); } }