/**
   * Read a chunk of repository connections.
   *
   * @param rval is the place to put the read policies.
   * @param returnIndex is a map from the object id (resource id) and the rval index.
   * @param params is the set of parameters.
   */
  protected void getRepositoryConnectionsChunk(
      RepositoryConnection[] rval, Map returnIndex, ArrayList params) throws ManifoldCFException {
    ArrayList list = new ArrayList();
    String query =
        buildConjunctionClause(list, new ClauseDescription[] {new MultiClause(nameField, params)});
    IResultSet set =
        performQuery("SELECT * FROM " + getTableName() + " WHERE " + query, list, null, null);
    int i = 0;
    while (i < set.getRowCount()) {
      IResultRow row = set.getRow(i++);
      String name = row.getValue(nameField).toString();
      int index = ((Integer) returnIndex.get(name)).intValue();
      RepositoryConnection rc = new RepositoryConnection();
      rc.setIsNew(false);
      rc.setName(name);
      rc.setDescription((String) row.getValue(descriptionField));
      rc.setClassName((String) row.getValue(classNameField));
      rc.setACLAuthority((String) row.getValue(groupNameField));
      rc.setMaxConnections((int) ((Long) row.getValue(maxCountField)).longValue());
      String xml = (String) row.getValue(configField);
      if (xml != null && xml.length() > 0) rc.getConfigParams().fromXML(xml);
      rval[index] = rc;
    }

    // Do throttle part
    throttleSpecManager.getRows(rval, returnIndex, params);
  }
    /**
     * Notify the implementing class of the existence of a cached version of the object. The object
     * is passed to this method so that the execute() method below will have it available to operate
     * on. This method is also called for all objects that are freshly created as well.
     *
     * @param objectDescription is the unique identifier of the object.
     * @param cachedObject is the cached object.
     */
    public void exists(ICacheDescription objectDescription, Object cachedObject)
        throws ManifoldCFException {
      // Cast what came in as what it really is
      RepositoryConnectionDescription objectDesc =
          (RepositoryConnectionDescription) objectDescription;
      RepositoryConnection ci = (RepositoryConnection) cachedObject;

      // Duplicate it!
      if (ci != null) ci = ci.duplicate();

      // In order to make the indexes line up, we need to use the hashtable built by
      // the constructor.
      returnValues[((Integer) returnMap.get(objectDesc.getConnectionName())).intValue()] = ci;
    }