package be.swsb.fiazard.ddd; import static com.google.common.base.Preconditions.checkState; import static org.apache.commons.lang.builder.ToStringStyle.SIMPLE_STYLE; import org.apache.commons.lang.builder.EqualsBuilder; import org.apache.commons.lang.builder.HashCodeBuilder; import org.apache.commons.lang.builder.ToStringBuilder; class Versioning { private int aggregateVersionAfterReconstruction; private int currentAggregateVersion; private Versioning(int aggregateVersionAfterReconstruction, int currentAggregateVersion) { this.aggregateVersionAfterReconstruction = aggregateVersionAfterReconstruction; this.currentAggregateVersion = currentAggregateVersion; } static Versioning initVersioningAfterAggregateReconstruction(int initialAggregateVersion) { return new Versioning(initialAggregateVersion, initialAggregateVersion); } Versioning newEventRecorded(DomainEvent event) { checkState(event.getVersion() == getNextEventVersion()); return new Versioning(this.aggregateVersionAfterReconstruction, event.getVersion()); } int getNextEventVersion() { return currentAggregateVersion + 1; } int getAggregateVersionAfterReconstruction() { return aggregateVersionAfterReconstruction; } @Override public boolean equals(Object obj) { return EqualsBuilder.reflectionEquals(this, obj); } @Override public int hashCode() { return HashCodeBuilder.reflectionHashCode(this); }; @Override public String toString() { return ToStringBuilder.reflectionToString(this, SIMPLE_STYLE); }; }