private void saveTransportZone(Network network, boolean newTransportZone) throws IOException {
   if (newTransportZone) {
     dbClient.createObject(network);
     _log.info("Added networks {}", network.getLabel());
     recordTransportZoneEvent(
         network,
         OperationTypeEnum.CREATE_NETWORK.getEvType(true),
         OperationTypeEnum.CREATE_NETWORK.getDescription());
   } else {
     dbClient.updateAndReindexObject(network);
     _log.info("Updated transport zone {}", network.getLabel());
     recordTransportZoneEvent(
         network,
         OperationTypeEnum.UPDATE_NETWORK.getEvType(true),
         OperationTypeEnum.UPDATE_NETWORK.getDescription());
   }
 }
 /**
  * Remove the transport zone for a given network system. This typically means to dis-associated it
  * unless this is the last network system associated with the transport zone. In this case, the
  * transport zone will be deleted if:
  *
  * <ul>
  *   <li>It was discovered
  *   <li>It does not have any user-created ports
  *   <li>It does not have any registered ports
  * </ul>
  *
  * @param tzone
  * @param uri
  * @throws IOException
  */
 public List<String> removeNetworkSystemTransportZone(Network tzone, String uri)
     throws IOException {
   tzone.removeNetworkSystems(Collections.singletonList(uri)); // dis-associate
   // list of end points getting deleted
   ArrayList<String> toRemove = new ArrayList<String>();
   if (tzone.getNetworkSystems().isEmpty()) { // if this is the last network system
     List<String> userCreatedEndPoints = TransportZoneReconciler.getUserCreatedEndPoints(tzone);
     if (userCreatedEndPoints.isEmpty()
         && !tzone.assignedToVarray()) { // delete only if not modified by a user
       _log.info("Removing network {}", tzone.getLabel());
       toRemove.addAll(tzone.retrieveEndpoints());
       NetworkAssociationHelper.handleEndpointsRemoved(tzone, toRemove, dbClient, _coordinator);
       dbClient.markForDeletion(tzone);
       recordTransportZoneEvent(
           tzone,
           OperationTypeEnum.DELETE_NETWORK.getEvType(true),
           OperationTypeEnum.DELETE_NETWORK.getDescription());
     } else {
       _log.info(
           "Network {} is changed by the user and will "
               + "not be removed. Discovered end points will be removed.",
           tzone.getLabel());
       for (String pt : tzone.retrieveEndpoints()) {
         if (!userCreatedEndPoints.contains(pt)) {
           toRemove.add(pt);
         }
       }
       tzone.removeEndpoints(toRemove);
       NetworkAssociationHelper.handleEndpointsRemoved(tzone, toRemove, dbClient, _coordinator);
       _log.info("Discovered endpoints removed {}", toRemove.toArray());
       dbClient.persistObject(tzone);
       recordTransportZoneEvent(
           tzone,
           OperationTypeEnum.UPDATE_NETWORK.getEvType(true),
           OperationTypeEnum.UPDATE_NETWORK.getDescription());
     }
   } else {
     _log.info("Removing network {} from network system {}", tzone.getLabel(), uri);
     dbClient.persistObject(tzone);
     recordTransportZoneEvent(
         tzone,
         OperationTypeEnum.UPDATE_NETWORK.getEvType(true),
         OperationTypeEnum.UPDATE_NETWORK.getDescription());
   }
   return toRemove;
 }