-
Notifications
You must be signed in to change notification settings - Fork 15
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
New feature: uploading a file (e.g., an image) with each message.
- Loading branch information
1 parent
a0e6d99
commit 4ca6c32
Showing
11 changed files
with
270 additions
and
45 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
49 changes: 49 additions & 0 deletions
49
MessageBoard/src/edu/gac/mcs270/messageboard/server/BlobServiceImpl.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
package edu.gac.mcs270.messageboard.server; | ||
|
||
import java.io.IOException; | ||
|
||
import javax.jdo.PersistenceManager; | ||
import javax.servlet.ServletException; | ||
import javax.servlet.http.HttpServletRequest; | ||
import javax.servlet.http.HttpServletResponse; | ||
|
||
import edu.gac.mcs270.messageboard.shared.BlobService; | ||
|
||
import com.google.appengine.api.blobstore.BlobKey; | ||
import com.google.appengine.api.blobstore.BlobstoreService; | ||
import com.google.appengine.api.blobstore.BlobstoreServiceFactory; | ||
import com.google.gwt.user.server.rpc.RemoteServiceServlet; | ||
|
||
/* This is extracted from code in the BlobStore Tutorial written by the blogger "fishbone": | ||
* http://www.fishbonecloud.com/2010/12/tutorial-gwt-application-for-storing.html */ | ||
|
||
@SuppressWarnings("serial") | ||
public class BlobServiceImpl extends RemoteServiceServlet implements | ||
BlobService { | ||
|
||
//Start a GAE BlobstoreService session and persistence manager | ||
BlobstoreService blobstoreService = BlobstoreServiceFactory | ||
.getBlobstoreService(); | ||
PersistenceManager pm = PMF.get().getPersistenceManager(); | ||
|
||
//Generate a Blobstore Upload URL from the GAE BlobstoreService | ||
@Override | ||
public String getBlobStoreUploadUrl() { | ||
|
||
//Map the UploadURL to the uploadservice which will be called by | ||
//submitting the FormPanel | ||
return blobstoreService | ||
.createUploadUrl("/messageboard/uploadservice"); | ||
} | ||
|
||
//Override doGet to serve blobs. This will be called when an uploaded file is viewed | ||
//in the client | ||
@Override | ||
protected void doGet(HttpServletRequest req, HttpServletResponse resp) | ||
throws ServletException, IOException { | ||
|
||
BlobKey blobKey = new BlobKey(req.getParameter("blob-key")); | ||
blobstoreService.serve(blobKey, resp); | ||
|
||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
15 changes: 15 additions & 0 deletions
15
MessageBoard/src/edu/gac/mcs270/messageboard/server/PMF.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
package edu.gac.mcs270.messageboard.server; | ||
|
||
import javax.jdo.JDOHelper; | ||
import javax.jdo.PersistenceManagerFactory; | ||
|
||
public final class PMF { | ||
private static final PersistenceManagerFactory pmfInstance = | ||
JDOHelper.getPersistenceManagerFactory("transactions-optional"); | ||
|
||
private PMF() {} | ||
|
||
public static PersistenceManagerFactory get() { | ||
return pmfInstance; | ||
} | ||
} |
52 changes: 52 additions & 0 deletions
52
MessageBoard/src/edu/gac/mcs270/messageboard/server/UploadServiceImpl.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
package edu.gac.mcs270.messageboard.server; | ||
|
||
import java.io.IOException; | ||
import java.util.Map; | ||
|
||
import javax.jdo.PersistenceManager; | ||
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 edu.gac.mcs270.messageboard.shared.Message; | ||
|
||
/* This is adapted from code in the BlobStore Tutorial written by the blogger "fishbone": | ||
* http://www.fishbonecloud.com/2010/12/tutorial-gwt-application-for-storing.html */ | ||
|
||
//The FormPanel must submit to a servlet that extends HttpServlet | ||
//RemoteServiceServlet cannot be used | ||
@SuppressWarnings("serial") | ||
public class UploadServiceImpl extends HttpServlet { | ||
|
||
//Start Blobstore and persistence manager | ||
BlobstoreService blobstoreService = BlobstoreServiceFactory | ||
.getBlobstoreService(); | ||
PersistenceManager pm = PMF.get().getPersistenceManager(); | ||
|
||
//Override the doPost method to store the Blob's meta-data | ||
@Override | ||
public void doPost(HttpServletRequest req, HttpServletResponse res) | ||
throws ServletException, IOException { | ||
|
||
@SuppressWarnings("deprecation") | ||
Map<String, BlobKey> blobs = blobstoreService.getUploadedBlobs(req); | ||
BlobKey blobKey = blobs.get("upload"); | ||
|
||
//Get the paramters from the request to populate the Message object | ||
Message msg = | ||
new Message( | ||
req.getParameter("author"), | ||
req.getParameter("text"), | ||
//Map the ImageURL to the blobservice servlet, which will serve the image | ||
"/messageboard/blobservice?blob-key=" + blobKey.getKeyString() | ||
); | ||
|
||
pm.makePersistent(msg); | ||
} | ||
|
||
} |
14 changes: 14 additions & 0 deletions
14
MessageBoard/src/edu/gac/mcs270/messageboard/shared/BlobService.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
package edu.gac.mcs270.messageboard.shared; | ||
|
||
import com.google.gwt.user.client.rpc.RemoteService; | ||
import com.google.gwt.user.client.rpc.RemoteServiceRelativePath; | ||
|
||
/* This is extracted from code in the BlobStore Tutorial written by the blogger "fishbone": | ||
* http://www.fishbonecloud.com/2010/12/tutorial-gwt-application-for-storing.html */ | ||
|
||
@RemoteServiceRelativePath("blobservice") | ||
public interface BlobService extends RemoteService { | ||
|
||
String getBlobStoreUploadUrl(); | ||
|
||
} |
9 changes: 9 additions & 0 deletions
9
MessageBoard/src/edu/gac/mcs270/messageboard/shared/BlobServiceAsync.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
package edu.gac.mcs270.messageboard.shared; | ||
|
||
import com.google.gwt.user.client.rpc.AsyncCallback; | ||
|
||
public interface BlobServiceAsync { | ||
|
||
void getBlobStoreUploadUrl(AsyncCallback<String> callback); | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.