package com.github.signed.changelog;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
public class VersionBuilder {
public static VersionBuilder For(VersionNumber versionNumber) {
return new VersionBuilder().version(versionNumber);
}
private final List<CategoryBuilder> categories = new ArrayList<>();
private Optional<ReleaseDate> maybeReleaseDate = Optional.empty();
private Optional<VersionNumber> maybeVersionNumber = Optional.empty();
private Optional<Link> maybeLink = Optional.empty();
public VersionBuilder unreleased() {
maybeReleaseDate = Optional.empty();
maybeVersionNumber = Optional.empty();
return this;
}
public CategoryBuilder added() {
CategoryBuilder added = CategoryBuilder.added();
category(added);
return added;
}
public CategoryBuilder changed() {
CategoryBuilder changed = CategoryBuilder.changed();
category(changed);
return changed;
}
public CategoryBuilder deprecated() {
CategoryBuilder deprecated = CategoryBuilder.deprecated();
category(deprecated);
return deprecated;
}
public CategoryBuilder removed() {
CategoryBuilder removed = CategoryBuilder.removed();
category(removed);
return removed;
}
public CategoryBuilder fixed() {
CategoryBuilder fixed = CategoryBuilder.fixed();
category(fixed);
return fixed;
}
public CategoryBuilder security() {
CategoryBuilder security = CategoryBuilder.security();
category(security);
return security;
}
public VersionBuilder category(CategoryBuilder categoryBuilder){
categories.add(categoryBuilder);
return this;
}
public VersionBuilder releasedAt(ReleaseDate releaseDate) {
this.maybeReleaseDate = Optional.of(releaseDate);
return this;
}
public VersionBuilder version(VersionNumber versionNumber){
this.maybeVersionNumber = Optional.of(versionNumber);
return this;
}
public VersionBuilder link(Link link) {
maybeLink = Optional.of(link);
return this;
}
public Version build() {
return new Version(maybeReleaseDate, maybeVersionNumber, maybeLink, categories.stream().map(CategoryBuilder::build).collect(Collectors.toList()));
}
}