4545import javax .annotation .CheckReturnValue ;
4646import java .lang .reflect .InvocationTargetException ;
4747import java .lang .reflect .Method ;
48- import java .util .Collection ;
49- import java .util .Collections ;
5048import java .util .List ;
51- import java .util .Set ;
5249
5350import static com .google .common .base .Preconditions .checkNotNull ;
5451import static com .google .common .base .Throwables .propagate ;
55- import static com .google .common .collect .Collections2 .filter ;
5652import static org .spine3 .base .Identifiers .idToAny ;
5753
5854//TODO:2016-02-17:alexander.yevsyukov: Define syntax of event applier methods.
@@ -307,22 +303,16 @@ public void play(Iterable<Event> events) {
307303 * @param messages the event message to apply
308304 * @param commandContext the context of the command, execution of which produces the passed events
309305 * @throws InvocationTargetException if an exception occurs during event applying
310- * @see #getStateNeutralEventClasses()
311306 */
312307 private void apply (Iterable <? extends Message > messages , CommandContext commandContext ) throws InvocationTargetException {
313- final Set <Class <? extends Message >> stateNeutralEventClasses = getStateNeutralEventClasses ();
314308
315309 //TODO:2016-03-24:alexander.yevsyukov: Init the builder of the state. Add getBuilder() method.
316310 // Assume that the code of event appliers would call getBuilder() instead of getState().
317311 // Throw IllegalStateException in the getBuilder() method if it's called from other stages of
318312 // the aggregate lifecycle.
319313
320314 for (Message message : messages ) {
321- final boolean isStateNeutral = stateNeutralEventClasses .contains (message .getClass ());
322- if (!isStateNeutral ) {
323- apply (message );
324- }
325- //TODO:2016-03-24:alexander.yevsyukov: increment version
315+ apply (message );
326316
327317 final int currentVersion = getVersion ();
328318 final M state = getState ();
@@ -331,7 +321,6 @@ private void apply(Iterable<? extends Message> messages, CommandContext commandC
331321 putUncommitted (event );
332322 }
333323
334- //TODO:2016-03-24:alexander.yevsyukov: set new date/time
335324
336325 //TODO:2016-03-24:alexander.yevsyukov: set new state
337326 //TODO:2016-03-24:alexander.yevsyukov: Clean builder.
@@ -353,30 +342,9 @@ private void apply(Message eventMessage) throws InvocationTargetException {
353342 return ;
354343 }
355344 invokeApplier (eventMessage );
356- }
357345
358- /**
359- * Returns a set of classes of state-neutral events (an empty set by default).
360- *
361- * <p>An event is state-neutral if we do not modify the aggregate state when this event occurs.
362- *
363- * <p>Instead of creating empty applier methods for such events,
364- * override this method returning immutable set of event classes. For example:
365- *
366- * <pre>
367- * private static final ImmutableSet<Class<? extends Message>> STATE_NEUTRAL_EVENT_CLASSES =
368- * ImmutableSet.<Class<? extends Message>>of(StateNeutralEvent.class);
369- *
370- * @Override
371- * protected Set<Class<? extends Message>> getStateNeutralEventClasses() {
372- * return STATE_NEUTRAL_EVENT_CLASSES;
373- * }
374- * </pre>
375- *
376- * @return a set of classes of state-neutral events
377- */
378- protected Set <Class <? extends Message >> getStateNeutralEventClasses () {
379- return Collections .emptySet ();
346+ //TODO:2016-03-24:alexander.yevsyukov: increment version
347+ //TODO:2016-03-24:alexander.yevsyukov: set new date/time
380348 }
381349
382350 /**
@@ -395,54 +363,15 @@ private void putUncommitted(Event record) {
395363 }
396364
397365 /**
398- * Returns all uncommitted events (including state-neutral) .
366+ * Returns all uncommitted events.
399367 *
400368 * @return immutable view of records for all uncommitted events
401- * @see #getStateNeutralEventClasses()
402369 */
403370 @ CheckReturnValue
404371 public List <Event > getUncommittedEvents () {
405372 return ImmutableList .copyOf (uncommittedEvents );
406373 }
407374
408- /**
409- * Returns uncommitted events (excluding state-neutral).
410- *
411- * @return an immutable view of records for applicable uncommitted events
412- * @see #getStateNeutralEventClasses()
413- */
414- @ SuppressWarnings ("InstanceMethodNamingConvention" ) // Prefer longer name here for clarity.
415- protected Collection <Event > getStateChangingUncommittedEvents () {
416- final Predicate <Event > isStateChanging = isStateChangingEventRecord ();
417- final Collection <Event > result = filter (uncommittedEvents , isStateChanging );
418- return result ;
419- }
420-
421- /**
422- * Creates the predicate that filters {@code EventRecord}s which modify the state
423- * of the aggregate.
424- *
425- * <p>The predicate uses passed event classes for the events that do not modify the
426- * state of the aggregate. As such, they are called <em>State Neutral.</em>
427- *
428- * @return new predicate instance
429- */
430- private Predicate <Event > isStateChangingEventRecord () {
431- final Collection <Class <? extends Message >> stateNeutralEventClasses = getStateNeutralEventClasses ();
432- return new Predicate <Event >() {
433- @ Override
434- public boolean apply (
435- @ SuppressWarnings ("NullableProblems" )
436- /* The @Nullable annotation is removed to avoid checking for null input,
437- which is not possible here. Having the null input doesn't allow to test
438- that code branch. */ Event event ) {
439- final Message message = Events .getMessage (event );
440- final boolean isStateNeutral = stateNeutralEventClasses .contains (message .getClass ());
441- return !isStateNeutral ;
442- }
443- };
444- }
445-
446375 /**
447376 * Returns and clears all the events that were uncommitted before the call of this method.
448377 *
0 commit comments