fr.dyade.aaa.agent
Class MessageSoftList

java.lang.Object
  extended by fr.dyade.aaa.agent.MessageSoftList

public class MessageSoftList
extends java.lang.Object

This class holds a list of Message, waiting to be sent. After sending one message it is marked as sent, which means it is kept until its acknowledgment. Once acknowledged, the message is deleted.
This list can hold an acknowledgment message, which is always the first one to be sent if present.
If the list is marked as persistent, messages are encapsulated by MessageSoftRef in order to be garbaged from memory if necessary.


Nested Class Summary
(package private) static class MessageSoftList.MessageComparator
          A comparator to keep list sorted by message stamp.
(package private) static class MessageSoftList.MessageSoftComparator
          A comparator to keep list sorted by message stamp when using soft references.
private static class MessageSoftList.MessageSoftIterator
          An iterator returning the messages when going through a collection of MessageSoftRef.
 
Field Summary
private  Message ack
          Current ack message which will be sent in priority.
private  org.objectweb.util.monolog.api.Logger logmon
          Logger for this class.
private  java.util.SortedSet msgSentlist
          The list of sent messages waiting to be acknowledged.
private  java.util.SortedSet msgToSendlist
          The list of messages waiting to be sent.
private  boolean persistent
          Tells if messages are persisted on disk and can be garbaged from memory.
 
Constructor Summary
MessageSoftList(java.lang.String name, boolean persistent)
           
 
Method Summary
 void addMessage(Message msg)
          Adds a message at the end of the list.
 void deleteMessagesUpTo(int stamp)
          Iterates over messages waiting for an acknowledge to delete the ones which have a stamp inferior or equal to the given one.
 Message getAck()
          Returns the acknowledge waiting to be sent if present.
 Message getFirst()
          Returns the first non expired message waiting to be sent.
private  void removeExpired(Message msg)
          Removes the expired message, if needed an ExpiredNot is sent to the deadNotificationAgentId specified.
 void reset()
          Resets all messages waiting for an acknowledge: they are placed back at the beginning of the list respecting their stamp order.
private  Message selectFirst()
           
 int sentSize()
          Returns the number of messages waiting for an ack.
 void setAck(Message ack)
          Sets the next ack to send.
 void setSent(Message msg)
          Mark specified message as sent (ie waiting for an ack).
 java.util.Iterator toSendIterator()
          Returns an iterator over the messages waiting to be sent.
 int toSendSize()
          Returns the number of messages waiting to be sent.
 java.lang.String toString()
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

logmon

private org.objectweb.util.monolog.api.Logger logmon
Logger for this class.


ack

private Message ack
Current ack message which will be sent in priority.


msgToSendlist

private java.util.SortedSet msgToSendlist
The list of messages waiting to be sent.


msgSentlist

private java.util.SortedSet msgSentlist
The list of sent messages waiting to be acknowledged.


persistent

private final boolean persistent
Tells if messages are persisted on disk and can be garbaged from memory.

Constructor Detail

MessageSoftList

public MessageSoftList(java.lang.String name,
                       boolean persistent)
Method Detail

addMessage

public void addMessage(Message msg)
Adds a message at the end of the list. Use setAck(Message) if you want to add an ack to the list.


getAck

public Message getAck()
Returns the acknowledge waiting to be sent if present.

Returns:
current acknowledge waiting to be sent, or null if there is none.

getFirst

public Message getFirst()
Returns the first non expired message waiting to be sent. It can be an acknowledge.

Returns:
the next message to send or null if there is none.

selectFirst

private Message selectFirst()

removeExpired

private void removeExpired(Message msg)
Removes the expired message, if needed an ExpiredNot is sent to the deadNotificationAgentId specified.

Parameters:
msg - The message to remove.

deleteMessagesUpTo

public void deleteMessagesUpTo(int stamp)
                        throws java.io.IOException
Iterates over messages waiting for an acknowledge to delete the ones which have a stamp inferior or equal to the given one.

Parameters:
stamp - the stamp of the last message acked.
Throws:
java.io.IOException

setAck

public void setAck(Message ack)
Sets the next ack to send.


toSendIterator

public java.util.Iterator toSendIterator()
Returns an iterator over the messages waiting to be sent.

Returns:
an iterator over the messages waiting to be sent.

toString

public java.lang.String toString()
Overrides:
toString in class java.lang.Object

reset

public void reset()
Resets all messages waiting for an acknowledge: they are placed back at the beginning of the list respecting their stamp order.


toSendSize

public int toSendSize()
Returns the number of messages waiting to be sent.

Returns:
the number of messages waiting to be sent.

setSent

public void setSent(Message msg)
Mark specified message as sent (ie waiting for an ack). The given message must be the next one to be sent, returned by getFirst().

Parameters:
msg - the message which have been sent.

sentSize

public int sentSize()
Returns the number of messages waiting for an ack.

Returns:
the number of messages waiting for an ack.


Copyright © 2010 ScalAgent D.T.. All Rights Reserved.