// Path: agent-messaging/src/main/java/fr/irit/smac/libs/tooling/messaging/IDirectory.java
// public interface IDirectory<T> {
// 
//     /**
//      * Returns the agent ref from the given agent id.
//      *
//      * @param agentId the agent id
//      * @return the agent ref
//      */
//     public Ref<T> getAgentRef(String agentId);
// 
//     /**
//      * Returns the group ref from the given agent id.
//      *
//      * @param groupId the group id
//      * @return the group ref
//      */
//     public Ref<T> getGroupRef(String groupId);
// 
//     /**
//      * Returns all the agents inscribed in a group.
//      *
//      * @param groupRef the group ref
//      * @return the agents of group
//      */
//     public Set<Ref<T>> getAgentsOfGroup(Ref<T> groupRef);
// 
//     /**
//      * Returns all the agents inscribed in a group.
//      *
//      * @param groupId the group id
//      * @return the agents of group
//      */
//     public Set<Ref<T>> getAgentsOfGroup(String groupId);
// 
//     /**
//      * Returns all the agent refs inscribed in the directory.
//      *
//      * @return the groups ref
//      */
//     public List<Ref<T>> getGroupsRef();
// 
//     /**
//      * Returns all the groups refs inscribed in the directory.
//      *
//      * @return the agents ref
//      */
//     public List<Ref<T>> getAgentsRef();
// }
// 
// Path: agent-messaging/src/main/java/fr/irit/smac/libs/tooling/messaging/IMsgBox.java
// public interface IMsgBox<T> extends ISender<T>, IReceiver<T> {
// 
//     /**
//      * The ref of the agent using the message box.
//      *
//      * @return the ref
//      */
//     public Ref<T> getRef();
// 
//     /**
//      * Disable the message box and uninscrible it to all the previously
//      * subscribed groups.
//      */
//     public void dispose();
// }
// 
// Path: agent-messaging/src/main/java/fr/irit/smac/libs/tooling/messaging/impl/messagecontainer/BlockingQueueMsgContainer.java
// public class BlockingQueueMsgContainer<T> implements
//     IMsgContainer<T> {
// 
//     /** The msg queue. */
//     private BlockingQueue<T> msgQueue;
// 
//     /**
//      * Instantiates a new blocking queue msg container.
//      */
//     public BlockingQueueMsgContainer() {
//         this.msgQueue = new LinkedBlockingQueue<T>();
//     }
// 
//     /* (non-Javadoc)
//      * @see fr.irit.smac.libs.tooling.messaging.impl.messagecontainer.IMsgSink#putMsg(java.lang.Object)
//      */
//     @Override
//     public boolean putMsg(T msg) {
//         return this.msgQueue.offer(msg);
//     }
// 
//     /* (non-Javadoc)
//      * @see fr.irit.smac.libs.tooling.messaging.impl.messagecontainer.IMsgSource#getMsgs()
//      */
//     @Override
//     public List<T> getMsgs() {
//         List<T> messages = new ArrayList<T>(this.msgQueue.size());
//         this.msgQueue.drainTo(messages);
// 
//         return messages;
//     }
// 
// }
// 
// Path: agent-messaging/src/main/java/fr/irit/smac/libs/tooling/messaging/impl/messagecontainer/DummyMsgContainer.java
// public class DummyMsgContainer implements IMsgContainer<Object> {
// 
//     /*
//      * (non-Javadoc)
//      * 
//      * @see
//      * fr.irit.smac.libs.tooling.messaging.impl.messagecontainer.IMsgSink#putMsg
//      * (java.lang.Object)
//      */
//     @Override
//     public boolean putMsg(Object msg) {
//         return false;
//     }
// 
//     /*
//      * (non-Javadoc)
//      * 
//      * @see
//      * fr.irit.smac.libs.tooling.messaging.impl.messagecontainer.IMsgSource#
//      * getMsgs()
//      */
//     @Override
//     public List<Object> getMsgs() {
//         throw new IllegalStateException(
//             ExceptionMessage.GET_MESSAGES_DISPOSED_MSG_BOX);
//     }
// }
// 
// Path: agent-messaging/src/main/java/fr/irit/smac/libs/tooling/messaging/impl/messagecontainer/IMsgContainer.java
// public interface IMsgContainer<T> extends IMsgSink<T>,
//     IMsgSource<T> {
// 
// }
// 
// Path: agent-messaging/src/main/java/fr/irit/smac/libs/tooling/messaging/impl/messagecontainer/IMsgSink.java
// public interface IMsgSink<T> {
//     
//     /**
//      * Put msg.
//      *
//      * @param msg the msg
//      * @return true, if successful
//      */
//     public boolean putMsg(T msg);
// }


import java.util.List;
import fr.irit.smac.libs.tooling.messaging.IDirectory;
import fr.irit.smac.libs.tooling.messaging.IMsgBox;
import fr.irit.smac.libs.tooling.messaging.impl.messagecontainer.BlockingQueueMsgContainer;
import fr.irit.smac.libs.tooling.messaging.impl.messagecontainer.DummyMsgContainer;
import fr.irit.smac.libs.tooling.messaging.impl.messagecontainer.IMsgContainer;
import fr.irit.smac.libs.tooling.messaging.impl.messagecontainer.IMsgSink;
     */
    @Override
    public boolean sendToGroup(T msg, Ref<T> groupRef) {
        return this.sender.sendToGroup(msg, groupRef);
    }

    /* (non-Javadoc)
     * @see fr.irit.smac.libs.tooling.messaging.ISender#broadcast(java.lang.Object)
     */
    @Override
    public boolean broadcast(T msg) {
        return this.sender.broadcast(msg);
    }

    // /////////////////////////////////////////////////////////////////////////////
    // MsgContainer Concerns
    // /////////////////////////////////////////////////////////////////////////////

    /* (non-Javadoc)
     * @see fr.irit.smac.libs.tooling.messaging.impl.messagecontainer.IMsgSource#getMsgs()
     */
    @Override
    public List<T> getMsgs() {
        return this.msgContainer.getMsgs();
    }

    /* (non-Javadoc)
     * @see fr.irit.smac.libs.tooling.messaging.impl.Ref#getMsgSink()
     */
    @Override
// Path: agent-messaging/src/main/java/fr/irit/smac/libs/tooling/messaging/IDirectory.java
// public interface IDirectory<T> {
// 
//     /**
//      * Returns the agent ref from the given agent id.
//      *
//      * @param agentId the agent id
//      * @return the agent ref
//      */
//     public Ref<T> getAgentRef(String agentId);
// 
//     /**
//      * Returns the group ref from the given agent id.
//      *
//      * @param groupId the group id
//      * @return the group ref
//      */
//     public Ref<T> getGroupRef(String groupId);
// 
//     /**
//      * Returns all the agents inscribed in a group.
//      *
//      * @param groupRef the group ref
//      * @return the agents of group
//      */
//     public Set<Ref<T>> getAgentsOfGroup(Ref<T> groupRef);
// 
//     /**
//      * Returns all the agents inscribed in a group.
//      *
//      * @param groupId the group id
//      * @return the agents of group
//      */
//     public Set<Ref<T>> getAgentsOfGroup(String groupId);
// 
//     /**
//      * Returns all the agent refs inscribed in the directory.
//      *
//      * @return the groups ref
//      */
//     public List<Ref<T>> getGroupsRef();
// 
//     /**
//      * Returns all the groups refs inscribed in the directory.
//      *
//      * @return the agents ref
//      */
//     public List<Ref<T>> getAgentsRef();
// }
// 
// Path: agent-messaging/src/main/java/fr/irit/smac/libs/tooling/messaging/IMsgBox.java
// public interface IMsgBox<T> extends ISender<T>, IReceiver<T> {
// 
//     /**
//      * The ref of the agent using the message box.
//      *
//      * @return the ref
//      */
//     public Ref<T> getRef();
// 
//     /**
//      * Disable the message box and uninscrible it to all the previously
//      * subscribed groups.
//      */
//     public void dispose();
// }
// 
// Path: agent-messaging/src/main/java/fr/irit/smac/libs/tooling/messaging/impl/messagecontainer/BlockingQueueMsgContainer.java
// public class BlockingQueueMsgContainer<T> implements
//     IMsgContainer<T> {
// 
//     /** The msg queue. */
//     private BlockingQueue<T> msgQueue;
// 
//     /**
//      * Instantiates a new blocking queue msg container.
//      */
//     public BlockingQueueMsgContainer() {
//         this.msgQueue = new LinkedBlockingQueue<T>();
//     }
// 
//     /* (non-Javadoc)
//      * @see fr.irit.smac.libs.tooling.messaging.impl.messagecontainer.IMsgSink#putMsg(java.lang.Object)
//      */
//     @Override
//     public boolean putMsg(T msg) {
//         return this.msgQueue.offer(msg);
//     }
// 
//     /* (non-Javadoc)
//      * @see fr.irit.smac.libs.tooling.messaging.impl.messagecontainer.IMsgSource#getMsgs()
//      */
//     @Override
//     public List<T> getMsgs() {
//         List<T> messages = new ArrayList<T>(this.msgQueue.size());
//         this.msgQueue.drainTo(messages);
// 
//         return messages;
//     }
// 
// }
// 
// Path: agent-messaging/src/main/java/fr/irit/smac/libs/tooling/messaging/impl/messagecontainer/DummyMsgContainer.java
// public class DummyMsgContainer implements IMsgContainer<Object> {
// 
//     /*
//      * (non-Javadoc)
//      * 
//      * @see
//      * fr.irit.smac.libs.tooling.messaging.impl.messagecontainer.IMsgSink#putMsg
//      * (java.lang.Object)
//      */
//     @Override
//     public boolean putMsg(Object msg) {
//         return false;
//     }
// 
//     /*
//      * (non-Javadoc)
//      * 
//      * @see
//      * fr.irit.smac.libs.tooling.messaging.impl.messagecontainer.IMsgSource#
//      * getMsgs()
//      */
//     @Override
//     public List<Object> getMsgs() {
//         throw new IllegalStateException(
//             ExceptionMessage.GET_MESSAGES_DISPOSED_MSG_BOX);
//     }
// }
// 
// Path: agent-messaging/src/main/java/fr/irit/smac/libs/tooling/messaging/impl/messagecontainer/IMsgContainer.java
// public interface IMsgContainer<T> extends IMsgSink<T>,
//     IMsgSource<T> {
// 
// }
// 
// Path: agent-messaging/src/main/java/fr/irit/smac/libs/tooling/messaging/impl/messagecontainer/IMsgSink.java
// public interface IMsgSink<T> {
//     
//     /**
//      * Put msg.
//      *
//      * @param msg the msg
//      * @return true, if successful
//      */
//     public boolean putMsg(T msg);
// }


// Path: agent-messaging/src/main/java/fr/irit/smac/libs/tooling/messaging/impl/AgentMsgBox.java
import java.util.List;
import fr.irit.smac.libs.tooling.messaging.IDirectory;
import fr.irit.smac.libs.tooling.messaging.IMsgBox;
import fr.irit.smac.libs.tooling.messaging.impl.messagecontainer.BlockingQueueMsgContainer;
import fr.irit.smac.libs.tooling.messaging.impl.messagecontainer.DummyMsgContainer;
import fr.irit.smac.libs.tooling.messaging.impl.messagecontainer.IMsgContainer;
import fr.irit.smac.libs.tooling.messaging.impl.messagecontainer.IMsgSink;

     */
    @Override
    public boolean sendToGroup(T msg, Ref<T> groupRef) {
        return this.sender.sendToGroup(msg, groupRef);
    }

    /* (non-Javadoc)
     * @see fr.irit.smac.libs.tooling.messaging.ISender#broadcast(java.lang.Object)
     */
    @Override
    public boolean broadcast(T msg) {
        return this.sender.broadcast(msg);
    }

    // /////////////////////////////////////////////////////////////////////////////
    // MsgContainer Concerns
    // /////////////////////////////////////////////////////////////////////////////

    /* (non-Javadoc)
     * @see fr.irit.smac.libs.tooling.messaging.impl.messagecontainer.IMsgSource#getMsgs()
     */
    @Override
    public List<T> getMsgs() {
        return this.msgContainer.getMsgs();
    }

    /* (non-Javadoc)
     * @see fr.irit.smac.libs.tooling.messaging.impl.Ref#getMsgSink()
     */
    @Override
    IMsgSink<T> getMsgSink() {