package com.github.nyrkovalex.ironadmin.server; import com.github.nyrkovalex.ironadmin.core.servlet.AdminDispatcherServlet; import org.eclipse.jetty.server.Handler; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.servlet.DefaultServlet; import org.eclipse.jetty.servlet.ServletContextHandler; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.net.URL; public class IronAdminServer { public static final String STATIC_RESOURCE_DIR = "ui"; private static final String DEFAULT_MAPPING = "/admin/*"; private static final Logger LOG = LoggerFactory.getLogger(IronAdminServer.class); private final int port; private String mapping; public IronAdminServer(int port) { this(port, DEFAULT_MAPPING); } public IronAdminServer(int port, String mapping) { this.port = port; this.mapping = mapping; } public void start() { Server server = createServer(); try { server.start(); LOG.info("Started Iron Admin server at port {}", port); server.join(); } catch (Exception e) { LOG.error("Failed to start Iron Admin server. See the cause for details", e); } } private Server createServer() { Server server = new Server(port); Handler servletHandler = createServletHandler(); server.setHandler(servletHandler); return server; } private Handler createServletHandler() { ServletContextHandler servletHandler = new ServletContextHandler(); URL resourceUri = getClass().getClassLoader().getResource(STATIC_RESOURCE_DIR); if (resourceUri == null) { throw new IllegalStateException("Static resources directory was not found in classpath:" + STATIC_RESOURCE_DIR); } else { String staticDir = resourceUri.toExternalForm(); servletHandler.setResourceBase(staticDir); servletHandler.setContextPath("."); servletHandler.addServlet(DefaultServlet.class, "/"); } servletHandler.addServlet(AdminDispatcherServlet.class, mapping); return servletHandler; } }