package com.github.dreamhead.moco.parser.model;
import com.github.dreamhead.moco.ResponseBase;
import com.github.dreamhead.moco.RestSetting;
import com.github.dreamhead.moco.RestSettingBuilder;
import com.google.common.base.Function;
import com.google.common.base.MoreObjects;
import com.google.common.collect.ImmutableList;
import java.util.List;
import static com.google.common.collect.FluentIterable.from;
public abstract class RestBaseSetting {
protected RequestSetting request;
protected ResponseSetting response;
protected abstract RestSettingBuilder startRestSetting();
@Override
public String toString() {
return MoreObjects.toStringHelper(this)
.omitNullValues()
.add("request", request)
.add("response", response)
.toString();
}
RestSetting toRestSetting() {
if (response == null) {
throw new IllegalArgumentException("Response is expected in rest setting");
}
return this.getRestSettingBuilder().response(response.getResponseHandler());
}
private ResponseBase<RestSetting> getRestSettingBuilder() {
RestSettingBuilder builder = this.startRestSetting();
if (request != null) {
return builder.request(request.getRequestMatcher());
}
return builder;
}
private static <T extends RestBaseSetting> Function<T, RestSetting> toSetting() {
return new Function<T, RestSetting>() {
@Override
public RestSetting apply(final T setting) {
return setting.toRestSetting();
}
};
}
public static Iterable<RestSetting> asRestSetting(final List<? extends RestBaseSetting> setting) {
if (setting == null || setting.isEmpty()) {
return ImmutableList.of();
}
return from(setting).transform(toSetting());
}
}