diff options
Diffstat (limited to 'src/com/p4square/grow/frontend')
| -rw-r--r-- | src/com/p4square/grow/frontend/GrowFrontend.java | 8 | ||||
| -rw-r--r-- | src/com/p4square/grow/frontend/JsonRequestProvider.java | 64 | ||||
| -rw-r--r-- | src/com/p4square/grow/frontend/SurveyPageResource.java | 25 | 
3 files changed, 82 insertions, 15 deletions
| diff --git a/src/com/p4square/grow/frontend/GrowFrontend.java b/src/com/p4square/grow/frontend/GrowFrontend.java index 3e50c65..e9c2f5c 100644 --- a/src/com/p4square/grow/frontend/GrowFrontend.java +++ b/src/com/p4square/grow/frontend/GrowFrontend.java @@ -156,10 +156,10 @@ public class GrowFrontend extends FMFacade {          // Static content          try { -            component.getDefaultHost().attach("/images/", new FileServingApp("./build/images/")); -            component.getDefaultHost().attach("/scripts", new FileServingApp("./build/scripts")); -            component.getDefaultHost().attach("/style.css", new FileServingApp("./build/style.css")); -            component.getDefaultHost().attach("/favicon.ico", new FileServingApp("./build/favicon.ico")); +            component.getDefaultHost().attach("/images/", new FileServingApp("./build/root/images/")); +            component.getDefaultHost().attach("/scripts", new FileServingApp("./build/root/scripts")); +            component.getDefaultHost().attach("/style.css", new FileServingApp("./build/root/style.css")); +            component.getDefaultHost().attach("/favicon.ico", new FileServingApp("./build/root/favicon.ico"));          } catch (IOException e) {              LOG.error("Could not create directory for static resources: "                      + e.getMessage(), e); diff --git a/src/com/p4square/grow/frontend/JsonRequestProvider.java b/src/com/p4square/grow/frontend/JsonRequestProvider.java new file mode 100644 index 0000000..c372251 --- /dev/null +++ b/src/com/p4square/grow/frontend/JsonRequestProvider.java @@ -0,0 +1,64 @@ +/* + * Copyright 2013 Jesse Morgan + */ + +package com.p4square.grow.frontend; + +import java.io.IOException; + +import org.restlet.Request; +import org.restlet.Response; +import org.restlet.Restlet; +import org.restlet.data.Method; +import org.restlet.data.Status; +import org.restlet.representation.Representation; +import org.restlet.representation.StringRepresentation; + +import com.p4square.grow.provider.JsonEncodedProvider; + +/** + * Fetch a JSON object via a Request. + * + * @author Jesse Morgan <jesse@jesterpm.net> + */ +public class JsonRequestProvider<V> extends JsonEncodedProvider<String, V> { + +    private final Restlet mDispatcher; + +    public JsonRequestProvider(Restlet dispatcher, Class<V> clazz) { +        super(clazz); + +        mDispatcher = dispatcher; +    } + +    @Override +    public V get(String url) throws IOException { +        Request request = new Request(Method.GET, url); +        Response response = mDispatcher.handle(request); +        Representation representation = response.getEntity(); + +        if (!response.getStatus().isSuccess()) { +            if (representation != null) { +                representation.release(); +            } + +            throw new IOException("Could not get object. " + response.getStatus()); +        } + +        return decode(representation.getText()); +    } + +    @Override +    public void put(String url, V obj) throws IOException { +        final Request request = new Request(Method.PUT, url); +        request.setEntity(new StringRepresentation(encode(obj))); + +        final Response response = mDispatcher.handle(request); + +        if (!response.getStatus().isSuccess()) { +            throw new IOException("Could not put object. " + response.getStatus()); +        } + +    } + +} diff --git a/src/com/p4square/grow/frontend/SurveyPageResource.java b/src/com/p4square/grow/frontend/SurveyPageResource.java index 8d89bb8..803dfc4 100644 --- a/src/com/p4square/grow/frontend/SurveyPageResource.java +++ b/src/com/p4square/grow/frontend/SurveyPageResource.java @@ -4,6 +4,8 @@  package com.p4square.grow.frontend; +import java.io.IOException; +  import java.util.Map;  import java.util.HashMap; @@ -27,6 +29,8 @@ import net.jesterpm.fmfacade.FreeMarkerPageResource;  import com.p4square.grow.config.Config;  import com.p4square.grow.model.Question; +import com.p4square.grow.provider.QuestionProvider; +import com.p4square.grow.provider.Provider;  /**   * SurveyPageResource handles rendering the survey and processing user's answers. @@ -44,6 +48,7 @@ public class SurveyPageResource extends FreeMarkerPageResource {      private Config mConfig;      private Template mSurveyTemplate;      private JsonRequestClient mJsonClient; +    private Provider<String, Question> mQuestionProvider;      // Fields pertaining to this request.      private String mQuestionId; @@ -62,6 +67,12 @@ public class SurveyPageResource extends FreeMarkerPageResource {          }          mJsonClient = new JsonRequestClient(getContext().getClientDispatcher()); +        mQuestionProvider = new QuestionProvider<String>(new JsonRequestProvider<Question>(getContext().getClientDispatcher(), Question.class)) { +            @Override +            public String makeKey(String questionId) { +                return getBackendEndpoint() + "/assessment/question/" + questionId; +            } +        };          mQuestionId = getAttribute("questionId");          mUserId = getRequest().getClientInfo().getUser().getIdentifier(); @@ -102,7 +113,7 @@ public class SurveyPageResource extends FreeMarkerPageResource {              String selectedAnswer = getAnswer(mQuestionId);              Map root = getRootObject(); -            root.put("question", question.getMap()); +            root.put("question", question);              root.put("selectedAnswerId", selectedAnswer);              // Get the question count and compute progress @@ -214,17 +225,9 @@ public class SurveyPageResource extends FreeMarkerPageResource {      private Question getQuestion(String id) {          try { -            Map<?, ?> questionData = null; - -            JsonResponse response = backendGet("/assessment/question/" + id); -            if (!response.getStatus().isSuccess()) { -                return null; -            } -            questionData = response.getMap(); +            return mQuestionProvider.get(id); -            return new Question((Map<String, Object>) questionData); - -        } catch (ClientException e) { +        } catch (IOException e) {              LOG.warn("Error fetching question.", e);              return null;          } | 
