Entry.java

package de.japrost.jabudget.domain.account;

import static java.util.Objects.requireNonNull;

import java.io.Serializable;

/**
 * An entry in an {@link Account}.<br>
 */
public class Entry extends AggregateMember implements Serializable {

	private static final long serialVersionUID = 1L;
	/** The identity of the Account the Entry resides in. */
	private final String accountId;
	/** The code of the entry. */
	private final String code;
	/** The subject of the entry */
	private final String subject;

	// TODO use jabudegt-utils with requireNonNull
	// TODO write tests that fields could not be null
	/**
	 * Create an Entry.
	 *
	 * @param accountId the account id
	 * @param code the code
	 * @param subject the subject
	 */
	public Entry(final String accountId, final String code, final String subject) {
		requireNonNull(accountId, "'accountId' MUST NOT be null.");
		requireNonNull(code, "'code' MUST NOT be null.");
		requireNonNull(subject, "'subject' MUST NOT be null.");
		this.accountId = accountId;
		this.code = code;
		this.subject = subject;
	}

	/**
	 * Gets the identity of the Account the Entry resides in.
	 *
	 * @return the identity of the Account the Entry resides in
	 */

	public String getAccountId() {
		return accountId;
	}

	/**
	 * Gets the code of the entry.
	 *
	 * @return the code of the entry
	 */
	public String getCode() {
		return code;
	}

	/**
	 * Gets the subject of the entry.
	 *
	 * @return the subject of the entry
	 */
	public String getSubject() {
		return subject;
	}

	/**
	 * {@inheritDoc}
	 * <p>
	 * <strong>This implementation</strong> concats accountId and code.
	 */

	@Override
	public String key() {
		return accountId + KEY_SEPARATOR + code;
	}

	/**
	 * {@inheritDoc}
	 * <p>
	 * <strong>This implementation</strong> show all fields.
	 */

	@Override
	public String toString() {
		StringBuilder builder = new StringBuilder();
		builder.append("Entry [accountId=").append(accountId).append(", code=").append(code).append(", subject=")
				.append(subject).append("]");
		return builder.toString();
	}

}