Advertisement
slugmandrew

slugmandrew's BlobServiceImpl

Apr 9th, 2013
47
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5 6.00 KB | None | 0 0
  1. package com.utilitiessavings.testapp.server;
  2.  
  3. import java.io.IOException;
  4. import java.util.Iterator;
  5. import java.util.LinkedList;
  6. import java.util.List;
  7.  
  8. import javax.inject.Singleton;
  9. import javax.servlet.ServletException;
  10. import javax.servlet.http.HttpServletRequest;
  11. import javax.servlet.http.HttpServletResponse;
  12.  
  13. import com.google.appengine.api.blobstore.BlobInfo;
  14. import com.google.appengine.api.blobstore.BlobInfoFactory;
  15. import com.google.appengine.api.blobstore.BlobKey;
  16. import com.google.appengine.api.blobstore.BlobstoreService;
  17. import com.google.appengine.api.blobstore.BlobstoreServiceFactory;
  18. import com.google.appengine.api.datastore.DatastoreService;
  19. import com.google.appengine.api.datastore.DatastoreServiceFactory;
  20. import com.google.appengine.api.datastore.Entity;
  21. import com.google.appengine.api.datastore.EntityNotFoundException;
  22. import com.google.appengine.api.datastore.Key;
  23. import com.google.appengine.api.datastore.KeyFactory;
  24. import com.google.appengine.api.utils.SystemProperty;
  25. import com.google.gwt.user.server.rpc.RemoteServiceServlet;
  26. import com.google.inject.Inject;
  27. import com.utilitiessavings.testapp.client.service.BlobService;
  28. import com.utilitiessavings.testapp.shared.BlobFile;
  29.  
  30. @Singleton
  31. @SuppressWarnings("serial")
  32. public class BlobServiceImpl extends RemoteServiceServlet implements BlobService
  33. {
  34.     // Start a GAE BlobstoreService, DatastoreService and Objectify session
  35.     BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService();
  36.     DatastoreService datastoreService = DatastoreServiceFactory.getDatastoreService();
  37.    
  38.     private Dao dao;
  39.    
  40.     @Inject
  41.     public BlobServiceImpl(Dao dao)
  42.     {
  43.         super();
  44.        
  45.         System.out.println("BlobServiceImpl constructed");
  46.        
  47.         this.dao = dao;
  48.     }
  49.    
  50. //  @Override
  51. //  public void init() throws ServletException
  52. //  {
  53. //      super.init();
  54. //     
  55. //      System.out.println("BlobServiceImpl init");
  56. //  }
  57.    
  58.     @Override
  59.     public void deleteAllBlobs()
  60.     {
  61.         // get blobinfos and delete all
  62.         Iterator<BlobInfo> blobIterator = new BlobInfoFactory().queryBlobInfos();
  63.         while(blobIterator.hasNext())
  64.         {
  65.             blobstoreService.delete(blobIterator.next().getBlobKey());
  66.         }
  67.        
  68.         // get BlobFiles and delete all
  69.         dao.emptyDatastoreOfType(BlobFile.class);
  70.     }
  71.    
  72.     @Override
  73.     public void deleteBlob(String id)
  74.     {
  75.         // convert id to Long
  76.         Long lid = Long.parseLong(id); // 51
  77.        
  78.         // get BlobFile
  79.         // BlobFile blobFile = ofy().load().type(BlobFile.class).id(lid).get();
  80.         BlobFile blobFile = dao.get(BlobFile.class, lid);
  81.        
  82.         // get BlobInfo
  83.         BlobInfo blobInfo = new BlobInfoFactory(this.datastoreService).loadBlobInfo(new BlobKey(blobFile.getBlobKey()));
  84.        
  85.         // delete BlobInfo
  86.         blobstoreService.delete(blobInfo.getBlobKey());
  87.        
  88.         // delete the BlobFile
  89.         dao.delete(blobFile);
  90.         // dao.ofy.delete(BlobFile.class, lid);
  91.     }
  92.    
  93.     @Override
  94.     public List<String> getBlobs()
  95.     {
  96.         List<String> blobsStrings = new LinkedList<String>();
  97.         Iterator<BlobInfo> blobIterator = new BlobInfoFactory().queryBlobInfos();
  98.        
  99.         while(blobIterator.hasNext())
  100.         {
  101.             blobsStrings.add(blobIterator.next().getBlobKey().getKeyString());
  102.         }
  103.        
  104.         return blobsStrings;
  105.     }
  106.    
  107.     // Generate a Blobstore Upload URL from the GAE BlobstoreService
  108.     @Override
  109.     public String getBlobStoreUploadUrl()
  110.     {
  111.        
  112.         // Map the UploadURL to the uploadservice which will be called by
  113.         // submitting the FormPanel
  114.         String url = blobstoreService.createUploadUrl("/testapp4/uploadservice");
  115.        
  116.         // change the computer name to standard localhost ip address, if in dev mode
  117.         if(SystemProperty.environment.value() == SystemProperty.Environment.Value.Development)
  118.         {
  119.             url = url.replace("UtilitiesSav-PC", "127.0.0.1");
  120.         }
  121.        
  122.         return url;
  123.     }
  124.    
  125.     // Retrieve a file's metadata from the Datastore using Objectify
  126.     @Override
  127.     public BlobFile getFile(String id)
  128.     {
  129.         Long lid = Long.parseLong(id);
  130.        
  131.         // BlobInfo b = dao.ofy.get(BlobInfo.class, lid);
  132.        
  133.         // BlobFile blobFile = dao.ofy.load().type(BlobFile.class).id(lid).get();
  134.        
  135.         BlobFile blobFile = dao.get(BlobFile.class, lid);
  136.        
  137.         return blobFile;
  138.     }
  139.    
  140.     @Override
  141.     public List<BlobFile> getExistingFiles(String code)
  142.     {
  143.         // CODE FOR MIGRATION
  144.         /*
  145.          * try
  146.          * {
  147.          * // migrate supplierfiles
  148.          * List<SupplierFile> mList = new ArrayList<SupplierFile>();
  149.          *
  150.          * Query<SupplierFile> mQuery = dao.ofy.query(SupplierFile.class).filter("supplierCode", code);
  151.          *
  152.          * Iterator<SupplierFile> mIterator = mQuery.iterator();
  153.          * while(mIterator.hasNext())
  154.          * {
  155.          * BlobFile tempFile = new BlobFile(mIterator.next());
  156.          * dao.ofy.put(tempFile);
  157.          * }
  158.          *
  159.          * } catch(Exception e)
  160.          * {
  161.          * System.out.println(e.getMessage() + " | " + e.getCause());
  162.          * }
  163.          */
  164.        
  165.         List<BlobFile> list = dao.getListByFilter(BlobFile.class, "code", code);
  166.        
  167.         // Query<BlobFile> query = dao.query(BlobFile.class).filter("code", code);
  168.         //
  169.         // // Query<BlobFile> query = ofy().load().type(BlobFile.class).filter("code", code);
  170.         // // Query<BlobFile> query = dao.ofy.query(BlobFile.class).filter("code", code);
  171.         //
  172.         // Iterator<BlobFile> iterator = query.iterator();
  173.         // while(iterator.hasNext())
  174.         // {
  175.         // list.add(iterator.next());
  176.         // }
  177.        
  178.         return list;
  179.     }
  180.    
  181.     // Override doGet to serve blobs. This will be called automatically by the Image Widget in the client
  182.     @Override
  183.     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
  184.     {
  185.         BlobKey blobKey = new BlobKey(req.getParameter("blob-key"));
  186.         String filename = "file";
  187.        
  188.         // use low-level API to get filename and filesize from BlobInfo entity
  189.         Entity entity = null;
  190.         Key k = KeyFactory.createKey("__BlobInfo__", blobKey.getKeyString());
  191.        
  192.         try
  193.         {
  194.             entity = datastoreService.get(k);
  195.         }
  196.         catch(EntityNotFoundException e)
  197.         {
  198.             e.printStackTrace();
  199.         }
  200.        
  201.         filename = (String) entity.getProperty("filename");
  202.        
  203.         resp.addHeader("Content-Disposition", "filename=\"" + filename + "\"");
  204.        
  205.         blobstoreService.serve(blobKey, resp);
  206.     }
  207.    
  208. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement