/** Closing all the connections one by one from the connection Map */
  public static void closeConnections() {
    StringBuffer strBuf = new StringBuffer();
    logger.warn("ATM Switch Interface Shutting Down....");

    try {
      ConcurrentHashMap<String, ServerContainer> ATMSWITCH_CONN_MAP =
          ConnectionPool.getConnectionMap();
      Set connSet = ATMSWITCH_CONN_MAP.keySet();
      Iterator It = connSet.iterator();

      while (It.hasNext()) {
        String connName = (String) (It.next());
        if (ConnectionPool.getHandleToContainer(connName) != null) {
          if (cleanUpResources(connName, false)) strBuf.append(connName + " is - Closed. ");
          else strBuf.append(connName + " could not be - Closed. ");
        }
      }
    } catch (Exception e) {
      logger.error(" closeConnections()  Exception ", e);
    }
    logger.info(strBuf.toString());
  }
 /**
  * cleanUpResources(String) : Cleans the resources and remove connection from {@link
  * ConnectionPool}
  *
  * @param connName : The connection for which clean-up will be done.
  * @return Returns true in case success else returs false
  */
 public static boolean cleanUpResources(String connName, boolean reconnectFlag) {
   ConcurrentHashMap<String, ServerContainer> ATMSWITCH_CONN_MAP =
       ConnectionPool.getConnectionMap();
   ServerContainer containerHandler = ATMSWITCH_CONN_MAP.get(connName);
   try {
     if (containerHandler != null) {
       containerHandler.cleanResource(reconnectFlag);
     } else {
       logger.error(
           "( " + connName + " ,cleanUpResources(,) ) No Processor found for this message....");
       return false;
     }
     ConnectionPool.removeConnection(connName);
     return true;
   } catch (Exception e) {
     logger.error(" ( " + connName + " ,cleanUpResources() ) Exception ", e);
     if (containerHandler != null) containerHandler.closeResource();
     return false;
   } finally {
     containerHandler = null;
   }
 }
  private String getResponse(String connId, String request, String nwMessageUID) throws Exception {
    Message msg = null;
    Message respMsg = null;
    ServerContainer containerHandle = ConnectionPool.getHandleToContainer(connId);
    MessageProcessor processMsg = null;
    try {
      if (containerHandle != null) {
        processMsg = containerHandle.getMessageProcessor();
      } else {
        if (!ATMSwitchTCPHandler.manualStopPool.get(connId)) {
          logger.warn(
              "( "
                  + connId
                  + " ,getResponse(,) ) No Processor found for this message. Tring to connect Again......");
          loadATMSwitchConfig(connId);
          containerHandle = ConnectionPool.getHandleToContainer(connId);
        }
        if (containerHandle != null) {
          processMsg = containerHandle.getMessageProcessor();
        } else {
          logger.error(
              "( "
                  + connId
                  + " ,getResponse(,) ), There is no Processor found for this message....");
          return null;
        }
      }
      MessageUID messageUID = new MessageUID();
      // Preparing a message Object to hold request and message unique id (here Message Unique Id is
      // STAN of the ISO request).
      if (!"".equalsIgnoreCase(nwMessageUID)) {
        String messageUIDStr = nwMessageUID;
        messageUID.setMaskedUID(messageUIDStr);
        messageUID.setUID(messageUIDStr);

      } else {
        ISOMsg res = new ISOMsg();
        res.setPackager(new ISO87APackager());
        res.unpack(request.getBytes());
        MessageUIDGenerator messageUIDGenerator = containerHandle.getMessageUIDGenerator();
        if (messageUIDGenerator != null) {
          messageUID = messageUIDGenerator.generateMessageUID(res);
        }
      }
      logger.info(
          "( "
              + connId
              + " ,getResponse(, ,) ) Request message UID : "
              + messageUID.getMaskedUID());
      msg = new Message(request, messageUID);

      Date startDate = new Date();

      // Sending Message
      processMsg.deliverMessageToThirdParty(containerHandle, msg);

      // Requesting for Response
      respMsg = processMsg.retrieveMessageFromThirdParty(containerHandle, msg);

      Date endDate = new Date();

      String respUID = (respMsg != null) ? respMsg.getMessageUID().getMaskedUID() : "NOTRCVD";
      if ("NOTRCVD".equals(respUID)) {
        logger.warn(
            "( "
                + connId
                + " ,getResponse(, ,) ) Round Robin Time [ "
                + ((endDate.getTime() - startDate.getTime()) / 1000)
                + " ] Req [ "
                + messageUID.getMaskedUID()
                + " ] Res [ NOTRCVD ]");
      } else {
        logger.info(
            "( "
                + connId
                + " ,getResponse(, ,) ) Round Robin Time [ "
                + ((endDate.getTime() - startDate.getTime()) / 1000)
                + " ] Req [ "
                + messageUID.getMaskedUID()
                + " ] Res [ "
                + respUID
                + " ]");
      }

    } catch (IOException e) {
      // Catching an IO exception and calling re-connect.
      logger.error(" ( " + connId + " ,getResponse(, ,) ) IOException ", e);
      // containerHandle.reConnect(connId);

    }
    if (respMsg == null) {
      return null;
    } else return respMsg.getMessageContents();
  }