1 package net.systemeD.halcyon.connection {
5 import flash.events.EventDispatcher;
6 import flash.events.Event;
8 public class Connection extends EventDispatcher {
10 private static var CONNECTION_TYPE:String = "AMF";
11 private static var connectionInstance:Connection = null;
13 protected static var policyURL:String = "http://127.0.0.1:3000/api/crossdomain.xml";
14 protected static var apiBaseURL:String = "http://127.0.0.1:3000/api/0.6/";
16 public static function getConnection():Connection {
17 if ( connectionInstance == null ) {
18 if ( CONNECTION_TYPE == "XML" )
19 connectionInstance = new XMLConnection();
21 connectionInstance = new AMFConnection();
23 return connectionInstance;
26 public function getEnvironment(responder:Responder):void {}
29 public static var NEW_NODE:String = "new_node";
30 public static var NEW_WAY:String = "new_way";
31 public static var NEW_RELATION:String = "new_relation";
32 public static var NEW_POI:String = "new_poi";
34 // store the data we download
35 private var negativeID:Number = -1;
36 private var nodes:Object = {};
37 private var ways:Object = {};
38 private var relations:Object = {};
39 private var pois:Array = [];
41 protected function get nextNegative():Number {
45 protected function setNode(node:Node):void {
46 nodes[node.id] = node;
47 dispatchEvent(new EntityEvent(NEW_NODE, node));
50 protected function setWay(way:Way):void {
52 dispatchEvent(new EntityEvent(NEW_WAY, way));
55 protected function setRelation(relation:Relation):void {
56 relations[relation.id] = relation;
57 dispatchEvent(new EntityEvent(NEW_RELATION, relation));
60 protected function registerPOI(node:Node):void {
61 if ( pois.indexOf(node) < 0 ) {
63 dispatchEvent(new EntityEvent(NEW_POI, node));
67 protected function unregisterPOI(node:Node):void {
68 var index:uint = pois.indexOf(node)
74 public function getNode(id:Number):Node {
78 public function getWay(id:Number):Way {
82 public function getRelation(id:Number):Relation {
86 public function createNode(tags:Object, lat:Number, lon:Number):Node {
87 var node:Node = new Node(nextNegative, 0, tags, lat, lon);
92 public function createWay(tags:Object, nodes:Array):Way {
93 var way:Way = new Way(nextNegative, 0, tags, nodes.concat());
98 public function createRelation(tags:Object, members:Array):Relation {
99 var relation:Relation = new Relation(nextNegative, 0, tags, members.concat());
100 setRelation(relation);
104 public function getAllNodeIDs():Array {
106 for each (var node:Node in nodes)
111 public function getAllWayIDs():Array {
113 for each (var way:Way in ways)
118 public function getAllRelationIDs():Array {
120 for each (var relation:Relation in relations)
121 list.push(relation.id);
125 // these are functions that the Connection implementation is expected to
126 // provide. This class has some generic helpers for the implementation.
127 public function loadBbox(left:Number, right:Number,
128 top:Number, bottom:Number):void {