
io.airlift.http.server.WebServerBuilder Maven / Gradle / Ivy
package io.airlift.http.server;
import static com.google.inject.matcher.Matchers.annotatedWith;
import java.io.File;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.servlet.Filter;
import javax.servlet.http.HttpServlet;
import javax.ws.rs.Path;
import org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher;
import com.google.common.base.Joiner;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import io.airlift.http.server.model.WebServerDefinitionBuilder;
public class WebServerBuilder {
private WebServerDefinitionBuilder webServerDefinitionBuilder;
public WebServerBuilder() {
webServerDefinitionBuilder = new WebServerDefinitionBuilder();
}
public WebServerBuilder port(int port) {
webServerDefinitionBuilder.port(port);
return this;
}
public WebServerBuilder filter(String pattern) {
webServerDefinitionBuilder.filter(pattern);
return this;
}
public WebServerBuilder through(Class extends Filter> filterClass) {
webServerDefinitionBuilder.through(filterClass);
return this;
}
public WebServerBuilder serve(String pattern) {
return serve(pattern, Lists.newArrayList());
}
public WebServerBuilder serve(String pattern, List welcomeFiles) {
webServerDefinitionBuilder.serve(pattern, welcomeFiles);
return this;
}
public WebServerBuilder with(Class extends HttpServlet> servletClass) {
return with(servletClass, Maps.newHashMap());
}
public WebServerBuilder with(Class extends HttpServlet> servletClass, Map parameters) {
webServerDefinitionBuilder.with(servletClass, parameters);
return this;
}
public WebServerBuilder with(HttpServlet servlet) {
webServerDefinitionBuilder.with(servlet);
return this;
}
public WebServerBuilder with(File war) {
webServerDefinitionBuilder.with(war);
return this;
}
public WebServerBuilder at(String path) {
webServerDefinitionBuilder.at(path);
return this;
}
public WebServerBuilder resource(String resource) {
return resource(resource, Lists.newArrayList(), false);
}
public WebServerBuilder resourceWithListing(String resource) {
return resource(resource, Lists.newArrayList(), true);
}
public WebServerBuilder resource(String resource, List welcomeFiles) {
return resource(resource, welcomeFiles, false);
}
public WebServerBuilder resource(String resource, List welcomeFiles, boolean listing) {
webServerDefinitionBuilder.resource(resource, welcomeFiles, listing);
return this;
}
public WebServer build() {
return new JettyWebServer(webServerDefinitionBuilder.build());
}
public WebServerBuilder withJaxRs() {
String callingClassName = Thread.currentThread().getStackTrace()[2].getClassName();
try {
Class> callingClass = Thread.currentThread().getContextClassLoader().loadClass(callingClassName);
Set> resourceClasses = Classes.matching(annotatedWith(Path.class)).in(callingClass.getPackage());
Set resourceClassNames = Sets.newHashSet();
for (Class> clazz : resourceClasses) {
resourceClassNames.add(clazz.getName());
}
with(HttpServletDispatcher.class,
ImmutableMap.of( //
"resteasy.providers", GsonMessageBodyHandler.class.getName(),
"resteasy.resources", Joiner.on(",").join(resourceClassNames), //
"resteasy.servlet.mapping.prefix", "/api"));
} catch (ClassNotFoundException e) {
throw new RuntimeException("Cannot determine package for JAXRS resource scanning.");
}
return this;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy