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,R> 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 extends Servlet,R> 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