package net.codjo.segmentation.server.blackboard; import net.codjo.agent.AclMessage; import net.codjo.agent.Agent; import net.codjo.agent.Behaviour; import net.codjo.agent.DFService; import net.codjo.segmentation.server.blackboard.message.BlackboardAction; import net.codjo.segmentation.server.blackboard.message.BlackboardActionBuilder; import net.codjo.segmentation.server.blackboard.message.Level; import net.codjo.segmentation.server.blackboard.message.Todo; import org.apache.log4j.Logger; /** * */ public abstract class BlackboardParticipant<T> extends BlackboardActionBuilder { protected final Logger logger = Logger.getLogger(getClass()); private ParticipantWrapperBehaviour behaviour; protected BlackboardParticipant(Level level, DFService.AgentDescription blackBoardDescription) { super(false); behaviour = new ParticipantWrapperBehaviour(this, level, blackBoardDescription); } protected BlackboardParticipant(Level level) { this(level, ParticipantWrapperBehaviour.createDefaultBlackBoardDescription()); } protected void handleConnectedToBlackBoard(AclMessage message) { } protected void handleTodoNotification(Level level) { send(getTodo(level)); } protected abstract void handleTodo(Todo<T> todo, Level fromLevel); protected void handleTechnicalError(TechnicalError errorType, AclMessage message, Throwable error) { logger.warn("Erreur technique '" + errorType + "' : " + message.toFipaACLString(), error); } protected void send(BlackboardAction action) { behaviour.send(action); } protected Agent getAgent() { return behaviour.getAgent(); } protected AclMessage getReceivedMessage() { return behaviour.getReceivedMessage(); } public final Behaviour toBehaviour() { return behaviour; } void setBehaviour(ParticipantWrapperBehaviour behaviour) { this.behaviour = behaviour; } public enum TechnicalError { SUBSCRIBE_REFUSED } }