summaryrefslogtreecommitdiff
path: root/src/com/p4square/grow/frontend/TrainingPageResource.java
diff options
context:
space:
mode:
authorJesse Morgan <jesse@jesterpm.net>2013-11-09 15:24:56 -0800
committerJesse Morgan <jesse@jesterpm.net>2013-11-09 15:24:56 -0800
commit0d90da39f77ac3cfa607a68bc59336bf0bdff240 (patch)
tree1a2133dea8035004052e1fddf9b4c022fb8e21e1 /src/com/p4square/grow/frontend/TrainingPageResource.java
parentebbfb39ca9b63c170ca7b609dd07d234d89ab23a (diff)
Refactored TrainingResource to use the Provider interface.
Playlists are now generated from a default playlist and regularly merged with the default playlist to get updates. Also adding the Question tests that got left out of a previous commit.
Diffstat (limited to 'src/com/p4square/grow/frontend/TrainingPageResource.java')
-rw-r--r--src/com/p4square/grow/frontend/TrainingPageResource.java53
1 files changed, 28 insertions, 25 deletions
diff --git a/src/com/p4square/grow/frontend/TrainingPageResource.java b/src/com/p4square/grow/frontend/TrainingPageResource.java
index b27d86e..bf08a1a 100644
--- a/src/com/p4square/grow/frontend/TrainingPageResource.java
+++ b/src/com/p4square/grow/frontend/TrainingPageResource.java
@@ -27,13 +27,18 @@ import com.p4square.fmfacade.json.JsonResponse;
import com.p4square.fmfacade.FreeMarkerPageResource;
import com.p4square.grow.config.Config;
+import com.p4square.grow.model.TrainingRecord;
+import com.p4square.grow.model.VideoRecord;
+import com.p4square.grow.model.Playlist;
+import com.p4square.grow.provider.TrainingRecordProvider;
+import com.p4square.grow.provider.Provider;
/**
* TrainingPageResource handles rendering the training page.
*
* This resource expects the user to be authenticated and the ClientInfo User object
* to be populated.
- *
+ *
* @author Jesse Morgan <jesse@jesterpm.net>
*/
public class TrainingPageResource extends FreeMarkerPageResource {
@@ -43,6 +48,8 @@ public class TrainingPageResource extends FreeMarkerPageResource {
private Template mTrainingTemplate;
private JsonRequestClient mJsonClient;
+ private Provider<String, TrainingRecord> mTrainingRecordProvider;
+
// Fields pertaining to this request.
private String mChapter;
private String mUserId;
@@ -60,6 +67,12 @@ public class TrainingPageResource extends FreeMarkerPageResource {
}
mJsonClient = new JsonRequestClient(getContext().getClientDispatcher());
+ mTrainingRecordProvider = new TrainingRecordProvider<String>(new JsonRequestProvider<TrainingRecord>(getContext().getClientDispatcher(), TrainingRecord.class)) {
+ @Override
+ public String makeKey(String userid) {
+ return getBackendEndpoint() + "/accounts/" + userid + "/training";
+ }
+ };
mChapter = getAttribute("chapter");
mUserId = getRequest().getClientInfo().getUser().getIdentifier();
@@ -72,18 +85,15 @@ public class TrainingPageResource extends FreeMarkerPageResource {
protected Representation get() {
try {
// Get the training summary
- Map<String, Object> trainingRecord = null;
- Map<String, Object> completedVideos = new HashMap<String, Object>();
- Map<String, Boolean> chapters = null;
- {
- JsonResponse response = backendGet("/accounts/" + mUserId + "/training");
- if (response.getStatus().isSuccess()) {
- trainingRecord = response.getMap();
- completedVideos = (Map<String, Object>) trainingRecord.get("videos");
- chapters = (Map<String, Boolean>) trainingRecord.get("chapters");
- }
+ TrainingRecord trainingRecord = mTrainingRecordProvider.get(mUserId);
+ if (trainingRecord == null) {
+ setStatus(Status.SERVER_ERROR_INTERNAL);
+ return new ErrorPage("Could not retrieve TrainingRecord.");
}
+ Playlist playlist = trainingRecord.getPlaylist();
+ Map<String, Boolean> chapters = playlist.getChapterStatuses();
+
// Get the current chapter (the lowest, incomplete chapter)
if (mChapter == null) {
int min = Integer.MAX_VALUE;
@@ -120,7 +130,13 @@ public class TrainingPageResource extends FreeMarkerPageResource {
// Mark the completed videos as completed
int chapterProgress = 0;
for (Map<String, Object> video : videos) {
- boolean completed = (null != completedVideos.get(video.get("id")));
+ boolean completed = false;
+ VideoRecord record = playlist.find((String) video.get("id"));
+ cLog.info("VideoId: " + video.get("id"));
+ if (record != null) {
+ cLog.info("VideoRecord: " + record.getComplete());
+ completed = record.getComplete();
+ }
video.put("completed", completed);
if (completed) {
@@ -133,7 +149,6 @@ public class TrainingPageResource extends FreeMarkerPageResource {
root.put("chapter", mChapter);
root.put("chapterProgress", chapterProgress);
root.put("videos", videos);
- root.put("completedVideos", completedVideos);
return new TemplateRepresentation(mTrainingTemplate, root, MediaType.TEXT_HTML);
@@ -166,18 +181,6 @@ public class TrainingPageResource extends FreeMarkerPageResource {
return response;
}
- private JsonResponse backendPut(final String uri, final Map data) {
- cLog.debug("Sending backend PUT " + uri);
-
- final JsonResponse response = mJsonClient.put(getBackendEndpoint() + uri, data);
- final Status status = response.getStatus();
- if (!status.isSuccess() && !Status.CLIENT_ERROR_NOT_FOUND.equals(status)) {
- cLog.warn("Error making backend request for '" + uri + "'. status = " + response.getStatus().toString());
- }
-
- return response;
- }
-
int chapterIndex(String chapter) {
if ("teacher".equals(chapter)) {
return 4;