From 3102d8bce3426d9cf41aeaf201c360d342677770 Mon Sep 17 00:00:00 2001 From: Jesse Morgan Date: Sat, 9 Apr 2016 14:22:20 -0700 Subject: Switching from Ivy+Ant to Maven. --- .../java/com/p4square/grow/frontend/FeedData.java | 105 +++++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 src/main/java/com/p4square/grow/frontend/FeedData.java (limited to 'src/main/java/com/p4square/grow/frontend/FeedData.java') 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 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> mThreadsProvider; + private final JsonRequestProvider mThreadProvider; + + private final JsonRequestProvider> mMessagesProvider; + private final JsonRequestProvider 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>(clientDispatcher, threadType); + mThreadProvider = new JsonRequestProvider(clientDispatcher, MessageThread.class); + + JavaType messageType = factory.constructCollectionType(List.class, Message.class); + mMessagesProvider = new JsonRequestProvider>(clientDispatcher, messageType); + mMessageProvider = new JsonRequestProvider(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 getThreads(final String topic, final int limit) throws IOException { + return mThreadsProvider.get(makeUrl(limit, topic)); + } + + public List 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; + } +} -- cgit v1.2.3