Ejemplo n.º 1
0
  /** {@inheritDoc} */
  @InternalUseOnly()
  public void responseReceived(final LDAPResponse response) throws LDAPException {
    if (!responseReturned.compareAndSet(false, true)) {
      return;
    }

    final long responseTime = System.nanoTime() - createTime;

    final LDAPResult result;
    if (response instanceof ConnectionClosedResponse) {
      final ConnectionClosedResponse ccr = (ConnectionClosedResponse) response;
      final String msg = ccr.getMessage();
      if (msg == null) {
        result =
            new LDAPResult(
                asyncRequestID.getMessageID(),
                ccr.getResultCode(),
                ERR_CONN_CLOSED_WAITING_FOR_ASYNC_RESPONSE.get(),
                null,
                StaticUtils.NO_STRINGS,
                StaticUtils.NO_CONTROLS);
      } else {
        result =
            new LDAPResult(
                asyncRequestID.getMessageID(),
                ccr.getResultCode(),
                ERR_CONN_CLOSED_WAITING_FOR_ASYNC_RESPONSE_WITH_MESSAGE.get(msg),
                null,
                StaticUtils.NO_STRINGS,
                StaticUtils.NO_CONTROLS);
      }
    } else {
      result = (LDAPResult) response;
    }

    switch (operationType) {
      case ADD:
        connection.getConnectionStatistics().incrementNumAddResponses(responseTime);
        break;
      case DELETE:
        connection.getConnectionStatistics().incrementNumDeleteResponses(responseTime);
        break;
      case MODIFY:
        connection.getConnectionStatistics().incrementNumModifyResponses(responseTime);
        break;
      case MODIFY_DN:
        connection.getConnectionStatistics().incrementNumModifyDNResponses(responseTime);
        break;
    }

    resultListener.ldapResultReceived(asyncRequestID, result);
    asyncRequestID.setResult(result);
  }