global.namespace.fun.io.delta.ArchivePatchBuilder Maven / Gradle / Ivy
package global.namespace.fun.io.delta;
import global.namespace.fun.io.api.ArchiveSink;
import global.namespace.fun.io.api.ArchiveSource;
import java.util.Optional;
import static java.util.Optional.empty;
/**
* A builder for an archive file patch.
*
* @author Christian Schlichtherle
*/
@SuppressWarnings({"OptionalUsedAsFieldOrParameterType", "ConstantConditions"})
public final class ArchivePatchBuilder {
private Optional> base = empty(), delta = empty();
ArchivePatchBuilder() { }
/**
* Returns this archive patch builder with the given source for reading the base archive file.
* This is an alias for {@link #base(ArchiveSource)}.
*/
public ArchivePatchBuilder first(ArchiveSource> base) { return base(base); }
/** Returns this archive patch builder with the given source for reading the base archive file. */
public ArchivePatchBuilder base(final ArchiveSource> base) {
this.base = Optional.of(base);
return this;
}
/** Returns this archive patch builder with the given source for reading the delta archive file. */
public ArchivePatchBuilder delta(final ArchiveSource> delta) {
this.delta = Optional.of(delta);
return this;
}
/** Writes the update archive file computed from the base and delta archive files to the given sink. */
@SuppressWarnings("unchecked")
public void to(ArchiveSink> update) throws Exception { build().to(update); }
private ArchivePatch, ?> build() { return create(base.get(), delta.get()); }
private static ArchivePatch create(ArchiveSource baseSource, ArchiveSource deltaSource) {
return new ArchivePatch() {
ArchiveSource baseSource() { return baseSource; }
ArchiveSource deltaSource() { return deltaSource; }
};
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy