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 connectionInstance:Connection = null;
12 protected static var policyURL:String;
13 protected static var apiBaseURL:String;
14 protected static var params:Object;
16 public static function getConnection(initparams:Object=null):Connection {
17 if ( connectionInstance == null ) {
19 params = initparams == null ? new Object() : initparams;
20 policyURL = getParam("policy", "http://127.0.0.1:3000/api/crossdomain.xml");
21 apiBaseURL = getParam("api", "http://127.0.0.1:3000/api/0.6/");
22 var connectType:String = getParam("connection", "XML");
24 if ( connectType == "XML" )
25 connectionInstance = new XMLConnection();
27 connectionInstance = new AMFConnection();
29 return connectionInstance;
32 public static function getParam(name:String, defaultValue:String):String {
33 trace("Returning param "+name+" as "+(params[name] == null ? defaultValue : params[name]));
34 return params[name] == null ? defaultValue : params[name];
37 public static function get apiBase():String {
41 public static function get serverName():String {
42 return getParam("serverName", "Localhost");
45 public static function getConnectionInstance():Connection {
46 return connectionInstance;
49 public function getEnvironment(responder:Responder):void {}
52 public static var LOAD_STARTED:String = "load_started";
53 public static var LOAD_COMPLETED:String = "load_completed";
54 public static var SAVE_STARTED:String = "save_started";
55 public static var SAVE_COMPLETED:String = "save_completed";
56 public static var NEW_CHANGESET:String = "new_changeset";
57 public static var NEW_CHANGESET_ERROR:String = "new_changeset_error";
58 public static var NEW_NODE:String = "new_node";
59 public static var NEW_WAY:String = "new_way";
60 public static var NEW_RELATION:String = "new_relation";
61 public static var NEW_POI:String = "new_poi";
62 public static var TAG_CHANGE:String = "tag_change";
63 public static var NODE_MOVED:String = "node_moved";
65 // store the data we download
66 private var negativeID:Number = -1;
67 private var nodes:Object = {};
68 private var ways:Object = {};
69 private var relations:Object = {};
70 private var pois:Array = [];
71 private var changeset:Changeset = null;
73 protected function get nextNegative():Number {
77 protected function setNode(node:Node):void {
78 nodes[node.id] = node;
79 sendEvent(new EntityEvent(NEW_NODE, node));
82 protected function setWay(way:Way):void {
84 sendEvent(new EntityEvent(NEW_WAY, way));
87 protected function setRelation(relation:Relation):void {
88 relations[relation.id] = relation;
89 sendEvent(new EntityEvent(NEW_RELATION, relation));
92 public function sendEvent(e:*):void {
96 protected function registerPOI(node:Node):void {
97 if ( pois.indexOf(node) < 0 ) {
99 sendEvent(new EntityEvent(NEW_POI, node));
103 protected function unregisterPOI(node:Node):void {
104 var index:uint = pois.indexOf(node);
106 pois.splice(index,1);
110 protected function setActiveChangeset(changeset:Changeset):void {
111 this.changeset = changeset;
112 sendEvent(new EntityEvent(NEW_CHANGESET, changeset));
115 public function getNode(id:Number):Node {
119 public function getWay(id:Number):Way {
123 public function getRelation(id:Number):Relation {
124 return relations[id];
127 public function createNode(tags:Object, lat:Number, lon:Number):Node {
128 var node:Node = new Node(nextNegative, 0, tags, true, lat, lon);
133 public function createWay(tags:Object, nodes:Array):Way {
134 var way:Way = new Way(nextNegative, 0, tags, true, nodes.concat());
139 public function createRelation(tags:Object, members:Array):Relation {
140 var relation:Relation = new Relation(nextNegative, 0, tags, true, members.concat());
141 setRelation(relation);
145 public function getAllNodeIDs():Array {
147 for each (var node:Node in nodes)
152 public function getAllWayIDs():Array {
154 for each (var way:Way in ways)
159 public function getAllRelationIDs():Array {
161 for each (var relation:Relation in relations)
162 list.push(relation.id);
166 public function getActiveChangeset():Changeset {
170 // these are functions that the Connection implementation is expected to
171 // provide. This class has some generic helpers for the implementation.
172 public function loadBbox(left:Number, right:Number,
173 top:Number, bottom:Number):void {
176 public function setAppID(id:Object):void {}
177 public function setAuthToken(id:Object):void {}
178 public function createChangeset(tags:Object):void {}
179 public function uploadChanges():void {}