]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.auditlogging/src/org/simantics/audit/server/AuditLoggingServer.java
Generic HTTP REST Client/Server AuditLogging framework
[simantics/platform.git] / bundles / org.simantics.auditlogging / src / org / simantics / audit / server / AuditLoggingServer.java
1 package org.simantics.audit.server;
2
3 import org.eclipse.jetty.server.Connector;
4 import org.eclipse.jetty.server.Server;
5 import org.eclipse.jetty.server.ServerConnector;
6 import org.eclipse.jetty.servlet.ServletContextHandler;
7 import org.eclipse.jetty.servlet.ServletHolder;
8 import org.glassfish.jersey.jackson.JacksonFeature;
9 import org.glassfish.jersey.server.ResourceConfig;
10 import org.glassfish.jersey.servlet.ServletContainer;
11 import org.slf4j.Logger;
12 import org.slf4j.LoggerFactory;
13
14 public class AuditLoggingServer {
15
16     private static final Logger LOGGER = LoggerFactory.getLogger(AuditLoggingServer.class);
17     
18     private static AuditLoggingServer INSTANCE = null;
19     private static Server server;
20     private static ServiceServerThread serverThread;
21
22     private AuditLoggingServer(String token, int preferablePort) {
23         ResourceConfig config = new ResourceConfig();
24         // JSON serialization/deserialization
25         config.register(JacksonFeature.class);
26         // Actual API
27         config.register(AuditLoggingAPI.class);
28         // Authorization
29 //        config.register(new AuthorizationFilter(token));
30         
31         ServletHolder holder = new ServletHolder(new ServletContainer(config));
32         
33         server = new Server();
34         ServerConnector connector = new ServerConnector(server);
35         connector.setPort(preferablePort);
36         
37         server.setConnectors(new Connector[] { connector });
38         
39         ServletContextHandler context = new ServletContextHandler(server, "/", ServletContextHandler.SESSIONS);
40         context.addServlet(holder, "/*");
41     }
42     
43     private static class ServiceServerThread extends Thread {
44
45         @Override
46         public void run() {
47             try {
48                 server.start();
49                 server.join();
50             } catch (Exception e) {
51                 LOGGER.error("Could not start server ", e);
52             }
53         }
54     }
55
56     private static synchronized AuditLoggingServer getInstance(String token, int port) {
57         try {
58             if (INSTANCE == null) {
59                 INSTANCE = new AuditLoggingServer(token, port);
60             }
61         } catch (Exception e) {
62             LOGGER.error("Could not initialize SCL REST server", e);
63         }
64         return INSTANCE;
65     }
66
67     public static synchronized void start(String token, int port) throws Exception {
68         // Ensure that an instance is created
69         getInstance(token, port);
70         if (serverThread == null && server != null) {
71             serverThread = new ServiceServerThread();
72             serverThread.start();
73         }
74     }
75     
76     public static synchronized void stop() throws Exception {
77         if (server != null)
78             server.stop();
79         serverThread = null;
80     }
81 }