/* * (c) Copyright Reserved EVRYTHNG Limited 2016. All rights reserved. * Use of this material is subject to license. * Copying and unauthorised use of this material strictly prohibited. */ package com.evrythng.commons.domain; import com.evrythng.commons.validation.Precondition; import com.evrythng.commons.validation.preconditions.NotNull; import org.apache.commons.lang3.builder.EqualsBuilder; import org.apache.commons.lang3.builder.HashCodeBuilder; import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; import static com.evrythng.commons.validation.EnsureThat.ensureThat; public abstract class Value<V> { private final V value; @SafeVarargs protected Value(final V value, final Precondition<V>... additionalPreconditions) { ensureThat(value, NotNull.<V>notNull(), additionalPreconditions); this.value = value; } protected final V internalValue() { return value; } @Override public final boolean equals(final Object other) { if (other == null || other.getClass() != getClass()) { return false; } Value<V> that = (Value<V>) other; EqualsBuilder equals = new EqualsBuilder(); equals.append(value, that.value); return equals.build(); } @Override public final int hashCode() { HashCodeBuilder hashCode = new HashCodeBuilder(); hashCode.append(value); return hashCode.build(); } @Override public final String toString() { ToStringBuilder toString = new ToStringBuilder(this, ToStringStyle.SIMPLE_STYLE); toString.append("value", value); return toString.build(); } }