Skip to content

Commit

Permalink
JAMES-1958 Rely on this configuration object to start WebAdmin server
Browse files Browse the repository at this point in the history
  • Loading branch information
chibenwa committed Mar 15, 2017
1 parent 6ae498a commit da41f83
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 46 deletions.
Expand Up @@ -20,21 +20,20 @@
package org.apache.james.modules.server; package org.apache.james.modules.server;


import static org.apache.james.webadmin.WebAdminServer.NO_CONFIGURATION; import static org.apache.james.webadmin.WebAdminServer.NO_CONFIGURATION;
import static org.apache.james.webadmin.WebAdminServer.WEBADMIN_ENABLED;
import static org.apache.james.webadmin.WebAdminServer.WEBADMIN_PORT;


import java.io.FileNotFoundException; import java.io.FileNotFoundException;
import java.util.List; import java.util.List;


import org.apache.commons.configuration.ConfigurationException; import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.PropertiesConfiguration;
import org.apache.james.lifecycle.api.Configurable; import org.apache.james.lifecycle.api.Configurable;
import org.apache.james.utils.ConfigurationPerformer; import org.apache.james.utils.ConfigurationPerformer;
import org.apache.james.utils.GuiceProbe; import org.apache.james.utils.GuiceProbe;
import org.apache.james.utils.PropertiesProvider; import org.apache.james.utils.PropertiesProvider;
import org.apache.james.utils.WebAdminGuiceProbe; import org.apache.james.utils.WebAdminGuiceProbe;
import org.apache.james.webadmin.FixedPort; import org.apache.james.webadmin.FixedPort;
import org.apache.james.webadmin.Port;
import org.apache.james.webadmin.Routes; import org.apache.james.webadmin.Routes;
import org.apache.james.webadmin.WebAdminConfiguration;
import org.apache.james.webadmin.WebAdminServer; import org.apache.james.webadmin.WebAdminServer;
import org.apache.james.webadmin.routes.DomainRoutes; import org.apache.james.webadmin.routes.DomainRoutes;
import org.apache.james.webadmin.routes.UserMailboxesRoutes; import org.apache.james.webadmin.routes.UserMailboxesRoutes;
Expand All @@ -49,7 +48,6 @@
import com.google.inject.Scopes; import com.google.inject.Scopes;
import com.google.inject.Singleton; import com.google.inject.Singleton;
import com.google.inject.multibindings.Multibinder; import com.google.inject.multibindings.Multibinder;
import com.google.inject.name.Named;


public class WebAdminServerModule extends AbstractModule { public class WebAdminServerModule extends AbstractModule {


Expand All @@ -68,22 +66,17 @@ protected void configure() {
} }


@Provides @Provides
@Named(WEBADMIN_PORT) public WebAdminConfiguration provideWebAdminConfiguration(PropertiesProvider propertiesProvider) throws Exception {
public Port provideWebAdminPort(PropertiesProvider propertiesProvider) throws Exception {
try { try {
return new FixedPort(propertiesProvider.getConfiguration("webadmin").getInt("port", WebAdminServer.DEFAULT_PORT)); PropertiesConfiguration configurationFile = propertiesProvider.getConfiguration("webadmin");
return WebAdminConfiguration.builder()
.enable(configurationFile.getBoolean("enabled", false))
.port(new FixedPort(configurationFile.getInt("port", WebAdminServer.DEFAULT_PORT)))
.build();
} catch (FileNotFoundException e) { } catch (FileNotFoundException e) {
return new FixedPort(WebAdminServer.DEFAULT_PORT); return WebAdminConfiguration.builder()
} .disabled()
} .build();

@Provides
@Named(WEBADMIN_ENABLED)
public boolean provideWebAdminEnabled(PropertiesProvider propertiesProvider) throws Exception {
try {
return propertiesProvider.getConfiguration("webadmin").getBoolean("enabled", false);
} catch (FileNotFoundException e) {
return false;
} }
} }


Expand Down
Expand Up @@ -19,15 +19,11 @@


package org.apache.james.webadmin.integration; package org.apache.james.webadmin.integration;


import static org.apache.james.webadmin.WebAdminServer.WEBADMIN_ENABLED;
import static org.apache.james.webadmin.WebAdminServer.WEBADMIN_PORT;

import org.apache.james.webadmin.Port;
import org.apache.james.webadmin.RandomPort; import org.apache.james.webadmin.RandomPort;
import org.apache.james.webadmin.WebAdminConfiguration;


import com.google.inject.AbstractModule; import com.google.inject.AbstractModule;
import com.google.inject.Provides; import com.google.inject.Provides;
import com.google.inject.name.Named;


public class WebAdminConfigurationModule extends AbstractModule { public class WebAdminConfigurationModule extends AbstractModule {


Expand All @@ -37,14 +33,11 @@ protected void configure() {
} }


@Provides @Provides
@Named(WEBADMIN_PORT) public WebAdminConfiguration provideWebAdminConfiguration() throws Exception {
public Port provideWebAdminPort() throws Exception { return WebAdminConfiguration.builder()
return new RandomPort(); .enabled()
.port(new RandomPort())
.build();
} }


@Provides
@Named(WEBADMIN_ENABLED)
public boolean provideWebAdminEnabled() throws Exception {
return true;
}
} }
Expand Up @@ -24,7 +24,6 @@


import javax.annotation.PreDestroy; import javax.annotation.PreDestroy;
import javax.inject.Inject; import javax.inject.Inject;
import javax.inject.Named;


import org.apache.commons.configuration.ConfigurationException; import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.HierarchicalConfiguration; import org.apache.commons.configuration.HierarchicalConfiguration;
Expand All @@ -41,43 +40,41 @@ public class WebAdminServer implements Configurable {


private static final Logger LOGGER = LoggerFactory.getLogger(WebAdminServer.class); private static final Logger LOGGER = LoggerFactory.getLogger(WebAdminServer.class);
public static final HierarchicalConfiguration NO_CONFIGURATION = null; public static final HierarchicalConfiguration NO_CONFIGURATION = null;
public static final String WEBADMIN_PORT = "webadmin_port";
public static final String WEBADMIN_ENABLED = "webadmin_enabled";
public static final int DEFAULT_PORT = 8080; public static final int DEFAULT_PORT = 8080;


private final Port port; private final WebAdminConfiguration configuration;
private final Set<Routes> routesList; private final Set<Routes> routesList;
private final boolean enabled;
private final Service service; private final Service service;


// Spark do not allow to retrieve allocated port when using a random port. Thus we generate the port. // Spark do not allow to retrieve allocated port when using a random port. Thus we generate the port.


@Inject @Inject
private WebAdminServer(@Named(WEBADMIN_ENABLED) boolean enabled, @Named(WEBADMIN_PORT)Port port, Set<Routes> routesList) { private WebAdminServer(WebAdminConfiguration configuration, Set<Routes> routesList) {
this.port = port; this.configuration = configuration;
this.routesList = routesList; this.routesList = routesList;
this.enabled = enabled;
this.service = Service.ignite(); this.service = Service.ignite();
} }


@VisibleForTesting @VisibleForTesting
public WebAdminServer(Routes... routes) throws IOException { public WebAdminServer(Routes... routes) throws IOException {
this(true, new RandomPort(), ImmutableSet.copyOf(routes)); this(WebAdminConfiguration.builder()
.enabled()
.port(new RandomPort())
.build(),
ImmutableSet.copyOf(routes));
} }


@Override @Override
public void configure(HierarchicalConfiguration config) throws ConfigurationException { public void configure(HierarchicalConfiguration config) throws ConfigurationException {
if (enabled) { if (configuration.isEnabled()) {
service.port(port.toInt()); service.port(configuration.getPort().toInt());
routesList.forEach(routes -> routes.define(service)); routesList.forEach(routes -> routes.define(service));
LOGGER.info("Web admin server started"); LOGGER.info("Web admin server started");
} }
} }


@PreDestroy @PreDestroy
public void destroy() { public void destroy() {
if (enabled) { if (configuration.isEnabled()) {
service.stop(); service.stop();
LOGGER.info("Web admin server stopped"); LOGGER.info("Web admin server stopped");
} }
Expand All @@ -88,6 +85,6 @@ public void await() {
} }


public Port getPort() { public Port getPort() {
return port; return configuration.getPort();
} }
} }

0 comments on commit da41f83

Please sign in to comment.