All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.github.factoryfx.jetty.JettyServerBuilder Maven / Gradle / Ivy

package io.github.factoryfx.jetty;

import io.github.factoryfx.factory.FactoryBase;
import io.github.factoryfx.jetty.ssl.SslContextFactoryFactory;

import javax.servlet.DispatcherType;
import javax.servlet.Servlet;
import java.util.ArrayList;
import java.util.zip.Deflater;

public class JettyServerBuilder,S extends JettyServerFactory> {
    public S jettyServerFactory;
    private final JerseyServletFactory defaultJerseyServlet;
    private final UpdateableServletFactory updateableServletFactory;
    private final ServletAndPathFactory defaultJerseyServletAndPathFactory;

    public JettyServerBuilder(S jettyServerFactory){
        this.jettyServerFactory=jettyServerFactory;

        HttpServerConnectorFactory serverConnectorFactory = new HttpServerConnectorFactory<>();
        serverConnectorFactory.host.set("localhost");
        jettyServerFactory.connectors.add(serverConnectorFactory);


        HandlerCollectionFactory handlerCollection = new HandlerCollectionFactory<>();
        jettyServerFactory.handler.set(handlerCollection);

        GzipHandlerFactory gzipHandler = new GzipHandlerFactory<>();
        gzipHandler.minGzipSize.set(0);
        gzipHandler.compressionLevel.set(Deflater.DEFAULT_COMPRESSION);
        gzipHandler.deflaterPoolCapacity.set(-1);
        gzipHandler.dispatcherTypes.add(DispatcherType.REQUEST);
        gzipHandler.inflateBufferSize.set(-1);
        gzipHandler.syncFlush.set(false);
        handlerCollection.handlers.add(gzipHandler);

        ServletContextHandlerFactory servletContextHandlerFactory = new ServletContextHandlerFactory<>();
        gzipHandler.handler.set(servletContextHandlerFactory);

        updateableServletFactory = new UpdateableServletFactory<>();
        servletContextHandlerFactory.updatableRootServlet.set(updateableServletFactory);

        defaultJerseyServlet = new JerseyServletFactory<>();
        defaultJerseyServlet.objectMapper.set(new DefaultObjectMapperFactory<>());
        defaultJerseyServlet.restLogging.set(new Slf4LoggingFeatureFactory<>());
        defaultJerseyServlet.additionalJaxrsComponents.set(new ArrayList<>());

        defaultJerseyServletAndPathFactory = new ServletAndPathFactory<>();
        defaultJerseyServletAndPathFactory.pathSpec.set("/*");
        defaultJerseyServletAndPathFactory.servlet.set(defaultJerseyServlet);
        updateableServletFactory.servletAndPaths.add(defaultJerseyServletAndPathFactory);
    }

//    public JettyServerBuilder(){
//        this(new JettyServerFactory());
//    }


    public S build(){
        return jettyServerFactory;
    }

    public JettyServerBuilder withPort(int port){
        jettyServerFactory.connectors.get(0).port.set(port);
        return this;
    }

    public JettyServerBuilder withHost(String host){
        jettyServerFactory.connectors.get(0).host.set(host);
        return this;
    }

    public JettyServerBuilder withHostWildcard(){
        return withHost("0.0.0.0");
    }

    /**
     *  jetty for example picks a free port
     * read port: ((ServerConnector)server.getConnectors()[0]).getLocalPort().
     * @return builder
     */
    public JettyServerBuilder withRandomPort(){
        jettyServerFactory.connectors.get(0).port.set(0);
        return this;
    }

    public JettyServerBuilder withResource(FactoryBase resource){
        defaultJerseyServlet.resources.add(resource);
        return this;
    }

    public JettyServerBuilder withAdditionalConnector(HttpServerConnectorFactory httpServerConnectorFactory){
        jettyServerFactory.connectors.add(httpServerConnectorFactory);
        return this;
    }

    /**
     * set the base pathSpec for resources default is: /*
     *
     * @param pathSpec servlet spec path
     * @return builder
     */
    public JettyServerBuilder withResourcePathSpec(String pathSpec){
        defaultJerseyServletAndPathFactory.pathSpec.set(pathSpec);
        return this;
    }

    public JettyServerBuilder withJaxrsComponent(Object jaxrsComponent){
        defaultJerseyServlet.additionalJaxrsComponents.get().add(jaxrsComponent);
        return this;
    }

    public JettyServerBuilder removeDefaultJerseyServlet(){
        updateableServletFactory.servletAndPaths.remove(defaultJerseyServletAndPathFactory);
        return this;
    }

    public JettyServerBuilder withServlet(String pathSpec, FactoryBase servlet){
        ServletAndPathFactory servletAndPathFactory = new ServletAndPathFactory<>();
        servletAndPathFactory.pathSpec.set(pathSpec);
        servletAndPathFactory.servlet.set(servlet);
        updateableServletFactory.servletAndPaths.add(servletAndPathFactory);
        return this;
    }

    public JettyServerBuilder withSsl(SslContextFactoryFactory ssl) {
        jettyServerFactory.connectors.get(0).ssl.set(ssl);
        return this;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy