
com.github.davidmoten.rx.buffertofile.Options Maven / Gradle / Ivy
package com.github.davidmoten.rx.buffertofile;
import java.io.File;
import java.io.IOException;
import com.github.davidmoten.util.Preconditions;
import rx.functions.Func0;
public final class Options {
public static final String DEFAULT_FILE_PREFIX = "bufferToFileDb";
private final Func0 fileFactory;
private final boolean delayError;
private final long rolloverEvery;
private final long rolloverSizeBytes;
private final int bufferSizeBytes;
private Options(Func0 filefactory, boolean delayError, long rolloverEvery, int bufferSizeBytes,
long rolloverSizeBytes) {
Preconditions.checkNotNull(filefactory);
Preconditions.checkArgument(rolloverSizeBytes > 0, "rolloverSizeBytes must be greater than zero");
Preconditions.checkArgument(rolloverEvery > 1, "rolloverEvery must be greater than one");
Preconditions.checkArgument(bufferSizeBytes > 0, "bufferSizeBytes must be greater than 0");
this.fileFactory = filefactory;
this.delayError = delayError;
this.rolloverEvery = rolloverEvery;
this.rolloverSizeBytes = rolloverSizeBytes;
this.bufferSizeBytes = bufferSizeBytes;
}
public Func0 fileFactory() {
return fileFactory;
}
public boolean delayError() {
return delayError;
}
public long rolloverEvery() {
return rolloverEvery;
}
public long rolloverSizeBytes() {
return rolloverSizeBytes;
}
public int bufferSizeBytes() {
return bufferSizeBytes;
}
public boolean rolloverEnabled() {
return rolloverSizeBytes != Long.MAX_VALUE || rolloverEvery != Long.MAX_VALUE;
}
/**
* Defaults are {@code cacheType=CacheType.SOFT_REF},
* {@code cacheSizeItems=absent (UNLIMITED)},
* {@code storageSizeLimitBytes=absent (UNLIMITED)}.
*
* @return a builder object for Options
*/
private static Builder builder() {
return new Builder();
}
public static Builder fileFactory(Func0 fileFactory) {
return builder().fileFactory(fileFactory);
}
public static Builder delayError(boolean delayError) {
return builder().delayError(delayError);
}
public static Builder rolloverEvery(long rolloverEvery) {
return builder().rolloverEvery(rolloverEvery);
}
public static Builder rolloverSizeBytes(long rolloverSizeBytes) {
return builder().rolloverSizeBytes(rolloverSizeBytes);
}
public static Builder rolloverSizeMB(double rolloverSizeMB) {
return builder().rolloverSizeMB(rolloverSizeMB);
}
public static Builder disableRollover() {
return builder().disableRollover();
}
public static Builder bufferSizeBytes(int bufferSizeBytes) {
return builder().bufferSizeBytes(bufferSizeBytes);
}
public static Options defaultInstance() {
return builder().build();
}
public static class Builder {
private Func0 fileFactory = FileFactoryHolder.INSTANCE;
private boolean delayError = true;
private long rolloverSizeBytes = Long.MAX_VALUE;
private long rolloverEvery = 1000000;
private int bufferSizeBytes = 1024;
private Builder() {
}
public Builder rolloverSizeMB(double rolloverSizeMB) {
return rolloverSizeBytes(Math.round(rolloverSizeMB * 1024 * 1024));
}
public Builder rolloverSizeBytes(long rolloverSizeBytes) {
this.rolloverSizeBytes = rolloverSizeBytes;
return this;
}
public Builder disableRollover() {
this.rolloverSizeBytes = Long.MAX_VALUE;
return rolloverEvery(Long.MAX_VALUE);
}
public Builder bufferSizeBytes(int bufferSizeBytes) {
this.bufferSizeBytes = bufferSizeBytes;
return this;
}
public Builder rolloverEvery(long rolloverEvery) {
this.rolloverEvery = rolloverEvery;
return this;
}
/**
* Sets the file factory to be used by the queue storage mechanism.
* Defaults to using {@code File.createTempFile("bufferToFileDb","")} if
* this method is not called.
*
* @param fileFactory
* the factory
* @return the current builder
*/
public Builder fileFactory(Func0 fileFactory) {
this.fileFactory = fileFactory;
return this;
}
/**
* Sets if errors are delayed or not when detected. Defaults to
* {@code false} if this method not called.
*
* @param delayError
* if true errors do not shortcut the queue.
* @return the current builder
*/
public Builder delayError(boolean delayError) {
this.delayError = delayError;
return this;
}
public Options build() {
return new Options(fileFactory, delayError, rolloverEvery, bufferSizeBytes, rolloverSizeBytes);
}
}
private static class FileFactoryHolder {
private static final Func0 INSTANCE = new Func0() {
@Override
public File call() {
try {
return File.createTempFile(DEFAULT_FILE_PREFIX, "");
} catch (IOException e) {
throw new RuntimeException(e);
}
}
};
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy