class OspfSessionCompatibilityAnswerer extends Answerer {

  @VisibleForTesting
  static Multiset<Row> getRows(
      Map<String, Configuration> configurations,
      Set<String> nodes,
      Set<String> remoteNodes,
      CandidateOspfTopology ospfTopology,
      Map<String, ColumnMetadata> columnMetadataMap,
      Set<OspfSessionStatus> statuses) {
    Multiset<Row> rows = HashMultiset.create();
    for (String node : nodes) {
      Configuration configuration = configurations.get(node);
      configuration
          .getVrfs()
          .values()
          .forEach(
              vrf -> {
                for (OspfProcess ospfProcess : vrf.getOspfProcesses().values()) {
                  ospfProcess
                      .getOspfNeighborConfigs()
                      .keySet()
                      .forEach(
                          ospfNeighborConfigId -> {
                            Set<OspfNeighborConfigId> filteredNeighbors =
                                ospfTopology.neighbors(ospfNeighborConfigId).stream()
                                    .filter(
                                        neighborConfigId ->
                                            remoteNodes.contains(neighborConfigId.getHostname()))
                                    .collect(ImmutableSet.toImmutableSet());
                            rows.addAll(
                                getRowsForAllNeighbors(
                                    configurations,
                                    ospfNeighborConfigId,
                                    filteredNeighbors,
                                    ospfTopology,
                                    columnMetadataMap,
                                    statuses));
                          });
                }
              });
    }
    return rows;
  }

  public  OspfSessionCompatibilityAnswerer(Question question, IBatfish batfish);

}