package com.github.dreamhead.moco.internal;
import com.github.dreamhead.moco.Moco;
import com.github.dreamhead.moco.MocoMonitor;
import com.github.dreamhead.moco.RequestExtractor;
import com.github.dreamhead.moco.RequestMatcher;
import com.github.dreamhead.moco.ResponseHandler;
import com.github.dreamhead.moco.handler.failover.DefaultFailoverExecutor;
import com.github.dreamhead.moco.handler.failover.FailoverExecutor;
import com.github.dreamhead.moco.matcher.ContainMatcher;
import com.github.dreamhead.moco.matcher.EndsWithMatcher;
import com.github.dreamhead.moco.matcher.MatchMatcher;
import com.github.dreamhead.moco.matcher.StartsWithMatcher;
import com.github.dreamhead.moco.monitor.CompositeMonitor;
import com.github.dreamhead.moco.monitor.DefaultLogFormatter;
import com.github.dreamhead.moco.monitor.FileLogWriter;
import com.github.dreamhead.moco.monitor.LogMonitor;
import com.github.dreamhead.moco.monitor.LogWriter;
import com.github.dreamhead.moco.resource.Resource;
import com.github.dreamhead.moco.resource.reader.ExtractorVariable;
import com.github.dreamhead.moco.resource.reader.Variable;
import com.google.common.base.Function;
import com.google.common.base.Optional;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Maps;
import java.io.File;
import java.nio.charset.Charset;
import static com.github.dreamhead.moco.util.Iterables.asIterable;
import static com.google.common.collect.Maps.transformEntries;
public final class ApiUtils {
public static MocoMonitor mergeMonitor(final MocoMonitor monitor, final MocoMonitor monitor2,
final MocoMonitor[] monitors) {
return new CompositeMonitor(asIterable(monitor, monitor2, monitors));
}
private static Maps.EntryTransformer<String, RequestExtractor<?>, Variable> toVariable() {
return new Maps.EntryTransformer<String, RequestExtractor<?>, Variable>() {
@Override
@SuppressWarnings("unchecked")
public Variable transformEntry(final String key, final RequestExtractor<?> value) {
return new ExtractorVariable(value);
}
};
}
public static ImmutableMap<String, Variable> toVariables(
final ImmutableMap<String, ? extends RequestExtractor<?>> variables) {
return ImmutableMap.copyOf(transformEntries(variables, toVariable()));
}
public static Function<String, ResponseHandler> textToResource() {
return new Function<String, ResponseHandler>() {
@Override
public ResponseHandler apply(final String content) {
return Moco.with(Moco.text(content));
}
};
}
public static Function<Resource, ResponseHandler> resourceToResourceHandler() {
return new Function<Resource, ResponseHandler>() {
@Override
public ResponseHandler apply(final Resource content) {
return Moco.with(content);
}
};
}
public static FailoverExecutor failoverExecutor(final String file) {
return new DefaultFailoverExecutor(new File(file));
}
public static LogWriter fileLogWriter(final String filename, final Optional<Charset> charset) {
return new FileLogWriter(filename, charset);
}
public static MocoMonitor log(final LogWriter writer) {
return new LogMonitor(new DefaultLogFormatter(), writer);
}
public static <T> RequestMatcher match(final RequestExtractor<T> extractor, final Resource expected) {
return new MatchMatcher<T>(extractor, expected);
}
public static <T> RequestMatcher startsWith(final RequestExtractor<T> extractor, final Resource resource) {
return new StartsWithMatcher<T>(extractor, resource);
}
public static <T> RequestMatcher endsWith(final RequestExtractor<T> extractor, final Resource resource) {
return new EndsWithMatcher<T>(extractor, resource);
}
public static <T> RequestMatcher contain(final RequestExtractor<T> extractor, final Resource resource) {
return new ContainMatcher<T>(extractor, resource);
}
private ApiUtils() {
}
}