package org.atomhopper.adapter.impl; import org.apache.abdera.model.Entry; import org.apache.abdera.model.Feed; import org.apache.commons.lang.StringUtils; import org.atomhopper.adapter.FeedInformation; import org.atomhopper.adapter.FeedPublisher; import org.atomhopper.adapter.FeedSource; import org.atomhopper.adapter.ResponseBuilder; import org.atomhopper.adapter.request.adapter.DeleteEntryRequest; import org.atomhopper.adapter.request.adapter.GetEntryRequest; import org.atomhopper.adapter.request.adapter.GetFeedRequest; import org.atomhopper.adapter.request.adapter.PostEntryRequest; import org.atomhopper.adapter.request.adapter.PutEntryRequest; import org.atomhopper.response.AdapterResponse; import org.atomhopper.response.EmptyBody; import org.atomhopper.util.uri.template.EnumKeyedTemplateParameters; import org.atomhopper.util.uri.template.URITemplate; import org.springframework.http.HttpStatus; import java.net.URL; import java.util.Collections; import java.util.Map; import java.util.SortedMap; import java.util.TreeMap; /** * */ public class InMemoryFeedAdapter implements FeedSource, FeedPublisher { private final SortedMap<String, AtomEntry> liveFeed; public InMemoryFeedAdapter() { liveFeed = Collections.synchronizedSortedMap(new TreeMap<String, AtomEntry>()); } @Override public FeedInformation getFeedInformation() { return DisabledFeedInformation.getInstance(); } @Override public void setParameters(Map<String, String> params) { } @Override public AdapterResponse<Entry> getEntry(GetEntryRequest getEntryRequest) { if (!StringUtils.isBlank(getEntryRequest.getEntryId())) { final AtomEntry entry = liveFeed.get(getEntryRequest.getEntryId()); if (entry != null) { return ResponseBuilder.found(entry.getEntry()); } } return ResponseBuilder.notFound(); } @Override public void setCurrentUrl( URL currentURL ) { // Not implemented since this adapter doesn't page } @Override public void setArchiveUrl( URL url ) { // Not implemented since this adapter doesn't page } @Override public AdapterResponse<Feed> getFeed(GetFeedRequest getFeedRequest) { final Feed feed = getFeedRequest.getAbdera().newFeed(); feed.setTitle("A Feed"); feed.addLink(getFeedRequest.urlFor( new EnumKeyedTemplateParameters<URITemplate>(URITemplate.FEED))).setRel("self"); for (AtomEntry ae : liveFeed.values()) { feed.addEntry(ae.getEntry()); } return ResponseBuilder.found(feed); } @Override public AdapterResponse<EmptyBody> deleteEntry(DeleteEntryRequest deleteEntryRequest) { throw new UnsupportedOperationException("Not supported yet."); } @Override public AdapterResponse<Entry> postEntry(PostEntryRequest postEntryRequest) { final Entry entryToPost = postEntryRequest.getEntry(); if (entryToPost.getId() == null) { return ResponseBuilder.reply(HttpStatus.BAD_REQUEST, "Entry should supply an id"); } else { liveFeed.put(entryToPost.getId().toString(), new AtomEntry(entryToPost)); } return ResponseBuilder.created(entryToPost); } @Override public AdapterResponse<Entry> putEntry(PutEntryRequest putEntryRequest) { throw new UnsupportedOperationException("Not supported yet."); } }