package com.github.dreamhead.moco.runner;
import com.github.dreamhead.moco.Moco;
import com.github.dreamhead.moco.MocoConfig;
import com.github.dreamhead.moco.parser.model.RequestSetting;
import com.github.dreamhead.moco.parser.model.ResponseSetting;
import com.google.common.base.Optional;
import java.io.InputStream;
import static com.google.common.base.Optional.absent;
import static com.google.common.base.Optional.fromNullable;
import static com.google.common.base.Optional.of;
public final class RunnerSetting {
private InputStream stream;
private final Optional<RequestSetting> request;
private final Optional<ResponseSetting> response;
private final Optional<String> context;
private final Optional<String> fileRoot;
private RunnerSetting(final InputStream stream, final String context, final String fileRoot,
final RequestSetting requestSetting, final ResponseSetting response) {
this.stream = stream;
this.request = fromNullable(requestSetting);
this.response = fromNullable(response);
this.context = fromNullable(context);
this.fileRoot = fromNullable(fileRoot);
}
public InputStream getStream() {
return stream;
}
public Optional<MocoConfig> context() {
if (context.isPresent()) {
return of(Moco.context(context.get()));
}
return absent();
}
public Optional<MocoConfig> fileRoot() {
if (fileRoot.isPresent()) {
return of(Moco.fileRoot(fileRoot.get()));
}
return absent();
}
public Optional<MocoConfig> request() {
if (request.isPresent()) {
return of(Moco.request(request.get().getRequestMatcher()));
}
return absent();
}
public Optional<MocoConfig> response() {
if (response.isPresent()) {
return of(Moco.response(response.get().getResponseHandler()));
}
return absent();
}
public static Builder aRunnerSetting() {
return new Builder();
}
public static class Builder {
private InputStream stream;
private RequestSetting request;
private ResponseSetting response;
private String context;
private String fileRoot;
public Builder withStream(final InputStream stream) {
this.stream = stream;
return this;
}
public Builder withRequest(final RequestSetting request) {
this.request = request;
return this;
}
public Builder withResponse(final ResponseSetting response) {
this.response = response;
return this;
}
public Builder withContext(final String context) {
this.context = context;
return this;
}
public Builder withFileRoot(final String fileRoot) {
this.fileRoot = fileRoot;
return this;
}
public RunnerSetting build() {
return new RunnerSetting(stream, context, fileRoot, request, response);
}
}
}