package freenet.node;
/**
* Fluent-style builder for {@link RequestClient} implementations. The default {@code
* RequestClient} built by this builder is not persistent and not real-time.
*
* @author <a href="mailto:bombe@freenetproject.org">David ‘Bombe’ Roden</a>
*/
public class RequestClientBuilder {
private boolean persistent;
private boolean realTime;
public RequestClientBuilder persistent() {
persistent = true;
return this;
}
public RequestClientBuilder persistent(boolean persistent) {
this.persistent = persistent;
return this;
}
public RequestClientBuilder realTime() {
realTime = true;
return this;
}
public RequestClientBuilder realTime(boolean realTime) {
this.realTime = realTime;
return this;
}
/**
* Builds a {@link RequestClient}. Once this method has been called the returned {@code
* RequestClient} is not connected to this builder anymore; the resulting {@code RequestClient}
* will never change. With this it’s possible to reuse this builder instances for creating more
* {@code RequestClient}s.
*
* @return A new {@code RequestClient} with the given settings
*/
public RequestClient build() {
return new RequestClient() {
private final boolean persistent = RequestClientBuilder.this.persistent;
private final boolean realTime = RequestClientBuilder.this.realTime;
@Override
public boolean persistent() {
return persistent;
}
@Override
public boolean realTimeFlag() {
return realTime;
}
};
}
}