Package it.tidalwave.actor
Interface Collaboration
-
public interface CollaborationRepresents a single task that is possibly decomposed in multiple subtasks and provides support for waiting for its completion.- Author:
- Fabrizio Giudici
-
-
Nested Class Summary
Nested Classes Modifier and Type Interface Description static interfaceCollaboration.ProviderA provider of aCollaboration.
-
Field Summary
Fields Modifier and Type Field Description static CollaborationNULL_COLLABORATION
-
Method Summary
All Methods Instance Methods Abstract Methods Modifier and Type Method Description intgetDeliveringMessagesCount()Returns the number of messages related to thisCollaborationnot yet delivered.org.joda.time.DurationgetDuration()Return the duration of thisCollaboration.java.lang.ObjectgetOriginatingMessage()Returns the message that originated thisCollaboration.intgetPendingMessagesCount()Returns the number of messages related to thisCollaborationnot yet consumed.intgetRunningThreadsCount()Returns the number of running threads assigned to thisCollaboration.org.joda.time.DateTimegetStartTime()Return the time when thisCollaborationhas been created.booleanisCompleted()Returnstrueif theCollaborationhas been completed.booleanisSuspended()Returnstruewhen the currentCollaborationis suspended.voidresume(java.lang.Object suspensionToken, java.lang.Runnable resumerTask)Resumes a suspendedCollaboration.voidresumeAndDie(java.lang.Object suspensionToken)Resumes a suspendedCollaborationand lets it terminate without any further operation.java.lang.Objectsuspend()Sometimes aCollaborationmust coordinate with the external world, waiting for an external asynchronous event that cannot be modeled with agents.voidwaitForCompletion()Waits for the completion of thisCollaboration.
-
-
-
Field Detail
-
NULL_COLLABORATION
static final Collaboration NULL_COLLABORATION
-
-
Method Detail
-
getOriginatingMessage
@Nonnull java.lang.Object getOriginatingMessage()
Returns the message that originated thisCollaboration.- Returns:
- the message
-
isCompleted
boolean isCompleted()
Returnstrueif theCollaborationhas been completed.- Returns:
trueif theCollaborationhas been completed
-
waitForCompletion
void waitForCompletion() throws java.lang.InterruptedExceptionWaits for the completion of thisCollaboration.- Throws:
java.lang.InterruptedException- if the wait is interrupted
-
getStartTime
@Nonnull org.joda.time.DateTime getStartTime()
Return the time when thisCollaborationhas been created.- Returns:
- the creation time
-
getDuration
@Nonnull org.joda.time.Duration getDuration()
Return the duration of thisCollaboration.- Returns:
- the duration
-
suspend
java.lang.Object suspend()
Sometimes aCollaborationmust coordinate with the external world, waiting for an external asynchronous event that cannot be modeled with agents. For instance, a user intervention (e.g. by clicking a button) or an external piece of software that is not part of theCollaborationmodel. In this case, it can be marked as 'suspended' and in this case it won't be considered completed, even though there are no related pending messages or working threads. When the external event occurs, callresume(java.lang.Object, java.lang.Runnable). In order to support multiple reasons for suspension, a token is generated and returned. It must be passed toresume()for resuming.- Returns:
- a token representing the reason for the suspension
- See Also:
resume(java.lang.Object, java.lang.Runnable),isSuspended()
-
resume
void resume(@Nonnull java.lang.Object suspensionToken, @Nonnull java.lang.Runnable resumerTask)Resumes a suspendedCollaboration. It executes the givenRunnablewhich is expected to send new messages.- Parameters:
suspensionToken- the token representing the reason for the suspensionresumerTask- the code which resumes theCollaboration- See Also:
suspend(),isSuspended()
-
resumeAndDie
void resumeAndDie(@Nonnull java.lang.Object suspensionToken)Resumes a suspendedCollaborationand lets it terminate without any further operation.- Parameters:
suspensionToken- the token representing the reason for the suspension- See Also:
suspend(),resume(java.lang.Object, java.lang.Runnable),isSuspended()
-
isSuspended
boolean isSuspended()
Returnstruewhen the currentCollaborationis suspended.- Returns:
truewhen it's suspended- See Also:
suspend(),resume(java.lang.Object, java.lang.Runnable)
-
getDeliveringMessagesCount
@Nonnegative int getDeliveringMessagesCount()
Returns the number of messages related to thisCollaborationnot yet delivered.- Returns:
- the number of messages not yet delivered
-
getPendingMessagesCount
@Nonnegative int getPendingMessagesCount()
Returns the number of messages related to thisCollaborationnot yet consumed.- Returns:
- the number of messages not yet consumed
-
getRunningThreadsCount
@Nonnegative int getRunningThreadsCount()
Returns the number of running threads assigned to thisCollaboration.- Returns:
- the number of threads
-
-