EntryBuilder.java
package de.japrost.jabudget.domain.account;
import java.util.Optional;
/**
* Builder for {@link Entry}.
*/
public class EntryBuilder {
private String accountId;
private String code;
private String subject;
/**
* Create an empty builder.
*/
public EntryBuilder() {
}
/**
* Create a builder by example.
*
* @param example the example to use. MAY BE {@code null}.
*/
public EntryBuilder(final Entry example) {
if (example != null) {
this.accountId = example.getAccountId();
this.code = example.getCode();
this.subject = example.getSubject();
}
}
/**
* Factory for a an empty builder.
*
* @return a new builder.
*/
public static EntryBuilder builder() {
return new EntryBuilder();
}
/**
* Factory for a builder by example.
*
* @param example the example to use. MAY BE {@code null}.
* @return a builder filled with value of example.
*/
public static EntryBuilder builder(Entry example) {
return new EntryBuilder(example);
}
/**
* Build the result.
*
* @return a new instance.
*/
public Entry build() {
final Entry result = new Entry(accountId,code,subject);
return result;
}
/**
* Build if the result would be valid.
*
* @return a instance or an empty optional.
*/
public Optional<Entry> buildOptional() {
// TODO where to put this validation?
if (accountId == null || code == null || subject == null) {
return Optional.empty();
}
final Entry result = new Entry(accountId,code,subject);
return Optional.of(result);
}
/**
* @see Entry#getAccountId()
*/
public void setAccountId(String accountId) {
this.accountId = accountId;
}
/**
* @see Entry#getCode()
*/
public void setCode(String code) {
this.code = code;
}
/**
* @see Entry#getSubject()
*/
public void setSubject(String subject) {
this.subject = subject;
}
}