diff --git a/docsys/src/main/java/io/nosqlbench/docsys/core/NBWebServer.java b/docsys/src/main/java/io/nosqlbench/docsys/core/NBWebServer.java index 7c3be7be7..acc703ff2 100644 --- a/docsys/src/main/java/io/nosqlbench/docsys/core/NBWebServer.java +++ b/docsys/src/main/java/io/nosqlbench/docsys/core/NBWebServer.java @@ -4,6 +4,9 @@ import io.nosqlbench.docsys.DocsysDefaultAppPath; import io.nosqlbench.docsys.api.Docs; import io.nosqlbench.docsys.api.WebServiceObject; import io.nosqlbench.docsys.handlers.FavIconHandler; +import io.nosqlbench.nb.api.spi.SimpleServiceLoader; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import org.eclipse.jetty.rewrite.handler.RewriteHandler; import org.eclipse.jetty.server.*; import org.eclipse.jetty.server.handler.DefaultHandler; @@ -22,8 +25,6 @@ import org.glassfish.jersey.server.ResourceConfig; import org.glassfish.jersey.server.ServerProperties; import org.glassfish.jersey.server.model.ResourceMethod; import org.glassfish.jersey.servlet.ServletContainer; -import org.apache.logging.log4j.Logger; -import org.apache.logging.log4j.LogManager; import javax.servlet.DispatcherType; import javax.servlet.ServletRegistration; @@ -34,8 +35,9 @@ import java.net.URL; import java.nio.file.AccessMode; import java.nio.file.Files; import java.nio.file.Path; -import java.util.*; import java.util.List; +import java.util.*; +import java.util.regex.Pattern; import java.util.stream.Collectors; /** @@ -43,7 +45,7 @@ import java.util.stream.Collectors; */ public class NBWebServer implements Runnable { - private final static Logger logger = LogManager.getLogger(NBWebServer.class); + private final static Logger logger = LogManager.getLogger(NBWebServer.class); private final List basePaths = new ArrayList<>(); private final List servletClasses = new ArrayList<>(); @@ -55,9 +57,9 @@ public class NBWebServer implements Runnable { private String bindHost = "localhost"; private int bindPort = 12345; - private final Map contextParams = new LinkedHashMap<>(); + private final Map contextParams = new LinkedHashMap<>(); - public NBWebServer withContextParams(Map cp) { + public NBWebServer withContextParams(Map cp) { this.contextParams.putAll(cp); return this; } @@ -98,7 +100,7 @@ public class NBWebServer implements Runnable { return this; } - private void addWebObject(Class... objects) { + private void addWebObject(Class... objects) { servletClasses.addAll(Arrays.asList(objects)); // String servletClasses = this.servletClasses // .stream() @@ -113,11 +115,22 @@ public class NBWebServer implements Runnable { } private void loadDynamicEndpoints() { - List serviceObjects = WebObjectLoader.loadWebServiceObjects(); - for (WebServiceObject serviceObject : serviceObjects) { - logger.info("Adding web service object: " + serviceObject.toString()); - this.addWebObject(serviceObject.getClass()); + List includeApps = List.of(Pattern.compile(".*")); + if (contextParams.containsKey("include-apps")) { + includeApps = Arrays.asList(contextParams.get("include-apps").toString().split(", *")) + .stream() + .map(Pattern::compile) + .collect(Collectors.toList()); } + + SimpleServiceLoader svcLoader = new SimpleServiceLoader<>(WebServiceObject.class); + svcLoader.getNamedProviders().values() + .forEach(p -> { + Class c = p.type(); + logger.info("Adding web service object: " + c.getSimpleName()); + this.addWebObject(c); + }); + logger.debug("Loaded " + this.servletClasses.size() + " root resources."); } @@ -133,8 +146,8 @@ public class NBWebServer implements Runnable { private ServletHolder getServletHolder() { if (servletHolder == null) { servletHolder = getContextHandler().addServlet( - ServletContainer.class, - "/apps" + ServletContainer.class, + "/apps" ); servletHolder.setInitOrder(0); } @@ -234,9 +247,9 @@ public class NBWebServer implements Runnable { ServletContainer container = new ServletContainer(rc); ServletHolder servlets = new ServletHolder(container); String classnames = this.servletClasses - .stream() - .map(Class::getCanonicalName) - .collect(Collectors.joining(",")); + .stream() + .map(Class::getCanonicalName) + .collect(Collectors.joining(",")); rc.property(ServerProperties.PROVIDER_CLASSNAMES, classnames); // servlets.setInitParameter(ServerProperties.PROVIDER_CLASSNAMES, // classnames @@ -260,7 +273,7 @@ public class NBWebServer implements Runnable { filterMapping.setPathSpec("/*"); filterMapping.setServletName("cross-origin"); - sch.addFilter(filter,"/*", EnumSet.of(DispatcherType.REQUEST,DispatcherType.ASYNC)); + sch.addFilter(filter, "/*", EnumSet.of(DispatcherType.REQUEST, DispatcherType.ASYNC)); handlers.addHandler(sch); @@ -272,7 +285,6 @@ public class NBWebServer implements Runnable { handlers.addHandler(defaultHandler); - // FilterMapping corsMapping = new FilterMapping(); // corsMapping.set // @@ -297,7 +309,7 @@ public class NBWebServer implements Runnable { connectors.add(sc); } else if (bindScheme.equals("https")) { SslContextFactory.Server server1 = new SslContextFactory.Server(); - ServerConnector sc = new ServerConnector(server,server1); + ServerConnector sc = new ServerConnector(server, server1); sc.setPort(bindPort); sc.setHost(bindHost); // sc.setDefaultProtocol(bindScheme); @@ -308,10 +320,10 @@ public class NBWebServer implements Runnable { server.start(); - System.out.println("Started documentation server at "+ bindScheme + "://" + bindHost + ":" + bindPort + "/"); + System.out.println("Started documentation server at " + bindScheme + "://" + bindHost + ":" + bindPort + "/"); if (Desktop.isDesktopSupported() && Desktop.getDesktop().isSupported(Desktop.Action.BROWSE)) { - System.out.println("Browsing to documentation server at "+ bindScheme + "://" + bindHost + ":" + bindPort + "/"); + System.out.println("Browsing to documentation server at " + bindScheme + "://" + bindHost + ":" + bindPort + "/"); Desktop.getDesktop().browse(new URI(bindScheme + "://" + bindHost + ":" + bindPort + "/")); System.out.println("If the docs app did not open automatically in your browser, open to the the url above."); } @@ -357,16 +369,16 @@ public class NBWebServer implements Runnable { if (handler instanceof ResourceHandler) { ResourceHandler h = (ResourceHandler) handler; sb.append(" base resource: ").append(h.getBaseResource().toString()) - .append("\n"); + .append("\n"); sb.append(h.dump()); } else if (handler instanceof ServletContextHandler) { ServletContextHandler h = (ServletContextHandler) handler; sb.append(h.dump()).append("\n"); h.getServletContext().getServletRegistrations().forEach( - (k, v) -> { - sb.append("==> servlet type ").append(k).append("\n"); - sb.append(getServletSummary(v)).append("\n"); - } + (k, v) -> { + sb.append("==> servlet type ").append(k).append("\n"); + sb.append(getServletSummary(v)).append("\n"); + } ); sb.append("context path:").append(h.getContextPath()); } else if (handler instanceof DefaultHandler) { @@ -378,6 +390,6 @@ public class NBWebServer implements Runnable { private String getServletSummary(ServletRegistration v) { return v.getClassName() + "('" + v.getName() + "')" + v.getInitParameters().keySet().stream().map( - k -> k + "=" + v.getInitParameters().get(k)).collect(Collectors.joining(",")); + k -> k + "=" + v.getInitParameters().get(k)).collect(Collectors.joining(",")); } } diff --git a/docsys/src/main/java/io/nosqlbench/docsys/core/DocServerApp.java b/docsys/src/main/java/io/nosqlbench/docsys/core/NBWebServerApp.java similarity index 96% rename from docsys/src/main/java/io/nosqlbench/docsys/core/DocServerApp.java rename to docsys/src/main/java/io/nosqlbench/docsys/core/NBWebServerApp.java index f1ac5a698..012457e86 100644 --- a/docsys/src/main/java/io/nosqlbench/docsys/core/DocServerApp.java +++ b/docsys/src/main/java/io/nosqlbench/docsys/core/NBWebServerApp.java @@ -11,8 +11,8 @@ import java.nio.file.Path; import java.nio.file.StandardOpenOption; import java.util.Arrays; -public class DocServerApp { - private static final Logger logger = LogManager.getLogger(DocServerApp.class); +public class NBWebServerApp { + private static final Logger logger = LogManager.getLogger(NBWebServerApp.class); public static void main(String[] args) { if (args.length > 0 && args[0].contains("help")) { @@ -20,7 +20,7 @@ public class DocServerApp { } else if (args.length > 0 && args[0].contains("generate")) { try { String[] genargs = Arrays.copyOfRange(args, 1, args.length); - logger.info("Generating with args ["+String.join("][",args)+"]"); + logger.info("Generating with args [" + String.join("][", args) + "]"); generate(genargs); } catch (IOException e) { logger.error("could not generate files with command " + String.join(" ", args));