Merge branch 'master' of github.com:systemed/potlatch2
[potlatch2.git] / net / systemeD / halcyon / connection / actions / JoinNodeAction.as
1 package net.systemeD.halcyon.connection.actions {
2
3     import net.systemeD.halcyon.connection.*;
4
5     public class JoinNodeAction extends CompositeUndoableAction {
6
7       private var node:Node;
8       private var nodes:Array;
9       private var ways:Array;
10
11       /**
12       * For the given node, replace all the given nodes with this node, and insert
13       * the given node into the list of ways.
14       */
15       public function JoinNodeAction(node:Node, nodes:Array, ways:Array) {
16           super("Join node "+node.id);
17           this.node = node;
18           this.nodes = nodes;
19           this.ways = ways;
20       }
21
22       public override function doAction():uint {
23
24           // don't insert the node into either a way that contains it already,
25           // nor a way that contains a dupe we're replacing.
26           var avoidWays:Array = node.parentWays;
27
28           for each (var dupe:Node in nodes) {
29             for each (var parentWay:Way in dupe.parentWays) {
30               avoidWays.push(parentWay);
31             }
32
33             dupe.replaceWith(node, push);
34           }
35
36           for each (var way:Way in ways) {
37             if (avoidWays.indexOf(way) == -1) {
38               way.insertNodeAtClosestPosition(node, false, push);
39             }
40           }
41           return super.doAction();
42       }
43
44       public override function undoAction():uint {
45           return super.undoAction();
46       }
47
48     }
49 }