diff options
Diffstat (limited to 'src/com/p4square/grow')
4 files changed, 101 insertions, 8 deletions
| diff --git a/src/com/p4square/grow/backend/resources/TrainingRecordResource.java b/src/com/p4square/grow/backend/resources/TrainingRecordResource.java index 2a0d3f0..3d9d67f 100644 --- a/src/com/p4square/grow/backend/resources/TrainingRecordResource.java +++ b/src/com/p4square/grow/backend/resources/TrainingRecordResource.java @@ -143,7 +143,7 @@ public class TrainingRecordResource extends ServerResource {          switch (mRequestType) {              case VIDEO:                  try { -                    JacksonRepresentation<VideoRecord> representation =  +                    JacksonRepresentation<VideoRecord> representation =                          new JacksonRepresentation<>(entity, VideoRecord.class);                      representation.setObjectMapper(JsonEncodedProvider.MAPPER);                      VideoRecord update = representation.getObject(); @@ -181,7 +181,7 @@ public class TrainingRecordResource extends ServerResource {       */      private void skipAssessedChapters(String userId, TrainingRecord record) {          // Get the user's score. -        double assessedScore; +        double assessedScore = 0;          try {              String summaryString = mDb.getKey("assessments", userId, "summary"); @@ -190,7 +190,10 @@ public class TrainingRecordResource extends ServerResource {                  return;              }              Map<?,?> summary = MAPPER.readValue(summaryString, Map.class); -            assessedScore = (Double) summary.get("score"); + +            if (summary.containsKey("score")) { +                assessedScore = (Double) summary.get("score"); +            }          } catch (IOException e) {              LOG.error("IOException fetching assessment record for " + userId, e); diff --git a/src/com/p4square/grow/frontend/AccountRedirectResource.java b/src/com/p4square/grow/frontend/AccountRedirectResource.java index 1c034ac..eb29e53 100644 --- a/src/com/p4square/grow/frontend/AccountRedirectResource.java +++ b/src/com/p4square/grow/frontend/AccountRedirectResource.java @@ -4,6 +4,7 @@  package com.p4square.grow.frontend; +import java.util.HashMap;  import java.util.Map;  import org.restlet.data.Status; @@ -54,7 +55,8 @@ public class AccountRedirectResource extends ServerResource {      @Override      protected Representation get() {          try { -            Map<?, ?> account = null; +            // Fetch account Map. +            Map account = new HashMap();              try {                  JsonResponse response = backendGet("/accounts/" + mUserId);                  if (response.getStatus().isSuccess()) { @@ -64,12 +66,15 @@ public class AccountRedirectResource extends ServerResource {              } -            String landing = null; - -            if (account != null) { -                landing = (String) account.get("landing"); +            // Check for the new believers cookie +            String cookie = getRequest().getCookies().getFirstValue(NewBelieverResource.COOKIE_NAME); +            if (cookie != null && cookie.length() != 0) { +                account.put("landing", "training"); +                account.put("newbeliever", "true"); +                backendPut("/accounts/" + mUserId, account);              } +            String landing = (String) account.get("landing");              if (landing == null) {                  landing = "assessment";              } @@ -107,4 +112,16 @@ public class AccountRedirectResource extends ServerResource {          return response;      } + +    protected JsonResponse backendPut(final String uri, final Map data) { +        LOG.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)) { +            LOG.warn("Error making backend request for '" + uri + "'. status = " + response.getStatus().toString()); +        } + +        return response; +    }  } diff --git a/src/com/p4square/grow/frontend/GrowFrontend.java b/src/com/p4square/grow/frontend/GrowFrontend.java index ebbce0a..4f67afb 100644 --- a/src/com/p4square/grow/frontend/GrowFrontend.java +++ b/src/com/p4square/grow/frontend/GrowFrontend.java @@ -95,6 +95,7 @@ public class GrowFrontend extends FMFacade {          router.attach("/", new Redirector(getContext(), "index.html", Redirector.MODE_CLIENT_PERMANENT));          router.attach("/login.html", LoginPageResource.class);          router.attach("/newaccount.html", NewAccountResource.class); +        router.attach("/newbeliever", NewBelieverResource.class);          final Router accountRouter = new Router(getContext());          accountRouter.attach("/authenticate", AuthenticatedResource.class); diff --git a/src/com/p4square/grow/frontend/NewBelieverResource.java b/src/com/p4square/grow/frontend/NewBelieverResource.java new file mode 100644 index 0000000..4874cbe --- /dev/null +++ b/src/com/p4square/grow/frontend/NewBelieverResource.java @@ -0,0 +1,72 @@ +/* + * Copyright 2014 Jesse Morgan + */ + +package com.p4square.grow.frontend; + +import freemarker.template.Template; + +import org.restlet.data.CookieSetting; +import org.restlet.data.MediaType; +import org.restlet.data.Status; +import org.restlet.representation.Representation; +import org.restlet.ext.freemarker.TemplateRepresentation; + +import org.apache.log4j.Logger; + +import net.jesterpm.fmfacade.FreeMarkerPageResource; + +/** + * This resource displays the transitional page between chapters. + * + * @author Jesse Morgan <jesse@jesterpm.net> + */ +public class NewBelieverResource extends FreeMarkerPageResource { +    private static final Logger LOG = Logger.getLogger(NewBelieverResource.class); + +    public static final String COOKIE_NAME = "seeker"; + +    private GrowFrontend mGrowFrontend; + +    @Override +    public void doInit() { +        super.doInit(); + +        mGrowFrontend = (GrowFrontend) getApplication(); +    } + +    /** +     * Display the New Believer page. +     * +     * The New Believer page creates a cookie to remember the user, +     * explains what's going on, and then asks the user to go to the login +     * page. +     * +     * When the user hits the {@link AccountRedirectResource} the cookie +     * is read and the user is moved ahead to the training section. +     */ +    @Override +    protected Representation get() { +        Template t = mGrowFrontend.getTemplate("templates/newbeliever.ftl"); + +        try { +            if (t == null) { +                setStatus(Status.CLIENT_ERROR_NOT_FOUND); +                return ErrorPage.TEMPLATE_NOT_FOUND; +            } + +            // Set the new believer cookie +            CookieSetting cookie = new CookieSetting(COOKIE_NAME, "true"); +            cookie.setPath("/"); +            getRequest().getCookies().add(cookie); +            getResponse().getCookieSettings().add(cookie); + +            return new TemplateRepresentation(t, getRootObject(), MediaType.TEXT_HTML); + +        } catch (Exception e) { +            LOG.fatal("Could not render page: " + e.getMessage(), e); +            setStatus(Status.SERVER_ERROR_INTERNAL); +            return ErrorPage.RENDER_ERROR; +        } +    } +} | 
