@Override public TrackingToken lowerBound(TrackingToken other) { if (other instanceof ReplayToken) { return new ReplayToken(this, ((ReplayToken) other).currentToken); } return new ReplayToken(this, other); }
/** * Advance this token to the given {@code newToken}. * * @param newToken The token representing the position to advance to * @return a token representing the new position */ public TrackingToken advancedTo(TrackingToken newToken) { if (this.tokenAtReset == null || (newToken.covers(this.tokenAtReset) && !tokenAtReset.covers(newToken))) { // we're done replaying return newToken; } else if (tokenAtReset.covers(newToken)) { // we're still well behind return new ReplayToken(tokenAtReset, newToken); } else { // we're getting an event that we didn't have before, but we haven't finished replaying either return new ReplayToken(tokenAtReset.upperBound(newToken), newToken); } }
/** * Creates a new TrackingToken that represents the given {@code startPosition} of a stream, in reset state, * when appropriate. * * @param tokenAtReset The token present when the reset was triggered * @param startPosition The position where the token should be reset to * @return A token that represents a reset to the tail of the stream */ public static TrackingToken createReplayToken(TrackingToken tokenAtReset, TrackingToken startPosition) { if (tokenAtReset == null) { return null; } if (tokenAtReset instanceof ReplayToken) { return createReplayToken(((ReplayToken) tokenAtReset).tokenAtReset, startPosition); } if (startPosition != null && startPosition.covers(tokenAtReset)) { return startPosition; } return new ReplayToken(tokenAtReset, startPosition); }
@Override public TrackingToken lowerBound(TrackingToken other) { if (other instanceof ReplayToken) { return new ReplayToken(this, ((ReplayToken) other).currentToken); } return new ReplayToken(this, other); }
@Override public TrackingToken lowerBound(TrackingToken other) { if (other instanceof ReplayToken) { return new ReplayToken(this, ((ReplayToken) other).currentToken); } return new ReplayToken(this, other); }
/** * Creates a new TrackingToken that represents the given {@code startPosition} of a stream, in reset state, * when appropriate. * * @param tokenAtReset The token present when the reset was triggered * @param startPosition The position where the token should be reset to * @return A token that represents a reset to the tail of the stream */ public static TrackingToken createReplayToken(TrackingToken tokenAtReset, TrackingToken startPosition) { if (tokenAtReset == null) { return null; } if (tokenAtReset instanceof ReplayToken) { return createReplayToken(((ReplayToken) tokenAtReset).tokenAtReset, startPosition); } if (startPosition != null && startPosition.covers(tokenAtReset)) { return startPosition; } return new ReplayToken(tokenAtReset, startPosition); }
/** * Advance this token to the given {@code newToken}. * * @param newToken The token representing the position to advance to * @return a token representing the new position */ public TrackingToken advancedTo(TrackingToken newToken) { if (this.tokenAtReset == null || (newToken.covers(this.tokenAtReset) && !tokenAtReset.covers(newToken))) { // we're done replaying return newToken; } else if (tokenAtReset.covers(newToken)) { // we're still well behind return new ReplayToken(tokenAtReset, newToken); } else { // we're getting an event that we didn't have before, but we haven't finished replaying either return new ReplayToken(tokenAtReset.upperBound(newToken), newToken); } }
/** * Advance this token to the given {@code newToken}. * * @param newToken The token representing the position to advance to * @return a token representing the new position */ public TrackingToken advancedTo(TrackingToken newToken) { if (this.tokenAtReset == null || (newToken.covers(this.tokenAtReset) && !tokenAtReset.covers(newToken))) { // we're done replaying return newToken; } else if (tokenAtReset.covers(newToken)) { // we're still well behind return new ReplayToken(tokenAtReset, newToken); } else { // we're getting an event that we didn't have before, but we haven't finished replaying either return new ReplayToken(tokenAtReset.upperBound(newToken), newToken); } }
/** * Creates a new TrackingToken that represents the given {@code startPosition} of a stream, in reset state, * when appropriate. * * @param tokenAtReset The token present when the reset was triggered * @param startPosition The position where the token should be reset to * @return A token that represents a reset to the tail of the stream */ public static TrackingToken createReplayToken(TrackingToken tokenAtReset, TrackingToken startPosition) { if (tokenAtReset == null) { return null; } if (tokenAtReset instanceof ReplayToken) { return createReplayToken(((ReplayToken) tokenAtReset).tokenAtReset, startPosition); } if (startPosition != null && startPosition.covers(tokenAtReset)) { return startPosition; } return new ReplayToken(tokenAtReset, startPosition); }