protected boolean canHandle(final Network network, final Service service) {
    s_logger.debug(
        "Checking if OvsElement can handle service "
            + service.getName()
            + " on network "
            + network.getDisplayText());
    if (network.getBroadcastDomainType() != BroadcastDomainType.Vswitch) {
      return false;
    }

    if (!_networkModel.isProviderForNetwork(getProvider(), network.getId())) {
      s_logger.debug("OvsElement is not a provider for network " + network.getDisplayText());
      return false;
    }

    if (!_ntwkSrvcDao.canProviderSupportServiceInNetwork(
        network.getId(), service, Network.Provider.Ovs)) {
      s_logger.debug(
          "OvsElement can't provide the "
              + service.getName()
              + " service on network "
              + network.getDisplayText());
      return false;
    }

    return true;
  }
  @Override
  public String getProviderForServiceInVpc(long vpcId, Service service) {
    SearchCriteria<VpcServiceMapVO> sc = AllFieldsSearch.create();
    sc.setParameters("vpcId", vpcId);
    sc.setParameters("service", service.getName());
    VpcServiceMapVO ntwkSvc = findOneBy(sc);
    if (ntwkSvc == null) {
      throw new UnsupportedServiceException(
          "Service " + service.getName() + " is not supported in the vpc id=" + vpcId);
    }

    return ntwkSvc.getProvider();
  }
 @Override
 @DB
 public void persistNetworkServiceProviders(
     long networkId, Map<String, String> serviceProviderMap) {
   TransactionLegacy txn = TransactionLegacy.currentTxn();
   txn.start();
   for (String service : serviceProviderMap.keySet()) {
     NetworkServiceMapVO serviceMap =
         new NetworkServiceMapVO(
             networkId,
             Service.getService(service),
             Provider.getProvider(serviceProviderMap.get(service)));
     _ntwkSvcMap.persist(serviceMap);
   }
   txn.commit();
 }