/**
   * Updates the stored base list with a new one based on the config.
   *
   * @param config
   */
  public void updateStoredBaseList(Config config) {
    List<String> bucketServers = config.getServers();
    if (bucketServers.size() > 0) {
      List<URI> newList = new ArrayList<URI>();
      for (String bucketServer : bucketServers) {
        String hostname = bucketServer.split(":")[0];
        try {
          newList.add(new URI("http://" + hostname + ":8091/pools"));
        } catch (URISyntaxException ex) {
          getLogger()
              .warn(
                  "Could not add node to updated bucket list because " + "of a parsing exception.");
          getLogger().debug("Could not parse list because: " + ex);
        }
      }

      if (nodeListsAreDifferent(storedBaseList, newList)) {
        getLogger()
            .info("Replacing current streaming node list " + storedBaseList + " with " + newList);
        potentiallyRandomizeNodeList(newList);
        storedBaseList = newList;
        getConfigurationProvider().updateBaseListFromConfig(newList);
      }
    }
  }
  private void initialize(List<URI> baseList, String bucket, String password) {
    potentiallyRandomizeNodeList(baseList);

    storedBaseList = new ArrayList<URI>();
    for (URI bu : baseList) {
      if (!bu.isAbsolute()) {
        throw new IllegalArgumentException("The base URI must be absolute");
      }
      storedBaseList.add(bu);
    }

    if (bucket == null || bucket.isEmpty()) {
      throw new IllegalArgumentException("The bucket name must not be null " + "or empty.");
    }
    if (password == null) {
      throw new IllegalArgumentException("The bucket password must not be " + " null.");
    }

    this.bucket = bucket;
    pass = password;
    configurationProvider = new ConfigurationProviderHTTP(baseList, bucket, password);
  }