summaryrefslogtreecommitdiff
path: root/src/com/p4square/grow/frontend
diff options
context:
space:
mode:
authorJesse Morgan <jesse@jesterpm.net>2014-02-20 21:14:34 -0800
committerJesse Morgan <jesse@jesterpm.net>2014-02-20 21:14:34 -0800
commita2a1d7a67b1458cc342c0eb8d5a2732c806ddacf (patch)
tree3278235acde130e2abbf0ed61dfbe1a795c095b6 /src/com/p4square/grow/frontend
parent9d2016bd2320f9b252e91057a36455d31457236d (diff)
Added support for displaying message on Feed.
Changed MessageThread so that a thread always contains one original message. Added support in JsonEncodedProvider for JavaTypes in addition to classes. Updated communityfeed.ftl to actually display questions and answers.
Diffstat (limited to 'src/com/p4square/grow/frontend')
-rw-r--r--src/com/p4square/grow/frontend/FeedData.java65
-rw-r--r--src/com/p4square/grow/frontend/JsonRequestProvider.java8
-rw-r--r--src/com/p4square/grow/frontend/TrainingPageResource.java10
3 files changed, 82 insertions, 1 deletions
diff --git a/src/com/p4square/grow/frontend/FeedData.java b/src/com/p4square/grow/frontend/FeedData.java
new file mode 100644
index 0000000..acff8d9
--- /dev/null
+++ b/src/com/p4square/grow/frontend/FeedData.java
@@ -0,0 +1,65 @@
+/*
+ * Copyright 2014 Jesse Morgan
+ */
+
+package com.p4square.grow.frontend;
+
+import java.io.IOException;
+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 {
+
+ private final Config mConfig;
+ private final String mBackendURI;
+
+ private final Provider<String, List<MessageThread>> mThreadProvider;
+ private final Provider<String, List<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);
+ mThreadProvider = new JsonRequestProvider<List<MessageThread>>(clientDispatcher, threadType);
+
+ JavaType messageType = factory.constructCollectionType(List.class, Message.class);
+ mMessageProvider = new JsonRequestProvider<List<Message>>(clientDispatcher, messageType);
+ }
+
+ public List<MessageThread> getThreads(final String topic) throws IOException {
+ return mThreadProvider.get(makeUrl(topic));
+ }
+
+ public List<Message> getMessages(final String topic, final String threadId) throws IOException {
+ return mMessageProvider.get(makeUrl(topic, threadId));
+ }
+
+ private String makeUrl(String... parts) {
+ String url = mBackendURI;
+ for (String part : parts) {
+ url += "/" + part;
+ }
+
+ return url;
+ }
+}
diff --git a/src/com/p4square/grow/frontend/JsonRequestProvider.java b/src/com/p4square/grow/frontend/JsonRequestProvider.java
index c372251..8eee6d3 100644
--- a/src/com/p4square/grow/frontend/JsonRequestProvider.java
+++ b/src/com/p4square/grow/frontend/JsonRequestProvider.java
@@ -6,6 +6,8 @@ package com.p4square.grow.frontend;
import java.io.IOException;
+import com.fasterxml.jackson.databind.JavaType;
+
import org.restlet.Request;
import org.restlet.Response;
import org.restlet.Restlet;
@@ -31,6 +33,12 @@ public class JsonRequestProvider<V> extends JsonEncodedProvider<String, V> {
mDispatcher = dispatcher;
}
+ public JsonRequestProvider(Restlet dispatcher, JavaType type) {
+ super(type);
+
+ mDispatcher = dispatcher;
+ }
+
@Override
public V get(String url) throws IOException {
Request request = new Request(Method.GET, url);
diff --git a/src/com/p4square/grow/frontend/TrainingPageResource.java b/src/com/p4square/grow/frontend/TrainingPageResource.java
index ef8515a..7b36538 100644
--- a/src/com/p4square/grow/frontend/TrainingPageResource.java
+++ b/src/com/p4square/grow/frontend/TrainingPageResource.java
@@ -70,6 +70,7 @@ public class TrainingPageResource extends FreeMarkerPageResource {
private JsonRequestClient mJsonClient;
private Provider<String, TrainingRecord> mTrainingRecordProvider;
+ private FeedData mFeedData;
// Fields pertaining to this request.
protected String mChapter;
@@ -95,6 +96,8 @@ public class TrainingPageResource extends FreeMarkerPageResource {
}
};
+ mFeedData = new FeedData(getContext(), mConfig);
+
mChapter = getAttribute("chapter");
mUserId = getRequest().getClientInfo().getUser().getIdentifier();
}
@@ -209,7 +212,12 @@ public class TrainingPageResource extends FreeMarkerPageResource {
root.put("overallProgress", overallProgress);
root.put("videos", videos);
root.put("allowUserToSkip", allowUserToSkip);
- root.put("showfeed", getQueryValue("showfeed") != null);
+
+ boolean showfeed = getQueryValue("showfeed") != null;
+ root.put("showfeed", showfeed);
+ if (showfeed) {
+ root.put("feeddata", mFeedData);
+ }
return new TemplateRepresentation(mTrainingTemplate, root, MediaType.TEXT_HTML);