/** * JBoss, Home of Professional Open Source * Copyright Red Hat, Inc., and individual contributors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.jboss.aerogear.simplepush.server; /** * Configuration settings for SimplePush server */ public final class DefaultSimplePushConfig implements SimplePushServerConfig { private final String host; private final int port; private final boolean endpointTls; private final String password; private final String endpointPrefix; private final String endpointUrl; private final String endpointHost; private final int endpointPort; private final long reaperTimeout; private final long ackInterval; private final int notifierMaxThreads; private DefaultSimplePushConfig(final Builder builder) { host = builder.host; port = builder.port; endpointHost = builder.endpointHost == null ? host : builder.endpointHost; endpointPort = builder.endpointPort <= 0 ? port : builder.endpointPort; endpointTls = builder.endpointTls; endpointPrefix = builder.endpointPrefix.startsWith("/") ? builder.endpointPrefix : "/" + builder.endpointPrefix; endpointUrl = makeEndpointUrl(endpointHost, endpointPort, endpointPrefix, endpointTls); reaperTimeout = builder.timeout; ackInterval = builder.ackInterval; password = builder.password; notifierMaxThreads = builder.notifierMaxThreads; } private static String makeEndpointUrl(final String endpointHost, final int endpointPort, final String prefix, final boolean tls) { return new StringBuilder(tls ? "https://" : "http://") .append(endpointHost).append(":").append(endpointPort) .append(prefix) .toString(); } @Override public String host() { return host; } @Override public int port() { return port; } @Override public String password() { return password; } @Override public boolean useEndpointTls() { return endpointTls; } @Override public String endpointUrl() { return endpointUrl; } @Override public String endpointPrefix() { return endpointPrefix; } @Override public String endpointHost() { return endpointHost; } @Override public int endpointPort() { return endpointPort; } @Override public long userAgentReaperTimeout() { return reaperTimeout; } @Override public long acknowledmentInterval() { return ackInterval; } @Override public int notifierMaxThreads() { return notifierMaxThreads; } public String toString() { return new StringBuilder("SimplePushConfig[host=").append(host) .append(", port=").append(port) .append(", endpointHost=").append(endpointHost) .append(", endpointPort=").append(endpointPort) .append(", endpointTls=").append(endpointTls) .append(", endpointUrlPrefix=").append(endpointPrefix) .append(", endpointUrl=").append(endpointUrl) .append(", reaperTimeout=").append(reaperTimeout) .append(", ackInterval=").append(ackInterval) .append(", notifierMaxThreads=").append(notifierMaxThreads) .append("]").toString(); } public static Builder create() { return new DefaultSimplePushConfig.Builder().host("127.0.0.1").port(7777); } public static Builder create(final String host, final int port) { return new DefaultSimplePushConfig.Builder().host(host).port(port); } public static class Builder { private String host; private int port; private String password; private boolean endpointTls; private String endpointPrefix = DEFAULT_ENDPOINT_URL_PREFIX; private String endpointHost; private int endpointPort; private long timeout = 604800000L; private long ackInterval = 60000; private int notifierMaxThreads = Runtime.getRuntime().availableProcessors(); public Builder host(final String host) { if (host != null) { this.host = host; } return this; } public Builder port(final int port) { this.port = port; return this; } public Builder password(final String password) { this.password = password; return this; } public Builder endpointTls(final boolean tls) { endpointTls = tls; return this; } public Builder endpointHost(final String endpointHost) { this.endpointHost = endpointHost; return this; } public Builder endpointPrefix(final String endpointPrefix) { if (endpointPrefix != null) { this.endpointPrefix = endpointPrefix; } return this; } public Builder endpointPort(final int endpointPort) { this.endpointPort = endpointPort; return this; } public Builder userAgentReaperTimeout(final Long ms) { if (ms != null) { this.timeout = ms; } return this; } public Builder ackInterval(final Long ms) { if (ms != null) { this.ackInterval = ms; } return this; } public Builder notifierMaxThreads(final int maxThreads) { notifierMaxThreads = maxThreads; return this; } public SimplePushServerConfig build() { if (password == null) { throw new IllegalStateException("No 'password' was configured!"); } return new DefaultSimplePushConfig(this); } } }