Account.java
- package de.japrost.jabudget.domain.account;
- import static java.util.Objects.requireNonNull;
- import java.io.Serializable;
- import java.util.Objects;
- import java.util.Optional;
- /**
- * An account in JaBudGet.<br>
- * The Account is identified by its id.
- */
- public class Account implements Serializable {
- private static final long serialVersionUID = 1L;
- private final String id;
- private String name;
- /**
- * Create an account.
- *
- * @param id the id. MUST NOT be {@code null}.
- */
- public Account(final String id) {
- requireNonNull(id, "'id' MUST NOT be null.");
- this.id = id;
- }
- /**
- * Gets the identity of the Account.
- *
- * @return the identity of an Account.
- */
- public String getId() {
- return id;
- }
- /**
- * Gets the given name of the Account.
- *
- * @return the given name. If no name is given returns an empty String.
- */
- public String getName() {
- if (Objects.nonNull(name)) {
- return name;
- } else {
- return "";
- }
- }
- /**
- * Sets the given name of the Account.
- *
- * @param name the new given name. SHOULD NOT BE {@code null}.
- */
- public void setName(final String name) {
- this.name = name;
- }
- /**
- * {@inheritDoc}
- * <p>
- * <strong>This implementation</strong> uses just {@link Account#id}.
- */
- @Override
- public int hashCode() {
- return id.hashCode();
- }
- /**
- * {@inheritDoc}
- * <p>
- * <strong>This implementation</strong> uses just {@link Account#id}.
- */
- @Override
- public boolean equals(final Object obj) {
- if (this == obj) {
- return true;
- }
- if (obj == null) {
- return false;
- }
- if (getClass() != obj.getClass()) {
- return false;
- }
- final Account other = (Account) obj;
- if (!id.equals(other.id)) {
- return false;
- }
- return true;
- }
- /**
- * {@inheritDoc}
- * <p>
- * <strong>This implementation</strong> shows all fields.
- */
- @Override
- public String toString() {
- final StringBuilder builder = new StringBuilder();
- builder.append("Account [id=").append(id).append(", name=").append(name).append("]");
- return builder.toString();
- }
- /**
- * Builder for {@link Account}s.
- */
- public static class Builder {
- private String id;
- private String name;
- /**
- * Create an empty account builder.
- */
- public Builder() {
- }
- /**
- * Create an account builder with all required fields.
- *
- * @param id the id. MUST NOT be {@code null}.
- */
- public Builder(final String id) {
- this.id = id;
- }
- /**
- * Create an account builder by example;
- *
- * @param account the example account. MAY BE {@code null}.
- */
- public Builder(final Account account) {
- if (account != null) {
- this.id = account.id;
- this.name = account.name;
- }
- }
- /**
- * Create an empty account builder.
- *
- * @return the {@link Builder}.
- */
- public static Builder builder() {
- return new Builder();
- }
- /**
- * Create an account builder with all required fields.
- *
- * @param id the id. MUST NOT be {@code null}.
- * @return the {@link Builder}.
- */
- public static Builder builder(final String id) {
- return new Builder(id);
- }
- /**
- * Create an account builder by example;
- *
- * @param account the example account.
- * @return the {@link Builder}.
- */
- public static Builder builder(final Account account) {
- return new Builder(account);
- }
- /**
- * Build the account.
- *
- * @return a new account instance.
- */
- public Account build() {
- final Account result = new Account(id);
- result.name = name;
- return result;
- }
- /**
- * Build the account if it would be valid.
- *
- * @return a new account instance or an empty optional.
- */
- public Optional<Account> buildOptional() {
- if (id == null) {
- return Optional.empty();
- }
- final Account result = new Account(id);
- result.name = name;
- return Optional.of(result);
- }
- /**
- * Sets the id of an Account. MUST NOT be {@code null}.
- *
- * @param id the id of an Account
- * @return this
- */
- public Builder setId(final String id) {
- this.id = id;
- return this;
- }
- /**
- * Sets the given name of an Account.
- *
- * @param name the new given name of an Account
- * @return this
- */
- public Builder setName(final String name) {
- this.name = name;
- return this;
- }
- }
- }