1 package net.systemeD.halcyon.connection {
5 import flash.system.Security;
7 import org.iotashan.oauth.*;
9 import net.systemeD.halcyon.Globals;
11 public class XMLBaseConnection extends Connection {
13 public function XMLBaseConnection() {
16 protected function loadedMap(event:Event):void {
17 dispatchEvent(new Event(LOAD_COMPLETED));
19 var map:XML = new XML(URLLoader(event.target).data);
24 for each(var nodeData:XML in map.node) {
25 id = Number(nodeData.@id);
26 version = uint(nodeData.@version);
28 var node:Node = getNode(id);
29 if ( node == null || !node.loaded ) {
30 var lat:Number = Number(nodeData.@lat);
31 var lon:Number = Number(nodeData.@lon);
32 tags = parseTags(nodeData.tag);
34 setNode(new Node(id, version, tags, true, lat, lon),false);
36 node.update(version, tags, true, lat, lon);
37 sendEvent(new EntityEvent(NEW_NODE, node), false);
42 for each(var data:XML in map.way) {
43 id = Number(data.@id);
44 version = uint(data.@version);
46 var way:Way = getWay(id);
47 if ( way == null || !way.loaded ) {
49 for each(var nd:XML in data.nd)
50 nodes.push(getNode(Number(nd.@ref)));
51 tags = parseTags(data.tag);
53 setWay(new Way(id, version, tags, true, nodes),false);
55 way.update(version, tags, true, nodes);
56 sendEvent(new EntityEvent(NEW_WAY, way), false);
61 for each(var relData:XML in map.relation) {
62 id = Number(relData.@id);
63 version = uint(relData.@version);
65 var rel:Relation = getRelation(id);
66 if ( rel == null || !rel.loaded ) {
67 tags = parseTags(relData.tag);
68 var members:Array = [];
69 for each(var memberXML:XML in relData.member) {
70 var type:String = memberXML.@type.toLowerCase();
71 var role:String = memberXML.@role;
72 var memberID:Number = Number(memberXML.@ref);
73 var member:Entity = null;
74 if ( type == "node" ) {
75 member = getNode(memberID);
76 if ( member == null ) {
77 member = new Node(memberID,0,{},false,0,0);
78 setNode(Node(member),true);
80 } else if ( type == "way" ) {
81 member = getWay(memberID);
83 member = new Way(memberID,0,{},false,[]);
84 setWay(Way(member),true);
86 } else if ( type == "relation" ) {
87 member = getRelation(memberID);
89 member = new Relation(memberID,0,{},false,[]);
90 setRelation(Relation(member),true);
95 members.push(new RelationMember(member, role));
99 setRelation(new Relation(id, version, tags, true, members), false);
101 rel.update(version,tags,true,members);
102 sendEvent(new EntityEvent(NEW_RELATION, rel), false);
110 protected function registerPOINodes():void {
111 for each (var nodeID:Number in getAllNodeIDs()) {
112 var node:Node = getNode(nodeID);
113 if (!node.hasParentWays)
118 private function parseTags(tagElements:XMLList):Object {
119 var tags:Object = {};
120 for each (var tagEl:XML in tagElements)
121 tags[tagEl.@k] = tagEl.@v;