diff options
Diffstat (limited to 'same/src/main/java/com/orbekk/same/http/TjwsServerBuilder.java')
-rw-r--r-- | same/src/main/java/com/orbekk/same/http/TjwsServerBuilder.java | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/same/src/main/java/com/orbekk/same/http/TjwsServerBuilder.java b/same/src/main/java/com/orbekk/same/http/TjwsServerBuilder.java new file mode 100644 index 0000000..c0aed5a --- /dev/null +++ b/same/src/main/java/com/orbekk/same/http/TjwsServerBuilder.java @@ -0,0 +1,41 @@ +package com.orbekk.same.http; + +import java.util.ArrayList; + +import javax.servlet.http.HttpServlet; + +import com.googlecode.jsonrpc4j.JsonRpcServer; + +public class TjwsServerBuilder { + private int port; + private ArrayList<String> servletPaths = new ArrayList<String>(); + private ArrayList<HttpServlet> servlets = new ArrayList<HttpServlet>(); + + public TjwsServerBuilder(int port) { + this.port = port; + } + + /** Note: Does not preserve order. */ + public TjwsServerBuilder withServlet(HttpServlet servlet, + String pathSpec) { + servletPaths.add(pathSpec); + servlets.add(servlet); + return this; + } + + public <T> TjwsServerBuilder withService(T service, Class<T> clazz) { + JsonRpcServer server = new JsonRpcServer(service, clazz); + String pathSpec = "/" + clazz.getSimpleName() + ".json"; + return withServlet(new RpcServlet(server), pathSpec); + } + + public TjwsServerContainer build() { + TjwsServerContainer server = TjwsServerContainer.create(port); + for (int i = 0; i < servletPaths.size(); i++) { + String path = servletPaths.get(i); + HttpServlet servlet = servlets.get(i); + server.addServlet(path, servlet); + } + return server; + } +} |