/**
   * Prepares the REST client
   *
   * @throws URISyntaxException
   */
  private void restClientInit() throws URISyntaxException {
    DefaultApacheHttpClientConfig clientConfig = new DefaultApacheHttpClientConfig();
    clientConfig.getProperties().put(ApacheHttpClientConfig.PROPERTY_HANDLE_COOKIES, Boolean.TRUE);
    clientConfig
        .getProperties()
        .put(ApacheHttpClientConfig.PROPERTY_PREEMPTIVE_AUTHENTICATION, Boolean.TRUE);
    clientConfig.getProperties().put(ClientConfig.PROPERTY_CONNECT_TIMEOUT, getHttpTimeout());
    clientConfig.getProperties().put(ClientConfig.PROPERTY_READ_TIMEOUT, getHttpTimeout());
    clientConfig
        .getProperties()
        .put(ClientConfig.PROPERTY_THREADPOOL_SIZE, getHttpMaxConnections());

    crowdServer = new URI(getCrowdServerUrl()).resolve("rest/usermanagement/1/");

    ApacheHttpClientState httpState = new ApacheHttpClientState();
    httpState.setCredentials(
        null,
        crowdServer.getHost(),
        crowdServer.getPort(),
        getApplicationName(),
        getApplicationPassword());
    if (getHttpProxyHost().trim().length() > 0 && getHttpProxyPort() > 0) {
      clientConfig
          .getProperties()
          .put(
              ApacheHttpClientConfig.PROPERTY_PROXY_URI,
              getHttpProxyHost() + ':' + getHttpProxyPort());

      if (getHttpProxyUsername() != null && getHttpProxyPassword() != null) {
        httpState.setProxyCredentials(
            null,
            getHttpProxyHost(),
            getHttpProxyPort(),
            getHttpProxyUsername(),
            getHttpProxyPassword());
      }
    }
    clientConfig.getProperties().put(ApacheHttpClientConfig.PROPERTY_HTTP_STATE, httpState);

    if (LOG.isDebugEnabled()) {
      LOG.debug("HTTP Client config");
      LOG.debug(getCrowdServerUrl());
      LOG.debug(crowdServer.toString());
      LOG.debug(
          "PROPERTY_THREADPOOL_SIZE:"
              + clientConfig.getProperty(ClientConfig.PROPERTY_THREADPOOL_SIZE));
      LOG.debug(
          "PROPERTY_READ_TIMEOUT:" + clientConfig.getProperty(ClientConfig.PROPERTY_READ_TIMEOUT));
      LOG.debug(
          "PROPERTY_CONNECT_TIMEOUT:"
              + clientConfig.getProperty(ClientConfig.PROPERTY_CONNECT_TIMEOUT));
      LOG.debug(
          "PROPERTY_PROXY_URI:"
              + clientConfig.getProperty(ApacheHttpClientConfig.PROPERTY_PROXY_URI));
      LOG.debug("Crowd application name:" + getApplicationName());
    }

    client = ApacheHttpClient.create(clientConfig);
  }
 private HttpState getHttpState(Map<String, Object> props) {
   ApacheHttpClientState httpState =
       (ApacheHttpClientState) props.get(DefaultApacheHttpClientConfig.PROPERTY_HTTP_STATE);
   if (httpState != null) {
     return httpState.getHttpState();
   } else {
     return null;
   }
 }