com.github.dreamhead.moco.internal.BaseActualServer Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of moco-core Show documentation
Show all versions of moco-core Show documentation
Moco is an easy setup stub framework, mainly focusing on testing and integration.
package com.github.dreamhead.moco.internal;
import com.github.dreamhead.moco.ConfigApplier;
import com.github.dreamhead.moco.MocoConfig;
import com.github.dreamhead.moco.MocoEventTrigger;
import com.github.dreamhead.moco.MocoMonitor;
import com.github.dreamhead.moco.RequestMatcher;
import com.github.dreamhead.moco.ResponseHandler;
import com.github.dreamhead.moco.ResponseSetting;
import com.github.dreamhead.moco.setting.Setting;
import com.google.common.base.Optional;
import com.google.common.collect.ImmutableList;
import java.util.List;
import static com.github.dreamhead.moco.RequestMatcher.ANY_REQUEST_MATCHER;
import static com.github.dreamhead.moco.util.Configs.configItem;
import static com.github.dreamhead.moco.util.Configs.configItems;
import static com.google.common.base.Optional.of;
import static com.google.common.collect.Lists.newArrayList;
public abstract class BaseActualServer, U extends BaseActualServer> extends BaseServer {
protected abstract Setting newSetting(final RequestMatcher matcher);
private final MocoConfig[] configs;
private final MocoMonitor monitor;
private final List> settings = newArrayList();
private Optional port;
private RequestMatcher anyMatcher = ANY_REQUEST_MATCHER;
public BaseActualServer(final Optional port, final MocoMonitor monitor, final MocoConfig[] configs) {
this.port = port;
this.monitor = monitor;
this.configs = configs;
}
@Override
public int port() {
if (port.isPresent()) {
return port.get();
}
throw new IllegalStateException("unbound port should not be returned");
}
public void setPort(final int port) {
this.port = of(port);
}
public ImmutableList> getSettings() {
return configItems(settings, configs);
}
public Setting getAnySetting() {
Setting setting = newSetting(configuredAnyMatcher());
if (this.handler != null) {
setting.response(configuredAnyResponseHandler());
}
for (MocoEventTrigger trigger : eventTriggers) {
setting.on(trigger);
}
return setting;
}
protected Optional getPort() {
return port;
}
public MocoMonitor getMonitor() {
return monitor;
}
protected void addSetting(final Setting setting) {
this.settings.add(setting);
}
protected void addEvents(final List eventTriggers) {
this.eventTriggers.addAll(eventTriggers);
}
protected void anySetting(final RequestMatcher anyMatcher, final ResponseHandler handler) {
if (handler != null) {
this.response(handler);
this.anyMatcher = anyMatcher;
}
}
protected void addSettings(final ImmutableList> thatSettings) {
for (Setting thatSetting : thatSettings) {
addSetting(thatSetting);
}
}
private > V configured(final V source) {
return configItem(source, this.configs);
}
protected RequestMatcher configuredAnyMatcher() {
return configured(this.anyMatcher);
}
protected ResponseHandler configuredAnyResponseHandler() {
return configured(this.handler);
}
@SuppressWarnings("unchecked")
public U mergeServer(final U thatServer) {
U newServer = createMergeServer(thatServer);
newServer.addSettings(this.getSettings());
newServer.addSettings(thatServer.getSettings());
newServer.anySetting(configuredAnyMatcher(), this.configuredAnyResponseHandler());
newServer.anySetting(thatServer.configuredAnyMatcher(), thatServer.configuredAnyResponseHandler());
newServer.addEvents(this.eventTriggers);
newServer.addEvents(thatServer.eventTriggers);
return newServer;
}
protected abstract U createMergeServer(final U thatServer);
}