Interface Collaboration


  • public interface Collaboration
    Represents a single task that is possibly decomposed in multiple subtasks and provides support for waiting for its completion.
    Author:
    Fabrizio Giudici
    • Method Summary

      All Methods Instance Methods Abstract Methods 
      Modifier and Type Method Description
      int getDeliveringMessagesCount()
      Returns the number of messages related to this Collaboration not yet delivered.
      java.time.Duration getDuration()
      Return the duration of this Collaboration.
      java.lang.Object getOriginatingMessage()
      Returns the message that originated this Collaboration.
      int getPendingMessagesCount()
      Returns the number of messages related to this Collaboration not yet consumed.
      int getRunningThreadsCount()
      Returns the number of running threads assigned to this Collaboration.
      java.time.ZonedDateTime getStartTime()
      Return the time when this Collaboration has been created.
      boolean isCompleted()
      Returns true if the Collaboration has been completed.
      boolean isSuspended()
      Returns true when the current Collaboration is suspended.
      void resume​(java.lang.Object suspensionToken, java.lang.Runnable resumerTask)
      Resumes a suspended Collaboration.
      void resumeAndDie​(java.lang.Object suspensionToken)
      Resumes a suspended Collaboration and lets it terminate without any further operation.
      java.lang.Object suspend()
      Sometimes a Collaboration must coordinate with the external world, waiting for an external asynchronous event that cannot be modeled with agents.
      void waitForCompletion()
      Waits for the completion of this Collaboration.
    • Field Detail

      • NULL_COLLABORATION

        static final Collaboration NULL_COLLABORATION
    • Method Detail

      • getOriginatingMessage

        @Nonnull
        java.lang.Object getOriginatingMessage()
        Returns the message that originated this Collaboration.
        Returns:
        the message
      • isCompleted

        boolean isCompleted()
        Returns true if the Collaboration has been completed.
        Returns:
        true if the Collaboration has been completed
      • waitForCompletion

        void waitForCompletion()
                        throws java.lang.InterruptedException
        Waits for the completion of this Collaboration.
        Throws:
        java.lang.InterruptedException - if the wait is interrupted
      • getStartTime

        @Nonnull
        java.time.ZonedDateTime getStartTime()
        Return the time when this Collaboration has been created.
        Returns:
        the creation time
      • getDuration

        @Nonnull
        java.time.Duration getDuration()
        Return the duration of this Collaboration.
        Returns:
        the duration
      • suspend

        java.lang.Object suspend()
        Sometimes a Collaboration must 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 the Collaboration model. 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, call resume(java.lang.Object, java.lang.Runnable). In order to support multiple reasons for suspension, a token is generated and returned. It must be passed to resume() 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 suspended Collaboration. It executes the given Runnable which is expected to send new messages.
        Parameters:
        suspensionToken - the token representing the reason for the suspension
        resumerTask - the code which resumes the Collaboration
        See Also:
        suspend(), isSuspended()
      • resumeAndDie

        void resumeAndDie​(@Nonnull
                          java.lang.Object suspensionToken)
        Resumes a suspended Collaboration and 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()
      • getDeliveringMessagesCount

        @Nonnegative
        int getDeliveringMessagesCount()
        Returns the number of messages related to this Collaboration not yet delivered.
        Returns:
        the number of messages not yet delivered
      • getPendingMessagesCount

        @Nonnegative
        int getPendingMessagesCount()
        Returns the number of messages related to this Collaboration not yet consumed.
        Returns:
        the number of messages not yet consumed
      • getRunningThreadsCount

        @Nonnegative
        int getRunningThreadsCount()
        Returns the number of running threads assigned to this Collaboration.
        Returns:
        the number of threads