class EdgesAnswerer extends Answerer {

  @VisibleForTesting
  static Multiset<Row> getIpsecEdges(
      ValueGraph<IpsecPeerConfigId, IpsecSession> ipsecTopology,
      Map<String, Configuration> configurations) {
    NetworkConfigurations nf = NetworkConfigurations.of(configurations);
    Multiset<Row> rows = HashMultiset.create();
    ipsecTopology.edges().stream()
        .filter(
            // only considering endpoints with established IPsec session
            endpoint -> {
              Optional<IpsecSession> ipsecSession =
                  ipsecTopology.edgeValue(endpoint.nodeU(), endpoint.nodeV());
              return ipsecSession.isPresent()
                  && ipsecSession.get().getNegotiatedIpsecP2Proposal() != null;
            })
        .forEach(
            endpoint -> {
              IpsecPeerConfig ipsecPeerConfigU = nf.getIpsecPeerConfig(endpoint.nodeU());
              IpsecPeerConfig ipsecPeerConfigV = nf.getIpsecPeerConfig(endpoint.nodeV());
              if (ipsecPeerConfigU == null || ipsecPeerConfigV == null) {
                return;
              }
              rows.add(
                  getIpsecEdge(
                      endpoint.nodeU().getHostName(),
                      ipsecPeerConfigU,
                      endpoint.nodeV().getHostName(),
                      ipsecPeerConfigV));
            });
    return rows;
  }

    EdgesAnswerer(Question question, IBatfish batfish);

}