2013-03-14 12:00:28 +01:00
|
|
|
package org.gcube.datatransfer.resolver.http;
|
|
|
|
|
|
|
|
import java.io.IOException;
|
|
|
|
import java.io.InputStream;
|
|
|
|
import java.io.OutputStream;
|
|
|
|
import java.net.URL;
|
|
|
|
import java.net.URLConnection;
|
2013-04-25 00:01:46 +02:00
|
|
|
import java.net.URLStreamHandler;
|
2013-03-14 12:00:28 +01:00
|
|
|
|
|
|
|
|
|
|
|
import javax.servlet.ServletConfig;
|
|
|
|
import javax.servlet.ServletException;
|
|
|
|
import javax.servlet.http.HttpServlet;
|
|
|
|
import javax.servlet.http.HttpServletRequest;
|
|
|
|
import javax.servlet.http.HttpServletResponse;
|
|
|
|
|
|
|
|
import org.apache.commons.io.IOUtils;
|
|
|
|
import org.gcube.contentmanager.storageclient.model.protocol.smp.Handler;
|
2013-04-25 00:01:46 +02:00
|
|
|
import org.gcube.contentmanager.storageclient.model.protocol.smp.SMPURLConnection;
|
2013-03-14 12:00:28 +01:00
|
|
|
import org.slf4j.Logger;
|
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
*
|
2013-03-14 12:12:49 +01:00
|
|
|
* @author Andrea Manzi(CERN)
|
2013-03-14 12:00:28 +01:00
|
|
|
*
|
|
|
|
*/
|
|
|
|
public class HttpResolver extends HttpServlet {
|
2013-07-03 13:07:24 +02:00
|
|
|
|
|
|
|
String uri =null;
|
|
|
|
String fileName =null;
|
|
|
|
String contentType =null;
|
2013-03-14 12:00:28 +01:00
|
|
|
|
|
|
|
private static final long serialVersionUID = 1L;
|
2013-03-14 12:06:40 +01:00
|
|
|
|
2013-03-14 12:00:28 +01:00
|
|
|
/** The logger. */
|
|
|
|
private static final Logger logger = LoggerFactory.getLogger(HttpResolver.class);
|
|
|
|
|
|
|
|
public void init(ServletConfig conf) throws ServletException {
|
2013-03-14 12:06:40 +01:00
|
|
|
Handler.activateProtocol();
|
2013-03-14 12:00:28 +01:00
|
|
|
super.init(conf);
|
2013-03-14 12:06:40 +01:00
|
|
|
|
2013-03-14 12:00:28 +01:00
|
|
|
}
|
2013-03-14 12:06:40 +01:00
|
|
|
|
2013-03-14 12:00:28 +01:00
|
|
|
protected void doGet(HttpServletRequest request,
|
|
|
|
HttpServletResponse response) throws IOException {
|
2013-04-25 00:01:46 +02:00
|
|
|
|
2013-03-14 12:00:28 +01:00
|
|
|
|
|
|
|
logger.info("The http session id is: " + request.getSession().getId());
|
|
|
|
|
2013-07-03 13:07:24 +02:00
|
|
|
uri = request.getParameter("smp-uri");
|
2013-03-14 12:06:40 +01:00
|
|
|
|
2013-03-14 12:12:49 +01:00
|
|
|
if (uri == null || uri.equals("")) {
|
|
|
|
logger.debug("URI not found");
|
|
|
|
response.sendError(404);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2013-07-03 13:07:24 +02:00
|
|
|
fileName = request.getParameter("fileName");
|
|
|
|
|
|
|
|
|
|
|
|
if (fileName == null || fileName.equals("")) {
|
|
|
|
logger.debug("fileName not found");
|
|
|
|
fileName = null;
|
|
|
|
}
|
|
|
|
|
|
|
|
contentType = request.getParameter("contentType");
|
|
|
|
|
|
|
|
if (contentType == null || contentType.equals("")) {
|
|
|
|
logger.debug("contentType not found");
|
|
|
|
contentType = null;
|
|
|
|
}
|
|
|
|
|
2013-03-14 12:06:40 +01:00
|
|
|
uri = uri.replace(" ","+");//the char + is removed when the servlet is doing unescaping of the query paramenters, we just put it back
|
|
|
|
|
2013-03-14 12:00:28 +01:00
|
|
|
logger.debug("URI = "+ uri);
|
2013-03-14 12:06:40 +01:00
|
|
|
|
|
|
|
try {
|
|
|
|
|
|
|
|
|
|
|
|
OutputStream out = response.getOutputStream();
|
|
|
|
|
2013-07-03 13:07:24 +02:00
|
|
|
if (fileName != null)
|
|
|
|
response.addHeader("content-disposition", "attachment; filename=" +fileName);
|
|
|
|
else
|
|
|
|
response.addHeader("content-disposition", "attachment; filename=fromStorageManager");
|
|
|
|
|
|
|
|
if (contentType!= null)
|
|
|
|
response.setContentType(contentType);
|
|
|
|
else
|
|
|
|
response.setContentType("unknown/unknown");
|
|
|
|
|
2013-04-25 00:01:46 +02:00
|
|
|
|
2013-03-14 12:06:40 +01:00
|
|
|
|
2013-04-25 00:01:46 +02:00
|
|
|
URL url = new URL(null, uri, new URLStreamHandler() {
|
|
|
|
|
|
|
|
@Override
|
|
|
|
protected URLConnection openConnection(URL u) throws IOException {
|
|
|
|
return new SMPURLConnection(u);
|
|
|
|
}
|
|
|
|
});
|
2013-03-14 12:00:28 +01:00
|
|
|
|
2013-03-14 12:06:40 +01:00
|
|
|
URLConnection uc = null;
|
|
|
|
|
|
|
|
InputStream in = null;
|
2013-03-14 12:00:28 +01:00
|
|
|
|
2013-03-14 12:06:40 +01:00
|
|
|
try {
|
|
|
|
uc = ( URLConnection ) url.openConnection ( );
|
|
|
|
in = uc.getInputStream();
|
|
|
|
}
|
|
|
|
catch(Exception e){
|
2013-03-14 12:12:49 +01:00
|
|
|
response.sendError(404);
|
|
|
|
logger.error("Exception:", e);
|
|
|
|
return;
|
2013-03-14 12:00:28 +01:00
|
|
|
}
|
2013-03-14 12:06:40 +01:00
|
|
|
|
|
|
|
|
|
|
|
IOUtils.copy(in, out);
|
2013-03-14 12:00:28 +01:00
|
|
|
|
2013-03-14 12:06:40 +01:00
|
|
|
out.flush();
|
|
|
|
out.close();
|
|
|
|
in.close();
|
|
|
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
e.printStackTrace();
|
|
|
|
logger.error("Exception:", e);
|
2013-03-14 12:12:49 +01:00
|
|
|
response.sendError(404);
|
|
|
|
return;
|
2013-03-14 12:06:40 +01:00
|
|
|
}
|
|
|
|
|
2013-03-14 12:00:28 +01:00
|
|
|
}
|
2013-03-14 12:06:40 +01:00
|
|
|
|
2013-03-14 12:00:28 +01:00
|
|
|
}
|