コード例 #1
0
  public void removeLeafBlock(T networkNode) {
    validateNotMutating();
    mutating = true;
    try {
      if (!leafNodes.remove(networkNode.location, networkNode)) {
        throw new IllegalArgumentException("Leaf node not found in the BlockNetwork");
      }
      final Iterator<SimpleNetwork<T>> networkIterator = networks.iterator();
      while (networkIterator.hasNext()) {
        final SimpleNetwork<T> network = networkIterator.next();
        if (network.hasLeafNode(networkNode)) {
          boolean degenerate = network.removeLeafNode(networkNode);
          if (!degenerate) {
            notifyLeafNodesRemoved(network, Collections.singleton(networkNode));
          } else {
            T onlyLeafNode = network.getLeafNodes().iterator().next();
            notifyLeafNodesRemoved(network, Sets.newHashSet(networkNode, onlyLeafNode));

            networkIterator.remove();
            notifyNetworkRemoved(network);
          }
        }
      }
    } finally {
      mutating = false;
    }
  }