(
E after,
E newNode,
E before,
boolean rewire)
| 584 | * rewiring operation. |
| 585 | */ |
| 586 | public void doInsertBetween( |
| 587 | E after, |
| 588 | E newNode, |
| 589 | E before, |
| 590 | boolean rewire) throws PlanException { |
| 591 | checkInPlan(newNode); |
| 592 | List<E> newNodePreds = getPredecessors(newNode); |
| 593 | //assuming that the newNode has zero or one predecessor |
| 594 | E newNodePred = (newNodePreds == null? null: newNodePreds.get(0)); |
| 595 | if (!replaceNode(after, newNode, before, mFromEdges) || !replaceNode(before, newNode, after, mToEdges)) { |
| 596 | int errCode = 1094; |
| 597 | String msg = "Attempt to insert between two nodes " + |
| 598 | "that were not connected."; |
| 599 | PlanException pe = new PlanException(msg, errCode, PigException.INPUT); |
| 600 | throw pe; |
| 601 | } |
| 602 | mFromEdges.put(newNode, before); |
| 603 | mToEdges.put(newNode, after); |
| 604 | |
| 605 | if(rewire) { |
| 606 | if((newNodePred != null) && !(newNodePred.equals(after))) { |
| 607 | newNodePred.regenerateProjectionMap(); |
| 608 | newNode.rewire(newNodePred, 0, after, true); |
| 609 | } |
| 610 | newNode.regenerateProjectionMap(); |
| 611 | IndexHelper<E> indexHelper = new IndexHelper<E>(getPredecessors(newNode)); |
| 612 | before.rewire(after, indexHelper.getIndex(after), newNode, false); |
| 613 | } |
| 614 | } |
| 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) { |
no test coverage detected