| package myPackage; |
| |
| import java.net.URI; |
| import java.util.Date; |
| |
| import javax.ws.rs.Consumes; |
| import javax.ws.rs.DELETE; |
| import javax.ws.rs.GET; |
| import javax.ws.rs.POST; |
| import javax.ws.rs.PUT; |
| import javax.ws.rs.Path; |
| import javax.ws.rs.PathParam; |
| import javax.ws.rs.Produces; |
| import javax.ws.rs.WebApplicationException; |
| import javax.ws.rs.core.Context; |
| import javax.ws.rs.core.EntityTag; |
| import javax.ws.rs.core.MediaType; |
| import javax.ws.rs.core.Response; |
| import javax.ws.rs.core.UriInfo; |
| |
| import org.apache.wink.common.annotations.Workspace; |
| import org.apache.wink.common.model.atom.AtomCategory; |
| import org.apache.wink.common.model.atom.AtomEntry; |
| import org.apache.wink.common.model.atom.AtomFeed; |
| import org.apache.wink.common.model.atom.AtomLink; |
| import org.apache.wink.common.model.atom.AtomPerson; |
| import org.apache.wink.common.model.atom.AtomText; |
| |
| @Workspace(workspaceTitle = "IISc MILE Lab Weblog", collectionTitle = "Entries") |
| @Path("/entries") |
| public class EntriesCollection { |
| private static AtomFeed feed = initializeFeedDocument("entries"); |
| |
| @GET |
| @Produces(MediaType.APPLICATION_ATOM_XML) |
| public AtomFeed getFeed() { |
| return feed; |
| } |
| |
| @POST |
| @Consumes(MediaType.APPLICATION_ATOM_XML) |
| @Produces(MediaType.APPLICATION_ATOM_XML) |
| public Response postEntry(AtomEntry newEntry, @Context UriInfo uriInfo) { |
| if (searchEntry(newEntry.getId()) != null) { |
| throw new WebApplicationException(Response.Status.CONFLICT); |
| } |
| |
| URI uri = uriInfo.getAbsolutePathBuilder().segment(newEntry.getId()).build(); |
| pruneEntry(newEntry, uri); |
| feed.getEntries().add(0, newEntry); |
| feed.setUpdated(new Date()); |
| |
| return Response.status(Response.Status.CREATED).entity(newEntry).location(uri) |
| .tag(new EntityTag(newEntry.getId())).build(); |
| } |
| |
| @GET |
| @Path("{id}") |
| @Produces(MediaType.APPLICATION_ATOM_XML) |
| public AtomEntry getEntry(@PathParam("id") String entryId) { |
| AtomEntry entry = searchEntry(entryId); |
| if (entry == null) { |
| throw new WebApplicationException(Response.Status.NOT_FOUND); |
| } else { |
| return entry; |
| } |
| } |
| |
| @PUT |
| @Path("{id}") |
| @Consumes(MediaType.APPLICATION_ATOM_XML) |
| @Produces(MediaType.APPLICATION_ATOM_XML) |
| public AtomEntry putEntry(@PathParam("id") String entryId, |
| AtomEntry updatedEntry, |
| @Context UriInfo uriInfo) { |
| AtomEntry oldEntry = getEntry(entryId); |
| feed.getEntries().remove(oldEntry); |
| pruneEntry(updatedEntry, uriInfo.getAbsolutePath()); |
| feed.getEntries().add(0, updatedEntry); |
| feed.setUpdated(new Date()); |
| return updatedEntry; |
| } |
| |
| @DELETE |
| @Path("{id}") |
| public void deleteEntry(@PathParam("id") String entryId) { |
| AtomEntry oldEntry = getEntry(entryId); |
| feed.getEntries().remove(oldEntry); |
| feed.setUpdated(new Date()); |
| } |
| |
| private static AtomFeed initializeFeedDocument(String basePath) { |
| AtomFeed feed = new AtomFeed(); |
| feed.setId("http://mile.ee.iisc.ernet.in"); |
| feed.setTitle(new AtomText("Latest developments at MILE Lab, IISc :")); |
| feed.setUpdated(new Date()); |
| AtomLink link1 = new AtomLink(); |
| link1.setHref(basePath); |
| feed.getLinks().add(link1); |
| AtomCategory category1 = new AtomCategory(); |
| category1.setTerm("lab-updates"); |
| feed.getCategories().add(category1); |
| |
| AtomEntry entry1 = new AtomEntry(); |
| entry1.setId("tts_demo"); |
| entry1.setTitle(new AtomText("Kannada and Tamil language TTS Web Demo")); |
| AtomLink link2 = new AtomLink(); |
| link2.setHref(basePath + "/" + entry1.getId()); |
| entry1.getLinks().add(link2); |
| entry1.setUpdated(new Date()); |
| entry1.setPublished(new Date()); |
| //entry1.setEdited(new Date()); |
| entry1.setSummary(new AtomText("Kannada/Tamil language Text-To-Speech (TTS) Demo by MILE Lab, " + |
| "IISc is available at http://mile.ee.iisc.ernet.in:8080/tts_demo/ ")); |
| AtomPerson person1 = new AtomPerson(); |
| person1.setName("ShivaHR"); |
| entry1.getAuthors().add(person1); |
| feed.getEntries().add(entry1); |
| |
| AtomEntry entry2 = new AtomEntry(); |
| entry2.setId("tamil_ocr"); |
| entry2.setTitle(new AtomText("Tamil OCR achieves 94.3% accuracy on 1000 scanned pages")); |
| AtomLink link3 = new AtomLink(); |
| link3.setHref(basePath + "/" + entry2.getId()); |
| entry2.getLinks().add(link3); |
| entry2.setUpdated(new Date()); |
| entry2.setPublished(new Date()); |
| //entry2.setEdited(new Date()); |
| entry2.setSummary(new AtomText("Tamil OCR (Optical Character Recognizer) being developed at " + |
| "MILE Lab, IISc achieves an accuracy of 94.3%! The testing was carried out by " + |
| "CDAC-Pune on 1000 pages scanned from books printed between 1950-2000.")); |
| AtomPerson person2 = new AtomPerson(); |
| person2.setName("ShivaHR"); |
| entry2.getAuthors().add(person2); |
| feed.getEntries().add(entry2); |
| return feed; |
| } |
| |
| private AtomEntry searchEntry(String entryId) { |
| for (AtomEntry entry : feed.getEntries()) { |
| if (entry.getId().equals(entryId)) { |
| return entry; |
| } |
| } |
| return null; |
| } |
| |
| private void pruneEntry(AtomEntry newEntry, URI uri) { |
| newEntry.getLinks().clear(); |
| AtomLink link = new AtomLink(); |
| link.setHref(uri.toString()); |
| newEntry.getLinks().add(link); |
| newEntry.setUpdated(new Date()); |
| } |
| } |