/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.wink.jaxrs.test.atom; import java.net.URI; import java.net.URISyntaxException; import java.util.ArrayList; import java.util.Collections; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; import javax.ws.rs.GET; import javax.ws.rs.POST; 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.Response; import javax.ws.rs.core.UriInfo; 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.AtomText; public class Blog { private int id; private String title; private Date updated; private Map<Integer, BlogEntry> entries = new HashMap<Integer, BlogEntry>(); @GET @Produces("application/atom+xml") public AtomFeed getBlog(@Context UriInfo uriInfo) { return toAtomFeed(uriInfo); } @Path("entries/{entryid}") public BlogEntry getEntry(@PathParam("entryid") Integer entryId) { BlogEntry entry = entries.get(entryId); if (entry == null) throw new WebApplicationException(404); return entry; } @POST @Path("entries") public Response postBlogEntry(@Context UriInfo uriInfo, AtomEntry blogEntry) { BlogEntry newEntry = new BlogEntry(this); Author author = new Author(); author.setName(blogEntry.getAuthors().get(0).getName()); author.setEmail(blogEntry.getAuthors().get(0).getEmail()); newEntry.setAuthor(author); newEntry.setId(BlogEntry.getNextId()); newEntry.setPosting(blogEntry.getContent().getValue()); newEntry.setTitle(blogEntry.getTitle().getValue()); newEntry.setUpdated(new Date()); entries.put(new Integer(newEntry.getId()), newEntry); try { URI uri = new URI(uriInfo.getBaseUri() + "blogservice/blogs/"+this.id+"/entries/"+newEntry.getId()); return Response.created(uri).build(); } catch (URISyntaxException e) { throw new WebApplicationException(e); } } public AtomFeed toAtomFeed(UriInfo uriInfo) { AtomFeed feed = new AtomFeed(); feed.setId(id+""); feed.setTitle(new AtomText(title)); feed.setUpdated(updated); Set<Integer> ids = entries.keySet(); List<Integer> idList = new ArrayList<Integer>(ids); Collections.sort(idList); AtomLink link = null; for (Integer entryId : idList) { link = new AtomLink(); link.setHref(uriInfo.getBaseUri() + "blogservice/blogs/" + this.id + "/entries/" + entries.get(entryId).getId()); link.setTitle(entries.get(entryId).getTitle()); feed.getLinks().add(link); } return feed; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public Date getUpdated() { return updated; } public void setUpdated(Date updated) { this.updated = updated; } public Map<Integer, BlogEntry> getEntries() { return entries; } public void addEntry(BlogEntry newEntry) { this.entries.put(newEntry.getId(), newEntry); } public int getId() { return id; } public void setId(int id) { this.id = id; } }