docs: @Override
      public ControlledBounceProxyInformation calculateBounceProxy(String ccid) {
  
          // get all available bounce proxies from the list
          List<BounceProxyRecord> records = bpDirectory.getAssignableBounceProxies();
  
          if (records == null || records.isEmpty()) {
              throw new JoynrChannelNotAssignableException("No bounce proxy instances available", ccid);
          }
  
          // Sort records by the timestamp when they were last assigned a channel.
          // Smallest timestamp should appear first in the list.
          // Records that never have been assigned a channel have the timestamp
          // -1, so they appear first in the list.
          Collections.sort(records, new Comparator<BounceProxyRecord>() {
  
              @Override
              public int compare(BounceProxyRecord o1, BounceProxyRecord o2) {
  
                  if (o1.getLastAssignedTimestamp() == o2.getLastAssignedTimestamp()) {
                      return 0;
                  }
  
                  if (o1.getLastAssignedTimestamp() == BounceProxyRecord.ASSIGNMENT_TIMESTAMP_NEVER) {
                      return -1;
                  }
  
                  if (o2.getLastAssignedTimestamp() == BounceProxyRecord.ASSIGNMENT_TIMESTAMP_NEVER) {
                      return 1;
                  }
  
                  return (int) (o1.getLastAssignedTimestamp() - o2.getLastAssignedTimestamp());
              }
          });
  
          // find the first one in the list which is the next to assign a channel
          // to
          return records.get(0).getInfo();
      }