Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 39 additions & 4 deletions pippo-core/src/main/java/ro/pippo/core/AbstractWebServer.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,10 @@
*/
public abstract class AbstractWebServer<T extends WebServerSettings> implements WebServer<T> {

protected PippoFilter pippoFilter;
private PippoFilter pippoFilter;
protected String pippoFilterPath;

protected PippoSettings pippoSettings;
private Application application;
private T settings;

protected List<Class<? extends EventListener>> listeners;
Expand All @@ -49,13 +49,26 @@ public T getSettings() {

@Override
public PippoFilter getPippoFilter() {
if (pippoFilter == null) {
setPippoFilter(createPippoFilter());
}

return pippoFilter;
}

/**
* Set the {@link PippoFilter} instance.
* This method call {@link PippoFilter#setApplication(Application)} to end.
*
* @param pippoFilter
* @return
*/
@Override
public WebServer<T> setPippoFilter(PippoFilter pippoFilter) {
this.pippoFilter = pippoFilter;

pippoFilter.setApplication(application);

return this;
}

Expand All @@ -74,8 +87,8 @@ public WebServer<T> setPippoFilterPath(String pippoFilterPath) {
}

@Override
public WebServer<T> init(PippoSettings pippoSettings) {
this.pippoSettings = pippoSettings;
public WebServer<T> init(Application application) {
this.application = application;

return this;
}
Expand All @@ -87,4 +100,26 @@ public WebServer<T> addListener(Class<? extends EventListener> listener) {
return this;
}

public Application getApplication() {
return application;
}

/**
* Override this method if you want to customize the {@link PippoFilter}.
* <p/>
* <pre>
* protected PippoFilter createPippoFilter() {
* PippoFilter pippoFilter = super.createPippoFilter();
* pippoFilter.setIgnorePaths(Collections.singleton("/favicon.ico"));
*
* return pippoFilter;
* }
* </pre>
*
* @return
*/
protected PippoFilter createPippoFilter() {
return new PippoFilter();
}

}
43 changes: 5 additions & 38 deletions pippo-core/src/main/java/ro/pippo/core/Pippo.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,11 @@

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import ro.pippo.core.reload.ReloadClassLoader;
import ro.pippo.core.reload.ReloadWatcher;
import ro.pippo.core.route.ResourceRouting;
import ro.pippo.core.route.Route;
import ro.pippo.core.route.RouteGroup;
import ro.pippo.core.reload.ReloadWatcher;
import ro.pippo.core.reload.ReloadClassLoader;
import ro.pippo.core.util.ServiceLocator;

import java.io.IOException;
Expand Down Expand Up @@ -130,11 +130,7 @@ public WebServer getServer() {
*/
public Pippo setServer(WebServer server) {
this.server = server;

Application application = getApplication();
PippoFilter pippoFilter = createPippoFilter(application);
PippoSettings pippoSettings = application.getPippoSettings();
this.server.setPippoFilter(pippoFilter).init(pippoSettings);
this.server.init(getApplication());

return this;
}
Expand All @@ -151,7 +147,7 @@ public void start(int port) {

public void start() {
if (running) {
log.warn("Server is already started ");
log.warn("Server is already started");
return;
}

Expand Down Expand Up @@ -211,28 +207,6 @@ public static Pippo send(final String text) {
return pippo;
}

/**
* Override this method if you want to customize the PippoFilter.
* <p/>
* <pre>
* protected PippoFilter createPippoFilter(Application application) {
* PippoFilter pippoFilter = super.createPippoFilter(application);
* pippoFilter.setIgnorePaths(Collections.singleton("/favicon.ico"));
*
* return pippoFilter;
* }
* </pre>
*
* @param application
* @return
*/
protected PippoFilter createPippoFilter(Application application) {
PippoFilter pippoFilter = new PippoFilter();
pippoFilter.setApplication(application);

return pippoFilter;
}

protected void startReloadWatcher() {
if (reloadWatcher == null) {
reloadWatcher = createReloadWatcher();
Expand Down Expand Up @@ -271,14 +245,7 @@ public void onEvent(ReloadWatcher.Event event, Path dir, Path path) {
}

private void addShutdownHook() {
Runtime.getRuntime().addShutdownHook(new Thread() {

@Override
public void run() {
Pippo.this.stop();
}

});
Runtime.getRuntime().addShutdownHook(new Thread(Pippo.this::stop));
}

private Application createApplication() {
Expand Down
2 changes: 1 addition & 1 deletion pippo-core/src/main/java/ro/pippo/core/WebServer.java
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ public interface WebServer<T extends WebServerSettings> {
*/
WebServer<T> setPippoFilterPath(String pippoFilterPath);

WebServer<T> init(PippoSettings pippoSettings);
WebServer<T> init(Application application);

void start();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ public void stop() {

@Override
protected JettySettings createDefaultSettings() {
return new JettySettings(pippoSettings);
return new JettySettings(getApplication().getPippoSettings());
}

protected void internalStart() {
Expand Down Expand Up @@ -166,7 +166,7 @@ protected ServletContextHandler createPippoHandler() {
handler.setContextPath(getSettings().getContextPath());

// inject application as context attribute
handler.setAttribute(PIPPO_APPLICATION, pippoFilter.getApplication());
handler.setAttribute(PIPPO_APPLICATION, getApplication());

// add pippo filter
addPippoFilter(handler);
Expand All @@ -187,7 +187,7 @@ protected ServletContextHandler createPippoHandler() {
}

private MultipartConfigElement createMultipartConfigElement() {
Application application = pippoFilter.getApplication();
Application application = getApplication();
String location = application.getUploadLocation();
long maxFileSize = application.getMaximumUploadSize();

Expand All @@ -201,7 +201,7 @@ private void addPippoFilter(ServletContextHandler handler) {

EnumSet<DispatcherType> dispatches = EnumSet.of(DispatcherType.REQUEST, DispatcherType.ERROR);

FilterHolder pippoFilterHolder = new FilterHolder(pippoFilter);
FilterHolder pippoFilterHolder = new FilterHolder(getPippoFilter());
handler.addFilter(pippoFilterHolder, pippoFilterPath, dispatches);
log.debug("Using pippo filter for path '{}'", pippoFilterPath);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@ public WebServer<WebServerSettings> addListener(Class<? extends EventListener> l

@Override
protected WebServerSettings createDefaultSettings() {
return new WebServerSettings(pippoSettings);
return new WebServerSettings(getApplication().getPippoSettings());
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,6 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import ro.pippo.core.AbstractWebServer;
import ro.pippo.core.Application;
import ro.pippo.core.PippoFilter;
import ro.pippo.core.PippoRuntimeException;
import ro.pippo.core.PippoServlet;
import ro.pippo.core.PippoServletContextListener;
Expand All @@ -45,7 +43,6 @@ public class TomcatServer extends AbstractWebServer<TomcatSettings> {

private static final Logger log = LoggerFactory.getLogger(TomcatServer.class);

private Application application;
private Tomcat tomcat;

private final ExecutorService executor = Executors.newSingleThreadExecutor();
Expand Down Expand Up @@ -73,18 +70,9 @@ public void stop() {
}
}

@Override
public WebServer setPippoFilter(PippoFilter pippoFilter) {
super.setPippoFilter(pippoFilter);

application = pippoFilter.getApplication();

return this;
}

@Override
protected TomcatSettings createDefaultSettings() {
return new TomcatSettings(pippoSettings);
return new TomcatSettings(getApplication().getPippoSettings());
}

protected void internalStart() {
Expand All @@ -105,7 +93,7 @@ protected void internalStart() {
Context context = tomcat.addContext(getSettings().getContextPath(), docBase.getAbsolutePath());
context.setAllowCasualMultipartParsing(true);
PippoServlet pippoServlet = new PippoServlet();
pippoServlet.setApplication(application);
pippoServlet.setApplication(getApplication());

Wrapper wrapper = context.createWrapper();
String name = "pippoServlet";
Expand All @@ -117,7 +105,7 @@ protected void internalStart() {
context.addServletMapping(pippoFilterPath, name);

// inject application as context attribute
context.getServletContext().setAttribute(PIPPO_APPLICATION, application);
context.getServletContext().setAttribute(PIPPO_APPLICATION, getApplication());

// add initializers
context.addApplicationListener(PippoServletContextListener.class.getName());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ public void stop() {

@Override
protected UndertowSettings createDefaultSettings() {
return new UndertowSettings(pippoSettings);
return new UndertowSettings(getApplication().getPippoSettings());
}

protected Undertow createServer(HttpHandler contextHandler) {
Expand Down Expand Up @@ -171,7 +171,7 @@ protected DeploymentManager createPippoDeploymentManager() throws ServletExcepti
info.setIgnoreFlush(true);

// inject application as context attribute
info.addServletContextAttribute(PIPPO_APPLICATION, pippoFilter.getApplication());
info.addServletContextAttribute(PIPPO_APPLICATION, getApplication());

// add pippo filter
addPippoFilter(info);
Expand All @@ -196,7 +196,7 @@ protected DeploymentManager createPippoDeploymentManager() throws ServletExcepti
}

private MultipartConfigElement createMultipartConfigElement() {
Application application = pippoFilter.getApplication();
Application application = getApplication();
String location = application.getUploadLocation();
long maxFileSize = application.getMaximumUploadSize();

Expand All @@ -208,7 +208,7 @@ private void addPippoFilter(DeploymentInfo info) {
pippoFilterPath = "/*"; // default value
}

info.addFilter(new FilterInfo("PippoFilter", PippoFilter.class, new ImmediateInstanceFactory<>(pippoFilter)));
info.addFilter(new FilterInfo("PippoFilter", PippoFilter.class, new ImmediateInstanceFactory<>(getPippoFilter())));
info.addFilterUrlMapping("PippoFilter", pippoFilterPath, DispatcherType.REQUEST);
log.debug("Using pippo filter for path '{}'", pippoFilterPath);
}
Expand Down