/*
* GNU GENERAL PUBLIC LICENSE, Version 3, 29 June 2007
*/
package hudson.gwtmarketplace.server;
import hudson.gwtmarketplace.client.exception.InvalidAccessException;
import hudson.gwtmarketplace.client.model.Product;
import hudson.gwtmarketplace.domain.manager.ProductManager;
import hudson.gwtmarketplace.server.util.ImageUtil;
import java.io.IOException;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.google.appengine.api.blobstore.BlobKey;
import com.google.appengine.api.blobstore.BlobstoreService;
import com.google.appengine.api.blobstore.BlobstoreServiceFactory;
import com.google.appengine.api.users.User;
import com.google.appengine.api.users.UserServiceFactory;
public class BlobHandlerServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private static transient ProductManager productMgr = new ProductManager();
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
BlobstoreService service = BlobstoreServiceFactory.getBlobstoreService();
String rtnKey = null;
Map<String, BlobKey> blobs = service.getUploadedBlobs(req);
String id = req.getParameter("key");
User user = UserServiceFactory.getUserService().getCurrentUser();
Product product = productMgr.getById(Long.parseLong(id));
if (null != user) {
if (null != product && product.getUserId().equals(user.getUserId())) {
if (blobs.size() == 1) {
BlobKey origKey = blobs.values().iterator().next();
byte[] arr = ImageUtil.iconize(origKey.getKeyString());
if (null != arr) {
product.setIconKey(origKey.getKeyString());
try {
productMgr.update(product);
rtnKey = product.getIconKey();
}
catch (InvalidAccessException e) {
service.delete(origKey);
}
}
}
else {
// bad transmission
for (BlobKey blobKey : blobs.values()) {
service.delete(blobKey);
}
}
}
else {
// bad transmission
for (BlobKey blobKey : blobs.values()) {
service.delete(blobKey);
}
}
}
if (null != rtnKey)
resp.getOutputStream().write(rtnKey.getBytes());
}
}