diff options
author | Jesse Morgan <jesse@jesterpm.net> | 2016-04-09 15:53:24 -0700 |
---|---|---|
committer | Jesse Morgan <jesse@jesterpm.net> | 2016-04-09 15:53:24 -0700 |
commit | 371ccae3d1f31ec38f4af77fb7fcd175d49b3cd5 (patch) | |
tree | 38c4f1e8828f9af9c4b77a173bee0d312b321698 /src/main/java/com/p4square/grow/frontend/FeedData.java | |
parent | bbf907e51dfcf157bdee24dead1d531122aa25db (diff) | |
parent | 3102d8bce3426d9cf41aeaf201c360d342677770 (diff) |
Merge pull request #10 from PuyallupFoursquare/maven
Switching from Ivy+Ant to Maven.
Diffstat (limited to 'src/main/java/com/p4square/grow/frontend/FeedData.java')
-rw-r--r-- | src/main/java/com/p4square/grow/frontend/FeedData.java | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/src/main/java/com/p4square/grow/frontend/FeedData.java b/src/main/java/com/p4square/grow/frontend/FeedData.java new file mode 100644 index 0000000..feb03a1 --- /dev/null +++ b/src/main/java/com/p4square/grow/frontend/FeedData.java @@ -0,0 +1,105 @@ +/* + * Copyright 2014 Jesse Morgan + */ + +package com.p4square.grow.frontend; + +import java.io.IOException; + +import java.util.Arrays; +import java.util.HashSet; +import java.util.List; + +import org.restlet.Context; +import org.restlet.Restlet; + +import com.fasterxml.jackson.databind.JavaType; +import com.fasterxml.jackson.databind.type.TypeFactory; + +import com.p4square.grow.config.Config; +import com.p4square.grow.frontend.JsonRequestProvider; +import com.p4square.grow.model.Message; +import com.p4square.grow.model.MessageThread; +import com.p4square.grow.provider.JsonEncodedProvider; +import com.p4square.grow.provider.Provider; + +/** + * Fetch feed data for a topic. + */ +public class FeedData { + + /** + * Allowed Topics. + */ + public static final HashSet<String> TOPICS = new HashSet(Arrays.asList("seeker", "believer", + "disciple", "teacher", "leader")); + + + private final Config mConfig; + private final String mBackendURI; + + // TODO: Elegantly merge the List and individual providers. + private final JsonRequestProvider<List<MessageThread>> mThreadsProvider; + private final JsonRequestProvider<MessageThread> mThreadProvider; + + private final JsonRequestProvider<List<Message>> mMessagesProvider; + private final JsonRequestProvider<Message> mMessageProvider; + + public FeedData(final Context context, final Config config) { + mConfig = config; + mBackendURI = mConfig.getString("backendUri", "riap://component/backend") + "/feed"; + + Restlet clientDispatcher = context.getClientDispatcher(); + + TypeFactory factory = JsonEncodedProvider.MAPPER.getTypeFactory(); + + JavaType threadType = factory.constructCollectionType(List.class, MessageThread.class); + mThreadsProvider = new JsonRequestProvider<List<MessageThread>>(clientDispatcher, threadType); + mThreadProvider = new JsonRequestProvider<MessageThread>(clientDispatcher, MessageThread.class); + + JavaType messageType = factory.constructCollectionType(List.class, Message.class); + mMessagesProvider = new JsonRequestProvider<List<Message>>(clientDispatcher, messageType); + mMessageProvider = new JsonRequestProvider<Message>(clientDispatcher, Message.class); + } + + /** + * Get the threads for a topic. + * + * @param topic The topic to request threads for. + * @param limit The maximum number of threads. + * @return A list of MessageThread objects. + */ + public List<MessageThread> getThreads(final String topic, final int limit) throws IOException { + return mThreadsProvider.get(makeUrl(limit, topic)); + } + + public List<Message> getMessages(final String topic, final String threadId) throws IOException { + return mMessagesProvider.get(makeUrl(topic, threadId)); + } + + public void createThread(final String topic, final Message message) throws IOException { + MessageThread thread = new MessageThread(); + thread.setMessage(message); + + mThreadProvider.post(makeUrl(topic), thread); + } + + public void createResponse(final String topic, final String thread, final Message message) + throws IOException { + + mMessageProvider.post(makeUrl(topic, thread), message); + } + + private String makeUrl(String... parts) { + String url = mBackendURI; + for (String part : parts) { + url += "/" + part; + } + + return url; + } + + private String makeUrl(int limit, String... parts) { + return makeUrl(parts) + "?limit=" + limit; + } +} |