AggregateMember.java

package de.japrost.jabudget.domain.account;

/**
 * A member of an aggregate. Has a key as unique identifier.
 */
public abstract class AggregateMember {

	/** Separator between parts of a key */
	public static final String KEY_SEPARATOR = ":";

	/**
	 * Get the key of the {@link AggregateMember}.
	 *
	 * @return the key, composed with the KEY_SEPARATOR.
	 */
	public abstract String key();

	/**
	 * {@inheritDoc} <br>
	 * <strong>This implementation</strong> uses the {@link AggregateMember#key()}.
	 */
	@Override
	public int hashCode() {
		return key().hashCode();
	}

	/**
	 * {@inheritDoc} <br>
	 * <strong>This implementation</strong> uses the {@link AggregateMember#key()}.
	 */
	@Override
	public boolean equals(final Object obj) {
		if (this == obj) {
			return true;
		}
		if (!(obj instanceof AggregateMember)) {
			return false;
		}
		final AggregateMember other = (AggregateMember) obj;
		if (key().equals(other.key())) {
			return true;
		}
		return false;
	}

}