diff options
Diffstat (limited to 'same/src/main/java/com/orbekk/same/http/ServerBuilder.java')
-rw-r--r-- | same/src/main/java/com/orbekk/same/http/ServerBuilder.java | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/same/src/main/java/com/orbekk/same/http/ServerBuilder.java b/same/src/main/java/com/orbekk/same/http/ServerBuilder.java new file mode 100644 index 0000000..a582283 --- /dev/null +++ b/same/src/main/java/com/orbekk/same/http/ServerBuilder.java @@ -0,0 +1,48 @@ +package com.orbekk.same.http; + +import javax.servlet.http.HttpServlet; + +import org.eclipse.jetty.server.Server; +import org.eclipse.jetty.servlet.ServletContextHandler; +import org.eclipse.jetty.servlet.ServletHolder; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.googlecode.jsonrpc4j.JsonRpcServer; + +public class ServerBuilder { + Logger logger = LoggerFactory.getLogger(getClass()); + int port; + ServletContextHandler context = null; + + public ServerBuilder(int port) { + this.port = port; + } + + public ServerBuilder withServlet(HttpServlet servlet, String pathSpec) { + logger.info("Servlet binding: {} → {}", pathSpec, servlet); + getServletContextHandler().addServlet(new ServletHolder(servlet), + pathSpec); + return this; + } + + public <T> ServerBuilder withService(T service, Class<T> clazz) { + JsonRpcServer server = new JsonRpcServer(service, clazz); + String pathSpec = "/" + clazz.getSimpleName() + ".json"; + return withServlet(new RpcServlet(server), pathSpec); + } + + public Server build() { + Server server = new Server(port); + server.setHandler(getServletContextHandler()); + return server; + } + + private ServletContextHandler getServletContextHandler() { + if (context == null) { + context = new ServletContextHandler(); + context.setContextPath("/"); + } + return context; + } +} |