summaryrefslogtreecommitdiff
path: root/src/com/p4square/fmfacade/FMFacade.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/p4square/fmfacade/FMFacade.java')
-rw-r--r--src/com/p4square/fmfacade/FMFacade.java98
1 files changed, 98 insertions, 0 deletions
diff --git a/src/com/p4square/fmfacade/FMFacade.java b/src/com/p4square/fmfacade/FMFacade.java
new file mode 100644
index 0000000..54e4098
--- /dev/null
+++ b/src/com/p4square/fmfacade/FMFacade.java
@@ -0,0 +1,98 @@
+/*
+ * 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;
+
+/**
+ *
+ * @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());
+ }
+
+ @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);
+ }
+ }
+}