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.MediaResourceAPI; import org.swordapp.server.servlets.SwordServlet; public class SWORDv2MediaResourceServlet extends SwordServlet { @Inject MediaResourceManagerImpl mediaResourceManagerImpl; /** * @todo Should we inject this in all the SWORDv2 Servlets? Added here so * that we can inject SettingsServiceBean in SwordConfigurationImpl. */ @Inject SwordConfigurationImpl swordConfigurationImpl; protected MediaResourceAPI api; private final ReentrantLock lock = new ReentrantLock(); @Override public void init() throws ServletException { super.init(); // load the api this.api = new MediaResourceAPI(mediaResourceManagerImpl, swordConfigurationImpl); } @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { try { lock.lock(); mediaResourceManagerImpl.setHttpRequest(req); this.api.get(req, resp); mediaResourceManagerImpl.setHttpRequest(null); } finally { lock.unlock(); } } @Override protected void doHead(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { try { lock.lock(); mediaResourceManagerImpl.setHttpRequest(req); this.api.head(req, resp); mediaResourceManagerImpl.setHttpRequest(null); } finally { lock.unlock(); } } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { try { lock.lock(); mediaResourceManagerImpl.setHttpRequest(req); this.api.post(req, resp); mediaResourceManagerImpl.setHttpRequest(null); } finally { lock.unlock(); } } @Override protected void doPut(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { try { lock.lock(); mediaResourceManagerImpl.setHttpRequest(req); this.api.put(req, resp); mediaResourceManagerImpl.setHttpRequest(null); } finally { lock.unlock(); } } @Override protected void doDelete(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { try { lock.lock(); mediaResourceManagerImpl.setHttpRequest(req); this.api.delete(req, resp); mediaResourceManagerImpl.setHttpRequest(null); } finally { lock.unlock(); } } }