X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.auditlogging%2Fsrc%2Forg%2Fsimantics%2Faudit%2Fserver%2FAuditLoggingServer.java;fp=bundles%2Forg.simantics.auditlogging%2Fsrc%2Forg%2Fsimantics%2Faudit%2Fserver%2FAuditLoggingServer.java;h=5bb305d4f50e6e39f1120efc49dfd7657e8d4bd8;hp=0000000000000000000000000000000000000000;hb=da4210cb095e4acd25ddba55a86aa6fe0b18301d;hpb=ad864a5ed509612375e2a904422e18287dfd5cc5 diff --git a/bundles/org.simantics.auditlogging/src/org/simantics/audit/server/AuditLoggingServer.java b/bundles/org.simantics.auditlogging/src/org/simantics/audit/server/AuditLoggingServer.java new file mode 100644 index 000000000..5bb305d4f --- /dev/null +++ b/bundles/org.simantics.auditlogging/src/org/simantics/audit/server/AuditLoggingServer.java @@ -0,0 +1,81 @@ +package org.simantics.audit.server; + +import org.eclipse.jetty.server.Connector; +import org.eclipse.jetty.server.Server; +import org.eclipse.jetty.server.ServerConnector; +import org.eclipse.jetty.servlet.ServletContextHandler; +import org.eclipse.jetty.servlet.ServletHolder; +import org.glassfish.jersey.jackson.JacksonFeature; +import org.glassfish.jersey.server.ResourceConfig; +import org.glassfish.jersey.servlet.ServletContainer; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class AuditLoggingServer { + + private static final Logger LOGGER = LoggerFactory.getLogger(AuditLoggingServer.class); + + private static AuditLoggingServer INSTANCE = null; + private static Server server; + private static ServiceServerThread serverThread; + + private AuditLoggingServer(String token, int preferablePort) { + ResourceConfig config = new ResourceConfig(); + // JSON serialization/deserialization + config.register(JacksonFeature.class); + // Actual API + config.register(AuditLoggingAPI.class); + // Authorization +// config.register(new AuthorizationFilter(token)); + + ServletHolder holder = new ServletHolder(new ServletContainer(config)); + + server = new Server(); + ServerConnector connector = new ServerConnector(server); + connector.setPort(preferablePort); + + server.setConnectors(new Connector[] { connector }); + + ServletContextHandler context = new ServletContextHandler(server, "/", ServletContextHandler.SESSIONS); + context.addServlet(holder, "/*"); + } + + private static class ServiceServerThread extends Thread { + + @Override + public void run() { + try { + server.start(); + server.join(); + } catch (Exception e) { + LOGGER.error("Could not start server ", e); + } + } + } + + private static synchronized AuditLoggingServer getInstance(String token, int port) { + try { + if (INSTANCE == null) { + INSTANCE = new AuditLoggingServer(token, port); + } + } catch (Exception e) { + LOGGER.error("Could not initialize SCL REST server", e); + } + return INSTANCE; + } + + public static synchronized void start(String token, int port) throws Exception { + // Ensure that an instance is created + getInstance(token, port); + if (serverThread == null && server != null) { + serverThread = new ServiceServerThread(); + serverThread.start(); + } + } + + public static synchronized void stop() throws Exception { + if (server != null) + server.stop(); + serverThread = null; + } +}