
net.anthavio.httl.cache.Builders Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of hatatitla Show documentation
Show all versions of hatatitla Show documentation
Compact but tweakable REST client library you have been dreaming of
The newest version!
package net.anthavio.httl.cache;
import java.io.Serializable;
import java.util.concurrent.TimeUnit;
import net.anthavio.cache.Builders.BaseCacheRequestBuilder;
import net.anthavio.cache.ConfiguredCacheLoader.ExpiredFailedRecipe;
import net.anthavio.cache.ConfiguredCacheLoader.MissingFailedRecipe;
import net.anthavio.httl.HttlResponseExtractor;
import net.anthavio.httl.HttlRequest;
import net.anthavio.httl.HttlResponse;
import net.anthavio.httl.HttlResponseExtractor.ExtractedResponse;
/**
* Fluent builders for CachingSender Requests
*
* @author martin.vanek
*
*/
public class Builders {
/**
* Base builder for existing SenderRequest
*
* @author martin.vanek
*
*/
public static abstract class BaseRequestBuilder> extends BaseCacheRequestBuilder {
protected final HttlRequest request;
public BaseRequestBuilder(HttlRequest request) {
if (request == null) {
throw new IllegalArgumentException("null request");
}
this.request = request;
}
}
/**
* Fluent builder for CachingRequest
*
* @author martin.vanek
*
*/
public static class CachingRequestBuilder extends BaseRequestBuilder {
private final CachingSender csender;
private boolean missingLoadAsync = false;
private MissingFailedRecipe misingFailedRecipe;
private boolean expiredLoadAsync = false;
private ExpiredFailedRecipe expiredFailedRecipe;
public CachingRequestBuilder(CachingSender csender, HttlRequest request) {
super(request);
if (csender == null) {
throw new IllegalArgumentException("null sender");
}
this.csender = csender;
}
public BaseRequestBuilder async(boolean missing, boolean expired) {
this.missingLoadAsync = missing;
this.expiredLoadAsync = expired;
return getSelf();
}
public BaseRequestBuilder missing(boolean asynchronous, MissingFailedRecipe onFailure) {
this.missingLoadAsync = asynchronous;
this.misingFailedRecipe = onFailure;
return getSelf();
}
public BaseRequestBuilder expired(boolean asynchronous, ExpiredFailedRecipe onFailure) {
this.expiredLoadAsync = asynchronous;
this.expiredFailedRecipe = onFailure;
return getSelf();
}
public final CachingSenderRequest build() {
if (misingFailedRecipe == null) {
if (missingLoadAsync) {
misingFailedRecipe = MissingFailedRecipe.ASYN_STRICT;
} else {
misingFailedRecipe = MissingFailedRecipe.SYNC_STRICT;
}
}
if (expiredFailedRecipe == null) {
if (expiredLoadAsync) {
expiredFailedRecipe = ExpiredFailedRecipe.ASYN_STRICT;
} else {
expiredFailedRecipe = ExpiredFailedRecipe.SYNC_STRICT;
}
}
return new CachingSenderRequest(request, missingLoadAsync, misingFailedRecipe, expiredLoadAsync,
expiredFailedRecipe, hardTtl, softTtl, TimeUnit.SECONDS, cacheKey);
}
/**
* Execute Request and return raw unprocessed Response.
* Response is left open and caller is responsibe for closing.
*/
public HttlResponse execute() {
if (hardTtl != 0) {
return csender.execute(build()).getValue();
} else {
return csender.execute(request);
}
}
/**
* Execute Request and extract Response. Response is closed automaticaly.
*/
public ExtractedResponse extract(Class clazz) {
if (hardTtl != 0) {
return csender.extract(build(), clazz);
} else {
return csender.extract(request, clazz);
}
}
/**
* Execute request and extract response. Response is closed automaticaly.
*/
public ExtractedResponse extract(HttlResponseExtractor extractor) {
if (hardTtl != 0) {
return csender.extract(build(), extractor);
} else {
return csender.extract(request, extractor);
}
}
@Override
protected CachingRequestBuilder getSelf() {
return this;
}
}
/**
* Fluent builder for CachingExtractorRequest
*
* @author martin.vanek
*
*/
public static class ExtractingRequestBuilder extends BaseRequestBuilder {
private CachingExtractor cextractor;
private boolean missingLoadAsync = false;
private MissingFailedRecipe misingFailedRecipe;
private boolean expiredLoadAsync = false;
private ExpiredFailedRecipe expiredFailedRecipe;
public ExtractingRequestBuilder(CachingExtractor cextractor, HttlRequest request) {
super(request);
if (cextractor == null) {
throw new IllegalArgumentException("CachingExtractor is null");
}
this.cextractor = cextractor;
}
@Override
protected ExtractingRequestBuilder getSelf() {
return this;
}
public ExtractingRequestBuilder async(boolean missing, boolean expired) {
this.missingLoadAsync = missing;
this.expiredLoadAsync = expired;
return getSelf();
}
public ExtractingRequestBuilder missing(boolean asynchronous, MissingFailedRecipe onFailure) {
this.missingLoadAsync = asynchronous;
this.misingFailedRecipe = onFailure;
return getSelf();
}
public ExtractingRequestBuilder expired(boolean asynchronous, ExpiredFailedRecipe onFailure) {
this.expiredLoadAsync = asynchronous;
this.expiredFailedRecipe = onFailure;
return getSelf();
}
/**
* Finish fluent builder flow and return CachingExtractorRequest
*/
public CachingExtractorRequest build(HttlResponseExtractor extractor) {
if (extractor == null) {
throw new IllegalArgumentException("response extractor is null");
}
if (misingFailedRecipe == null) {
if (missingLoadAsync) {
misingFailedRecipe = MissingFailedRecipe.ASYN_STRICT;
} else {
misingFailedRecipe = MissingFailedRecipe.SYNC_STRICT;
}
}
if (expiredFailedRecipe == null) {
if (expiredLoadAsync) {
expiredFailedRecipe = ExpiredFailedRecipe.ASYN_STRICT;
} else {
expiredFailedRecipe = ExpiredFailedRecipe.SYNC_STRICT;
}
}
return new CachingExtractorRequest(extractor, request, missingLoadAsync, misingFailedRecipe, expiredLoadAsync,
expiredFailedRecipe, hardTtl, softTtl, TimeUnit.SECONDS, cacheKey);
}
/**
* Finish fluent builder flow and return CachingExtractorRequest
*/
public CachingExtractorRequest build(Class resultType) {
if (resultType == null) {
throw new IllegalArgumentException("response type is null");
}
if (misingFailedRecipe == null) {
if (missingLoadAsync) {
misingFailedRecipe = MissingFailedRecipe.ASYN_STRICT;
} else {
misingFailedRecipe = MissingFailedRecipe.SYNC_STRICT;
}
}
if (expiredFailedRecipe == null) {
if (expiredLoadAsync) {
expiredFailedRecipe = ExpiredFailedRecipe.ASYN_STRICT;
} else {
expiredFailedRecipe = ExpiredFailedRecipe.SYNC_STRICT;
}
}
return new CachingExtractorRequest(resultType, request, missingLoadAsync, misingFailedRecipe,
expiredLoadAsync, expiredFailedRecipe, hardTtl, softTtl, TimeUnit.SECONDS, cacheKey);
}
/**
* Go and extract!
public T extract(Class resultType) {
CachingExtractorRequest build = build(resultType);
return (T) cextractor.extract(build).getValue();
}
*/
/**
* Go and extract!
public T extract(ResponseBodyExtractor extractor) {
CachingExtractorRequest build = build(extractor);
return (T) cextractor.extract(build).getValue();
}
*/
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy