public void doDelayedAnd(Adapter scda, ArrayList indexes) throws Exception {
    if (andDvaList.isEmpty()) {
      // DVA list is empty, so no ands.. can't narrow down the filtered list
      return;
    } else {
      IndexDef bestIndex = null;
      String bestIndexKey = null;
      IndexDef currentIndex = null;
      String currentIndexKey = null;
      String dvaName = null;
      int j;
      int i;
      // alright, find the best usuable index!
      for (i = 0; i < indexes.size(); i++) {
        currentIndex = ((IndexDef) indexes.get(i));
        for (j = 0; j < currentIndex.getDvas().size(); j++) {
          dvaName = ((String) ((IndexDef) indexes.get(i)).getDvas().get(j));
          if (andDvaList.containsKey(dvaName)) {
            if (currentIndexKey == null) {
              currentIndexKey = andDvaList.get(dvaName).toString();
            } else {
              currentIndexKey = currentIndexKey + ":" + andDvaList.get(dvaName).toString();
            }
          } else {
            break;
          }
        }
        if (j >= currentIndex.getDvas().size()
            && (bestIndex == null || currentIndex.getDvas().size() > bestIndex.getDvas().size())) {
          // All the required DVAs for that index were there
          // And this index has more DVAs so it will produce a smaller set of matches
          bestIndex = currentIndex;
          bestIndexKey = currentIndexKey;
        }
      }

      if (bestIndex != null) {
        // We found a usable index. Get the index we get from it
        this.filteredList = andFilteredList(scda.getObjects(bestIndex, bestIndexKey));
      }
      this.andDvaList.clear();
    }
  }