private void printPoolDetails2(HFCPool pool, StringBuffer sb) {

    sb.append(pool._poolName);

    sb.append("\n").append(pool.toString()).append(" ");

    if (pool.cellInfo == null) {
      return;
    }

    PoolCellInfo cellInfo = pool.cellInfo;
    PoolCostInfo costInfo = cellInfo.getPoolCostInfo();
    PoolCostInfo.PoolSpaceInfo spaceInfo = costInfo.getSpaceInfo();
    PoolCostInfo.PoolQueueInfo queueInfo = costInfo.getStoreQueue();

    long total = spaceInfo.getTotalSpace();
    long precious = spaceInfo.getPreciousSpace();

    sb.append("   ")
        .append("Mode=")
        .append(pool.getPoolModeString())
        .append(";Total=")
        .append(total)
        .append(";Precious=")
        .append(precious)
        .append(";Frac=")
        .append((float) precious / (float) total)
        .append(";Queue={")
        .append(queueInfo.toString())
        .append("}\n");

    for (Object o : pool.flushInfos.values()) {

      HFCFlushInfo info = (HFCFlushInfo) o;
      StorageClassFlushInfo flush = info.getStorageClassFlushInfo();

      String storeName = flush.getStorageClass() + "@" + flush.getHsm();

      long size = flush.getTotalPendingFileSize();
      int count = flush.getRequestCount();
      int active = flush.getActiveCount();

      sb.append("   ")
          .append(storeName)
          .append("  ")
          .append(info._flushingRequested ? "R" : "-")
          .append(info._flushingPending ? "P" : "-")
          .append(info._flushingError != 0 ? "E" : "-")
          .append("(")
          .append(info._flushingId)
          .append(")")
          .append(";Size=")
          .append(size)
          .append(";Count=")
          .append(count)
          .append(";Active=")
          .append(active)
          .append("\n");
    }
  }
 public HsmFlushControlCore.PoolDetails getDetails() {
   HsmFlushControllerPoolDetails details = new HsmFlushControllerPoolDetails();
   details._name = _poolName;
   details._isActive = isActive;
   details._isReadOnly = isReadOnly();
   details._cellInfo = cellInfo;
   details._flushInfos = new ArrayList<>();
   for (HFCFlushInfo info : flushInfos.values()) {
     details._flushInfos.add(info.getDetails());
   }
   return details;
 }
  /////////////////////////////////////////////////////////////////////////////////////////
  //
  //      message arrived handler
  //
  private void poolFlushDoFlushMessageArrived(PoolFlushDoFlushMessage msg) {
    if (LOG_ENABLED) {
      _log.info("poolFlushDoFlushMessageArrived : " + msg);
    }
    String poolName = msg.getPoolName();
    synchronized (_poolCollector) {
      HFCPool pool = _poolCollector.getPoolByName(poolName);
      if (pool == null) {
        _log.warn(
            "poolFlushDoFlushMessageArrived : message arrived for non configured pool : "
                + poolName);
        return;
      }
      String storageClass = msg.getStorageClassName() + "@" + msg.getHsmName();
      HFCFlushInfo info = pool.flushInfos.get(storageClass);
      if (info == null) {
        _log.warn(
            "poolFlushDoFlushMessageArrived : message arrived for non existing storage class : "
                + storageClass);
        //
        // the real one doesn't exists anymore, so we simulate one.
        //
        info =
            new HFCFlushInfo(
                pool, new StorageClassFlushInfo(msg.getHsmName(), msg.getStorageClassName()));
      }
      if (msg.getReturnCode() != 0) {
        if (LOG_ENABLED) {
          _log.info("Flush failed (msg=" + (msg.isFinished() ? "Finished" : "Ack") + ") : " + msg);
        }

        info.setFlushingFailed(msg.getReturnCode(), msg.getErrorObject());
        //
        // maybe we have to call flushingDone here as well.
        //
        return;
      }
      if (msg.isFinished()) {
        if (LOG_ENABLED) {
          _log.info("Flush finished : " + msg);
        }

        updateFlushCellAndFlushInfos(msg, pool);
        info.setFlushingDone();
        _eventDispatcher.flushingDone(info);
      } else {
        info.setFlushingAck(msg.getFlushId());
      }
    }
  }
  private void updateFlushCellAndFlushInfos(PoolFlushControlInfoMessage msg, HFCPool pool) {

    pool.cellInfo = msg.getCellInfo();
    StorageClassFlushInfo[] flushInfos = msg.getFlushInfos();
    HashMap<String, HFCFlushInfo> map = new HashMap<>();
    if (flushInfos != null) {
      for (StorageClassFlushInfo flushInfo : flushInfos) {
        String storageClass = flushInfo.getStorageClass() + "@" + flushInfo.getHsm();

        HFCFlushInfo info = pool.flushInfos.get(storageClass);
        if (info == null) {
          map.put(storageClass, new HFCFlushInfo(pool, flushInfo));
        } else {
          info.updateFlushInfo(flushInfo);
          map.put(storageClass, info);
        }
      }
    }
    pool.flushInfos = map;
    pool.isActive = true;
    pool.lastUpdated = System.currentTimeMillis();
    pool.answerCount++;
  }