| 615 | |
| 616 | // replaces (src -> dst) entry in multiMap with (src -> replacement) |
| 617 | private boolean replaceNode(E src, E replacement, E dst, MultiMap<E, E> multiMap) { |
| 618 | if(multiMap == null) return false; |
| 619 | |
| 620 | if(src == null) return false; |
| 621 | |
| 622 | List<E> nodes = (ArrayList<E>)multiMap.get(src); |
| 623 | if (nodes == null) { |
| 624 | //we need to add replacement to the multimap as long as replacement != null |
| 625 | if(replacement == null) { |
| 626 | return false; |
| 627 | } else if (dst == null) { |
| 628 | ArrayList<E> replacementNodes = new ArrayList<E>(); |
| 629 | replacementNodes.add(replacement); |
| 630 | multiMap.put(src, replacementNodes); |
| 631 | return true; |
| 632 | } else { |
| 633 | return false; |
| 634 | } |
| 635 | } |
| 636 | |
| 637 | if(dst == null) return false; |
| 638 | |
| 639 | boolean replaced = false; |
| 640 | ArrayList<E> replacementNodes = new ArrayList<E>(); |
| 641 | for(int i = 0; i < nodes.size(); ++i) { |
| 642 | E to = nodes.get(i); |
| 643 | if(to.equals(dst)) { |
| 644 | replaced = true; |
| 645 | if(replacement != null) { |
| 646 | replacementNodes.add(replacement); |
| 647 | } |
| 648 | } else { |
| 649 | replacementNodes.add(to); |
| 650 | } |
| 651 | } |
| 652 | |
| 653 | if(replaced) { |
| 654 | multiMap.removeKey(src); |
| 655 | if(replacementNodes.size() > 0) { |
| 656 | multiMap.put(src, replacementNodes); |
| 657 | } |
| 658 | } |
| 659 | return replaced; |
| 660 | } |
| 661 | |
| 662 | /** |
| 663 | * Replace an existing node in the graph with a new node. The new node |