@Override
  public boolean destroyPrivateGateway(final PrivateGateway gateway, final VirtualRouter router)
      throws ConcurrentOperationException, ResourceUnavailableException {

    if (!_networkModel.isVmPartOfNetwork(router.getId(), gateway.getNetworkId())) {
      s_logger.debug(
          "Router doesn't have nic for gateway " + gateway + " so no need to removed it");
      return true;
    }

    final Network privateNetwork = _networkModel.getNetwork(gateway.getNetworkId());

    s_logger.debug("Releasing private ip for gateway " + gateway + " from " + router);
    boolean result =
        setupVpcPrivateNetwork(
            router, false, _networkModel.getNicProfile(router, privateNetwork.getId(), null));
    if (!result) {
      s_logger.warn("Failed to release private ip for gateway " + gateway + " on router " + router);
      return false;
    }

    // revoke network acl on the private gateway.
    if (!_networkACLMgr.revokeACLItemsForPrivateGw(gateway)) {
      s_logger.debug("Failed to delete network acl items on " + gateway + " from router " + router);
      return false;
    }

    s_logger.debug(
        "Removing router "
            + router
            + " from private network "
            + privateNetwork
            + " as a part of delete private gateway");
    result = result && _itMgr.removeVmFromNetwork(router, privateNetwork, null);
    s_logger.debug("Private gateawy " + gateway + " is removed from router " + router);
    return result;
  }