/**
   * Sets up all the network links to be simulated,
   *
   * @param datacenters the datacenters being simulated.
   * @param brokers the brokers being simulated.
   * @since 1.0
   */
  static void setUpNetworkLinks(
      HashMap<String, PowerDatacenter> datacenters, HashMap<String, DatacenterBroker> brokers) {
    NetworkMapEntryDAO neDAO = new NetworkMapEntryDAO();

    /*
     * Establish all links whose source is a datacenter
     */
    DatacenterRegistryDAO drDAO = new DatacenterRegistryDAO();
    String[] datacenterNames = drDAO.getAllDatacentersNames();

    for (String source : datacenterNames) {
      PowerDatacenter src = datacenters.get(source);

      List<NetworkMapEntry> destinationList = neDAO.getListOfDestinations(source);

      for (NetworkMapEntry entry : destinationList) {
        String destinationName = entry.getDestination();

        if (drDAO.getDatacenterRegistry(destinationName) != null) { // destination is a datacenter
          PowerDatacenter dest = datacenters.get(destinationName);
          NetworkTopology.addLink(
              src.getId(), dest.getId(), entry.getBandwidth(), entry.getLatency());
        } else { // destination is a customer
          DatacenterBroker dest = brokers.get(destinationName);
          NetworkTopology.addLink(
              src.getId(), dest.getId(), entry.getBandwidth(), entry.getLatency());
        }
      }
    }

    /*
     * Establish all links whose source is a customer
     */
    CustomerRegistryDAO crDAO = new CustomerRegistryDAO();
    String[] customerNames = crDAO.getCustomersNames();

    for (String source : customerNames) {
      DatacenterBroker src = brokers.get(source);

      List<NetworkMapEntry> destinationList = neDAO.getListOfDestinations(source);

      for (NetworkMapEntry entry : destinationList) {
        String destinationName = entry.getDestination();

        if (drDAO.getDatacenterRegistry(destinationName) != null) { // destination is a datacenter
          PowerDatacenter dest = datacenters.get(destinationName);
          NetworkTopology.addLink(
              src.getId(), dest.getId(), entry.getBandwidth(), entry.getLatency());
        } else { // destination is a customer
          DatacenterBroker dest = brokers.get(destinationName);
          NetworkTopology.addLink(
              src.getId(), dest.getId(), entry.getBandwidth(), entry.getLatency());
        }
      }
    }
  }