package nl.tudelft.bw4t.client.gui.listeners; import java.awt.event.ActionEvent; import org.apache.log4j.Logger; import eis.iilang.Identifier; import eis.iilang.Percept; import nl.tudelft.bw4t.client.controller.ClientMapController; import nl.tudelft.bw4t.client.gui.BW4TClientGUI; import nl.tudelft.bw4t.client.message.BW4TMessage; import nl.tudelft.bw4t.client.message.MessageTranslator; import nl.tudelft.bw4t.client.startup.InitParam; import nl.tudelft.bw4t.map.view.ViewEPartner; public class EPartnerMessageSenderActionListener extends AbstractClientActionListener { /** * The log4j Logger which displays logs on console */ private static final Logger LOGGER = Logger.getLogger(MessageSenderActionListener.class); private final BW4TMessage message; private final ClientMapController mapController; public EPartnerMessageSenderActionListener(BW4TMessage message, BW4TClientGUI clientGUI) { super(clientGUI.getController()); this.message = message; mapController = clientGUI.getController().getMapController(); } @Override public void actionPerformed(ActionEvent e) { /** Finds the names of the receivers of the message: */ String eParterName = findEPartner(); if (eParterName == null) { return; } String ownName = getController().getMapController().getTheBot().getName(); String[] receivers = new String[] {ownName, eParterName}; if (ownName.equals(eParterName)) { receivers = new String[] {eParterName}; } /** Sends the message to the receiver(s): */ sendMessages(ownName, receivers); } /** * Sends messages to all the receivers * @param ownName * @param receivers */ private void sendMessages(String ownName, String[] receivers) { for (String name : receivers) { if (!getController().getEnvironment().isConnectedToGoal() || !InitParam.GOALHUMAN.getBoolValue()) { try { getController().getHumanAgent().sendMessage(name, message); } catch (Exception e1) { LOGGER.error("Could not send message to e-partner.", e1); } } else { Percept percept = new Percept("sendMessage", new Identifier(name), MessageTranslator.translateMessage( message, ownName)); getController().addToBePerformedAction(percept); } } } private String findEPartner() { ViewEPartner epartner = mapController.getViewEPartner( mapController.getTheBot().getHoldingEpartner()); if (epartner == null) { return null; } return epartner.getName(); } }