package com.fyp.widerst.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.fyp.widerst.Constants;
import com.fyp.widerst.entity.DataWhole;
import com.fyp.widerst.util.DbHelper;
import com.google.appengine.api.blobstore.BlobInfo;
import com.google.appengine.api.blobstore.BlobInfoFactory;
import com.google.appengine.api.blobstore.BlobKey;
import com.google.appengine.api.blobstore.BlobstoreService;
import com.google.appengine.api.blobstore.BlobstoreServiceFactory;
@SuppressWarnings("serial")
public class WholeFileServer extends HttpServlet {
private final BlobstoreService blobStoreService = BlobstoreServiceFactory.getBlobstoreService();
private final BlobInfoFactory blobInfoFactory = new BlobInfoFactory();
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String dwKey = req.getParameter(Constants.DATAWHOLE_KEY_PARAM);
if (null == dwKey) {
resp.setStatus(HttpServletResponse.SC_BAD_REQUEST);
return;
}
DataWhole dataWhole = DbHelper.findDataWholeByKey(req.getParameter(Constants.DATAWHOLE_KEY_PARAM));
/* If a DataWhole couldn't be found then reply with a BAD_REQUEST status */
if (null == dataWhole) {
resp.setStatus(HttpServletResponse.SC_BAD_REQUEST);
return;
}
final BlobKey blobKey = dataWhole.getBlobKey();
/* If the DataWhole does not have a BlobKey then reply with a NO_CONTENT status */
if (null == blobKey) {
resp.setStatus(HttpServletResponse.SC_NO_CONTENT);
return;
}
final BlobInfo blobInfo = blobInfoFactory.loadBlobInfo(blobKey);
resp.addHeader("Content-Length", Long.toString(blobInfo.getSize()));
/* Server the Blob to the client */
blobStoreService.serve(blobKey, resp);
}
}