diff options
Diffstat (limited to 'src/com/p4square/fmfacade')
-rw-r--r-- | src/com/p4square/fmfacade/FMFacade.java | 107 | ||||
-rw-r--r-- | src/com/p4square/fmfacade/FreeMarkerPageResource.java | 98 | ||||
-rw-r--r-- | src/com/p4square/fmfacade/ftl/GetMethod.java | 94 | ||||
-rw-r--r-- | src/com/p4square/fmfacade/json/ClientException.java | 20 | ||||
-rw-r--r-- | src/com/p4square/fmfacade/json/JsonRequestClient.java | 109 | ||||
-rw-r--r-- | src/com/p4square/fmfacade/json/JsonResponse.java | 87 |
6 files changed, 0 insertions, 515 deletions
diff --git a/src/com/p4square/fmfacade/FMFacade.java b/src/com/p4square/fmfacade/FMFacade.java deleted file mode 100644 index 0e552b0..0000000 --- a/src/com/p4square/fmfacade/FMFacade.java +++ /dev/null @@ -1,107 +0,0 @@ -/* - * Copyright 2013 Jesse Morgan <jesse@jesterpm.net> - */ - -package com.p4square.fmfacade; - -import java.io.IOException; - -import org.restlet.Application; -import org.restlet.Component; -import org.restlet.data.Protocol; -import org.restlet.Restlet; -import org.restlet.routing.Router; - -import freemarker.template.Configuration; -import freemarker.template.DefaultObjectWrapper; -import freemarker.template.Template; - -import org.apache.log4j.Logger; - -import com.p4square.grow.config.Config; - -/** - * - * @author Jesse Morgan <jesse@jesterpm.net> - */ -public class FMFacade extends Application { - private static final Logger cLog = Logger.getLogger(FMFacade.class); - private final Configuration mFMConfig; - - public FMFacade() { - mFMConfig = new Configuration(); - mFMConfig.setClassForTemplateLoading(getClass(), "/templates"); - mFMConfig.setObjectWrapper(new DefaultObjectWrapper()); - } - - /** - * @return a Config object. - */ - public Config getConfig() { - return null; - } - - @Override - public synchronized Restlet createInboundRoot() { - return createRouter(); - } - - /** - * Retrieve a template. - * - * @param name The template name. - * @return A FreeMarker template or null on error. - */ - public Template getTemplate(String name) { - try { - return mFMConfig.getTemplate(name); - - } catch (IOException e) { - cLog.error("Could not load template \"" + name + "\"", e); - return null; - } - } - - /** - * Create the router to be used by this application. This can be overriden - * by sub-classes to add additional routes. - * - * @return The router. - */ - protected Router createRouter() { - Router router = new Router(getContext()); - router.attachDefault(FreeMarkerPageResource.class); - - return router; - } - - /** - * Stand-alone main for testing. - */ - public static void main(String[] args) { - // Start the HTTP Server - final Component component = new Component(); - component.getServers().add(Protocol.HTTP, 8085); - component.getClients().add(Protocol.HTTP); - component.getDefaultHost().attach(new FMFacade()); - - // Setup shutdown hook - Runtime.getRuntime().addShutdownHook(new Thread() { - public void run() { - try { - component.stop(); - } catch (Exception e) { - cLog.error("Exception during cleanup", e); - } - } - }); - - cLog.info("Starting server..."); - - try { - component.start(); - } catch (Exception e) { - cLog.fatal("Could not start: " + e.getMessage(), e); - } - } -} diff --git a/src/com/p4square/fmfacade/FreeMarkerPageResource.java b/src/com/p4square/fmfacade/FreeMarkerPageResource.java deleted file mode 100644 index 8c8948a..0000000 --- a/src/com/p4square/fmfacade/FreeMarkerPageResource.java +++ /dev/null @@ -1,98 +0,0 @@ -/* - * Copyright 2013 Jesse Morgan - */ - -package com.p4square.fmfacade; - -import java.util.Map; -import java.util.HashMap; - -import freemarker.template.Template; - -import org.restlet.Context; -import org.restlet.data.MediaType; -import org.restlet.data.Status; -import org.restlet.ext.freemarker.TemplateRepresentation; -import org.restlet.representation.Representation; -import org.restlet.resource.ServerResource; -import org.restlet.security.User; - -import org.apache.log4j.Logger; - -import com.p4square.fmfacade.ftl.GetMethod; - -import com.p4square.session.Session; -import com.p4square.session.Sessions; - -/** - * - * @author Jesse Morgan <jesse@jesterpm.net> - */ -public class FreeMarkerPageResource extends ServerResource { - private static Logger cLog = Logger.getLogger(FreeMarkerPageResource.class); - - public static Map<String, Object> baseRootObject(final Context context, final FMFacade fmf) { - Map<String, Object> root = new HashMap<String, Object>(); - - root.put("get", new GetMethod(context.getClientDispatcher())); - root.put("config", fmf.getConfig()); - - return root; - } - - private FMFacade mFMF; - private String mCurrentPage; - - @Override - public void doInit() { - mFMF = (FMFacade) getApplication(); - mCurrentPage = getReference().getRemainingPart(false, false); - } - - protected Representation get() { - try { - Template t = mFMF.getTemplate("pages" + mCurrentPage + ".ftl"); - - if (t == null) { - setStatus(Status.CLIENT_ERROR_NOT_FOUND); - return null; - } - - return new TemplateRepresentation(t, getRootObject(), - MediaType.TEXT_HTML); - - } catch (Exception e) { - cLog.fatal("Could not render page: " + e.getMessage(), e); - setStatus(Status.SERVER_ERROR_INTERNAL); - return null; - } - } - - /** - * Build and return the root object to pass to the FTL Template. - * @return A map of objects and methods for the template to access. - */ - protected Map<String, Object> getRootObject() { - Map<String, Object> root = baseRootObject(getContext(), mFMF); - - root.put("attributes", getRequestAttributes()); - root.put("query", getQuery().getValuesMap()); - - if (getClientInfo().isAuthenticated()) { - final User user = getClientInfo().getUser(); - final Map<String, String> userMap = new HashMap<String, String>(); - userMap.put("id", user.getIdentifier()); - userMap.put("firstName", user.getFirstName()); - userMap.put("lastName", user.getLastName()); - userMap.put("email", user.getEmail()); - root.put("user", userMap); - } - - Session s = Sessions.getInstance().get(getRequest()); - if (s != null) { - root.put("session", s.getMap()); - } - - return root; - } -} diff --git a/src/com/p4square/fmfacade/ftl/GetMethod.java b/src/com/p4square/fmfacade/ftl/GetMethod.java deleted file mode 100644 index a47c4b0..0000000 --- a/src/com/p4square/fmfacade/ftl/GetMethod.java +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Copyright 2013 Jesse Morgan - */ - -package com.p4square.fmfacade.ftl; - -import java.util.List; -import java.util.Map; -import java.util.HashMap; - -import java.io.IOException; - -import freemarker.core.Environment; -import freemarker.template.SimpleScalar; -import freemarker.template.TemplateMethodModel; -import freemarker.template.TemplateModel; -import freemarker.template.TemplateModelException; - -import org.apache.log4j.Logger; - -import org.restlet.data.Status; -import org.restlet.data.Method; -import org.restlet.representation.Representation; -import org.restlet.Request; -import org.restlet.Response; -import org.restlet.Restlet; - -import org.restlet.ext.jackson.JacksonRepresentation; - -/** - * This method allows templates to make GET requests. - * - * @author Jesse Morgan <jesse@jesterpm.net> - */ -public class GetMethod implements TemplateMethodModel { - private static final Logger cLog = Logger.getLogger(GetMethod.class); - - private final Restlet mDispatcher; - - public GetMethod(Restlet dispatcher) { - mDispatcher = dispatcher; - } - - /** - * @param args List with exactly two arguments: - * * The variable in which to put the result. - * * The URI to GET. - */ - public TemplateModel exec(List args) throws TemplateModelException { - final Environment env = Environment.getCurrentEnvironment(); - - if (args.size() != 2) { - throw new TemplateModelException( - "Expecting exactly one argument containing the URI"); - } - - Request request = new Request(Method.GET, (String) args.get(1)); - Response response = mDispatcher.handle(request); - Status status = response.getStatus(); - Representation representation = response.getEntity(); - - try { - if (response.getStatus().isSuccess()) { - JacksonRepresentation<Map> mapRepresentation; - if (representation instanceof JacksonRepresentation) { - mapRepresentation = (JacksonRepresentation<Map>) representation; - } else { - mapRepresentation = new JacksonRepresentation<Map>( - representation, Map.class); - } - try { - TemplateModel mapModel = env.getObjectWrapper().wrap(mapRepresentation.getObject()); - - env.setVariable((String) args.get(0), mapModel); - - } catch (IOException e) { - cLog.warn("Exception occurred when calling getObject(): " - + e.getMessage(), e); - status = Status.SERVER_ERROR_INTERNAL; - } - } - - Map statusMap = new HashMap(); - statusMap.put("code", status.getCode()); - statusMap.put("reason", status.getReasonPhrase()); - statusMap.put("succeeded", status.isSuccess()); - return env.getObjectWrapper().wrap(statusMap); - } finally { - if (representation != null) { - representation.release(); - } - } - } -} diff --git a/src/com/p4square/fmfacade/json/ClientException.java b/src/com/p4square/fmfacade/json/ClientException.java deleted file mode 100644 index c233193..0000000 --- a/src/com/p4square/fmfacade/json/ClientException.java +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright 2013 Jesse Morgan - */ - -package com.p4square.fmfacade.json; - -/** - * - * @author Jesse Morgan <jesse@jesterpm.net> - */ -public class ClientException extends Exception { - - public ClientException(final String msg) { - super(msg); - } - - public ClientException(final String msg, final Exception cause) { - super(msg, cause); - } -} diff --git a/src/com/p4square/fmfacade/json/JsonRequestClient.java b/src/com/p4square/fmfacade/json/JsonRequestClient.java deleted file mode 100644 index 19a394f..0000000 --- a/src/com/p4square/fmfacade/json/JsonRequestClient.java +++ /dev/null @@ -1,109 +0,0 @@ -/* - * Copyright 2013 Jesse Morgan - */ - -package com.p4square.fmfacade.json; - -import java.util.Map; - -import java.io.IOException; - -import org.apache.log4j.Logger; - -import org.restlet.data.Status; -import org.restlet.data.Method; -import org.restlet.representation.Representation; -import org.restlet.Request; -import org.restlet.Response; -import org.restlet.Restlet; - -import org.restlet.ext.jackson.JacksonRepresentation; - -/** - * - * @author Jesse Morgan <jesse@jesterpm.net> - */ -public class JsonRequestClient { - private final Restlet mDispatcher; - - public JsonRequestClient(Restlet dispatcher) { - mDispatcher = dispatcher; - } - - /** - * Perform a GET request for the given URI and parse the response as a - * JSON map. - * - * @return A JsonResponse object which can be used to retrieve the - * response as a JSON map. - */ - public JsonResponse get(final String uri) { - final Request request = new Request(Method.GET, uri); - final Response response = mDispatcher.handle(request); - - return new JsonResponse(response); - } - - /** - * Perform a PUT request for the given URI and parse the response as a - * JSON map. - * - * @return A JsonResponse object which can be used to retrieve the - * response as a JSON map. - */ - public JsonResponse put(final String uri, Representation entity) { - final Request request = new Request(Method.PUT, uri); - request.setEntity(entity); - - final Response response = mDispatcher.handle(request); - return new JsonResponse(response); - } - - /** - * Perform a PUT request for the given URI and parse the response as a - * JSON map. - * - * @return A JsonResponse object which can be used to retrieve the - * response as a JSON map. - */ - public JsonResponse put(final String uri, Map map) { - return put(uri, new JacksonRepresentation<Map>(map)); - } - - /** - * Perform a POST request for the given URI and parse the response as a - * JSON map. - * - * @return A JsonResponse object which can be used to retrieve the - * response as a JSON map. - */ - public JsonResponse post(final String uri, Representation entity) { - final Request request = new Request(Method.POST, uri); - request.setEntity(entity); - - final Response response = mDispatcher.handle(request); - return new JsonResponse(response); - } - - /** - * Perform a POST request for the given URI and parse the response as a - * JSON map. - * - * @return A JsonResponse object which can be used to retrieve the - * response as a JSON map. - */ - public JsonResponse post(final String uri, Map map) { - return post(uri, new JacksonRepresentation<Map>(map)); - } - - /** - * Perform a DELETE request for the given URI. - * - * @return A JsonResponse object with the status of the request. - */ - public JsonResponse delete(final String uri) { - final Request request = new Request(Method.DELETE, uri); - final Response response = mDispatcher.handle(request); - return new JsonResponse(response); - } -} diff --git a/src/com/p4square/fmfacade/json/JsonResponse.java b/src/com/p4square/fmfacade/json/JsonResponse.java deleted file mode 100644 index b9cb587..0000000 --- a/src/com/p4square/fmfacade/json/JsonResponse.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Copyright 2013 Jesse Morgan - */ - -package com.p4square.fmfacade.json; - -import java.util.Map; - -import java.io.IOException; - -import org.restlet.data.Status; -import org.restlet.data.Reference; -import org.restlet.representation.Representation; -import org.restlet.Response; - -import org.restlet.ext.jackson.JacksonRepresentation; - -/** - * JsonResponse wraps a Restlet Response object and parses the entity, if any, - * as a JSON map. - * - * @author Jesse Morgan <jesse@jesterpm.net> - */ -public class JsonResponse { - private final Response mResponse; - private final Representation mRepresentation; - - private Map<String, Object> mMap; - - JsonResponse(Response response) { - mResponse = response; - mRepresentation = response.getEntity(); - mMap = null; - - if (!response.getStatus().isSuccess()) { - if (mRepresentation != null) { - mRepresentation.release(); - } - } - } - - /** - * @return the Status info from the response. - */ - public Status getStatus() { - return mResponse.getStatus(); - } - - /** - * @return the Reference for a redirect. - */ - public Reference getRedirectLocation() { - return mResponse.getLocationRef(); - } - - /** - * Return the parsed json map from the response. - */ - public Map<String, Object> getMap() throws ClientException { - if (mMap == null) { - Representation representation = mRepresentation; - - // Parse response - if (representation == null) { - return null; - } - - JacksonRepresentation<Map> mapRepresentation; - if (representation instanceof JacksonRepresentation) { - mapRepresentation = (JacksonRepresentation<Map>) representation; - } else { - mapRepresentation = new JacksonRepresentation<Map>( - representation, Map.class); - } - - try { - mMap = (Map<String, Object>) mapRepresentation.getObject(); - - } catch (IOException e) { - throw new ClientException("Failed to parse response: " + e.getMessage(), e); - } - } - - return mMap; - } - -} |