Package jadex.commons.future
Class SubscriptionIntermediateFuture<E>
- java.lang.Object
-
- jadex.commons.future.Future<java.util.Collection<E>>
-
- jadex.commons.future.IntermediateFuture<E>
-
- jadex.commons.future.TerminableIntermediateFuture<E>
-
- jadex.commons.future.SubscriptionIntermediateFuture<E>
-
- All Implemented Interfaces:
IBackwardCommandFuture,IForwardCommandFuture,IFuture<java.util.Collection<E>>,IIntermediateFuture<E>,ISubscriptionIntermediateFuture<E>,ITerminableFuture<java.util.Collection<E>>,ITerminableIntermediateFuture<E>
- Direct Known Subclasses:
PullSubscriptionIntermediateFuture
public class SubscriptionIntermediateFuture<E> extends TerminableIntermediateFuture<E> implements ISubscriptionIntermediateFuture<E>
Implementation of the subscription intermediate future.
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from interface jadex.commons.future.IForwardCommandFuture
IForwardCommandFuture.Type
-
-
Field Summary
Fields Modifier and Type Field Description protected java.util.Map<java.lang.Thread,java.util.List<E>>ownresultsThe local results for a single thread.protected intresultssizeThe number of results.protected booleanstoreforfirstFlag if results should be stored till first listener is added.-
Fields inherited from class jadex.commons.future.TerminableIntermediateFuture
bcommands, terminate
-
Fields inherited from class jadex.commons.future.IntermediateFuture
icallers, indices, intermediate, maxresultcnt, notcommand, results
-
Fields inherited from class jadex.commons.future.Future
CALLER_QUEUED, CALLER_RESUMED, CALLER_SUSPENDED, callers, creation, DEBUG, exception, first, listeners, NO_STACK_COMPACTION, NONE, NOTIFICATIONS, notificount, result, resultavailable, undone, UNSET
-
Fields inherited from interface jadex.commons.future.IIntermediateFuture
DONE
-
-
Constructor Summary
Constructors Constructor Description SubscriptionIntermediateFuture()Create a new future.SubscriptionIntermediateFuture(ITerminationCommand terminate)Create a new future.SubscriptionIntermediateFuture(ITerminationCommand terminate, boolean storeforfirst)Create a new future.SubscriptionIntermediateFuture(java.lang.Exception exception)Create a future that is already done (failed).
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidaddQuietListener(IResultListener<java.util.Collection<E>> listener)Add a listener which is only informed about new results, i.e.voidaddResultListener(IResultListener<java.util.Collection<E>> listener)Add a result listener.<T> IIntermediateFuture<E>catchEx(Future<T> delegate)Called on exception.IIntermediateFuture<E>catchEx(java.util.function.Consumer<? super java.lang.Exception> consumer, java.lang.Class<?> futuretype)Called on exception.protected EdoGetNextIntermediateResult(int index, long timeout, boolean realtime)Perform the get without increasing the index.IIntermediateFuture<? extends E>finished(java.util.function.Consumer<java.lang.Void> function)Called when the future is finished.java.util.Collection<E>getIntermediateResults()Get the intermediate results that are available.EgetNextIntermediateResult(long timeout, boolean realtime)Iterate over the intermediate results in a blocking fashion.protected intgetResultCount()Get the number of results already collected.booleanhasNextIntermediateResult(long timeout, boolean realtime)Check if there are more results for iteration for the given caller.IIntermediateFuture<? extends E>max(java.util.function.Consumer<java.lang.Integer> function)Called when the next intermediate value is available.protected voidstoreResult(E result, boolean scheduled)Add a result.-
Methods inherited from class jadex.commons.future.TerminableIntermediateFuture
addBackwardCommand, getTerminationCommand, removeBackwardCommand, sendBackwardCommand, setTerminationCommand, terminate, terminate
-
Methods inherited from class jadex.commons.future.IntermediateFuture
addIntermediateResult, addIntermediateResultIfUndone, asStream, asStream, delegateEx, doAddIntermediateResult, done, doSetException, doSetFinished, doSetResult, getNextIntermediateResult, getNextIntermediateResult, getNotificationCommand, hasNextIntermediateResult, next, notifyIntermediateResult, resume, resumeIntermediate, scheduleMaxNotification, setFinished, setFinishedIfUndone, setMaxResultCount, then
-
Methods inherited from class jadex.commons.future.Future
abortGet, catchEx, delegate, doAddResultListener, doStartScheduledNotifications, executeNotification, get, get, get, get, get, getEmptyFuture, getException, getFuture, hasResultListener, isDone, scheduleNotification, scheduleNotification, sendForwardCommand, setException, setExceptionIfUndone, setResult, setResultIfUndone, startScheduledNotifications, thenAccept, thenAccept, thenApply, thenApply, thenCombine, thenCompose, thenCompose
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface jadex.commons.future.IBackwardCommandFuture
sendBackwardCommand
-
Methods inherited from interface jadex.commons.future.IFuture
catchEx, delegate, get, get, get, get, get, getException, isDone, then, thenApply, thenApply, thenCompose, thenCompose
-
Methods inherited from interface jadex.commons.future.IIntermediateFuture
asStream, asStream, done, getNextIntermediateResult, hasNextIntermediateResult, next
-
Methods inherited from interface jadex.commons.future.ITerminableFuture
terminate, terminate
-
-
-
-
Field Detail
-
ownresults
protected java.util.Map<java.lang.Thread,java.util.List<E>> ownresults
The local results for a single thread.
-
storeforfirst
protected boolean storeforfirst
Flag if results should be stored till first listener is added.
-
resultssize
protected int resultssize
The number of results.
-
-
Constructor Detail
-
SubscriptionIntermediateFuture
public SubscriptionIntermediateFuture()
Create a new future.
-
SubscriptionIntermediateFuture
public SubscriptionIntermediateFuture(java.lang.Exception exception)
Create a future that is already done (failed).- Parameters:
exception- The exception.
-
SubscriptionIntermediateFuture
public SubscriptionIntermediateFuture(ITerminationCommand terminate)
Create a new future.- Parameters:
terminate- The code to be executed in case of termination.
-
SubscriptionIntermediateFuture
public SubscriptionIntermediateFuture(ITerminationCommand terminate, boolean storeforfirst)
Create a new future.- Parameters:
terminate- The code to be executed in case of termination.
-
-
Method Detail
-
storeResult
protected void storeResult(E result, boolean scheduled)
Add a result.- Overrides:
storeResultin classIntermediateFuture<E>- Parameters:
result- The result.scheduled- True, if any listener notification has been scheduled for this result. (used for subscription futures to check for lost values)
-
getResultCount
protected int getResultCount()
Get the number of results already collected.- Overrides:
getResultCountin classIntermediateFuture<E>- Returns:
- The number of results.
-
addQuietListener
public void addQuietListener(IResultListener<java.util.Collection<E>> listener)
Add a listener which is only informed about new results, i.e. the initial results are not posted to this listener, even if it is the first listener to be added to this future.- Specified by:
addQuietListenerin interfaceISubscriptionIntermediateFuture<E>
-
addResultListener
public void addResultListener(IResultListener<java.util.Collection<E>> listener)
Add a result listener.- Specified by:
addResultListenerin interfaceIFuture<E>- Overrides:
addResultListenerin classIntermediateFuture<E>- Parameters:
listsner- The listener.
-
getIntermediateResults
public java.util.Collection<E> getIntermediateResults()
Get the intermediate results that are available. Note: The semantics of this method is different to the normal intermediate future due to the fire-and-forget-semantics!- Specified by:
getIntermediateResultsin interfaceIIntermediateFuture<E>- Specified by:
getIntermediateResultsin interfaceISubscriptionIntermediateFuture<E>- Overrides:
getIntermediateResultsin classIntermediateFuture<E>- Returns:
- 1)
-
getNextIntermediateResult
public E getNextIntermediateResult(long timeout, boolean realtime)
Iterate over the intermediate results in a blocking fashion. Manages results independently for different callers, i.e. when called from different threads, each thread receives all intermediate results. The operation is guaranteed to be non-blocking, if hasNextIntermediateResult() has returned true before for the same caller. Otherwise the caller is blocked until a result is available or the future is finished.- Specified by:
getNextIntermediateResultin interfaceIIntermediateFuture<E>- Overrides:
getNextIntermediateResultin classIntermediateFuture<E>- Parameters:
timeout- The timeout in millis.realtime- Flag, if wait should be realtime (in constrast to simulation time).- Returns:
- The next intermediate result.
-
hasNextIntermediateResult
public boolean hasNextIntermediateResult(long timeout, boolean realtime)Check if there are more results for iteration for the given caller. If there are currently no unprocessed results and future is not yet finished, the caller is blocked until either new results are available and true is returned or the future is finished, thus returning false.- Specified by:
hasNextIntermediateResultin interfaceIIntermediateFuture<E>- Overrides:
hasNextIntermediateResultin classIntermediateFuture<E>- Parameters:
timeout- The timeout in millis.realtime- Flag, if wait should be realtime (in constrast to simulation time).- Returns:
- True, when there are more intermediate results for the caller.
-
doGetNextIntermediateResult
protected E doGetNextIntermediateResult(int index, long timeout, boolean realtime)
Perform the get without increasing the index.- Overrides:
doGetNextIntermediateResultin classIntermediateFuture<E>
-
catchEx
public IIntermediateFuture<E> catchEx(java.util.function.Consumer<? super java.lang.Exception> consumer, java.lang.Class<?> futuretype)
Called on exception.
-
catchEx
public <T> IIntermediateFuture<E> catchEx(Future<T> delegate)
Called on exception.
-
max
public IIntermediateFuture<? extends E> max(java.util.function.Consumer<java.lang.Integer> function)
Called when the next intermediate value is available.- Specified by:
maxin interfaceIIntermediateFuture<E>- Overrides:
maxin classIntermediateFuture<E>- Parameters:
function- Called when value arrives.function- Called when max value arrives.- Returns:
- The future for chaining. / public IIntermediateFuture extends E> next(Consumer super E> function) /** Called when the maximum number of results is available.
-
finished
public IIntermediateFuture<? extends E> finished(java.util.function.Consumer<java.lang.Void> function)
Called when the future is finished.- Specified by:
finishedin interfaceIIntermediateFuture<E>- Overrides:
finishedin classIntermediateFuture<E>- Parameters:
function- Called when max value arrives.- Returns:
- The future for chaining.
-
-