1 package net.systemeD.halcyon.connection {
3 import flash.events.EventDispatcher;
4 import flash.utils.Dictionary;
6 public class Entity extends EventDispatcher {
7 private var _id:Number;
8 private var _version:uint;
9 private var tags:Object = {};
10 private var modified:Boolean = false;
11 private var _loaded:Boolean = true;
12 private var parents:Dictionary = new Dictionary();
14 public function Entity(id:Number, version:uint, tags:Object, loaded:Boolean) {
16 this._version = version;
18 this._loaded = loaded;
22 public function get id():Number {
26 public function get version():uint {
30 public function get loaded():Boolean {
34 public function updateEntityProperties(version:uint, tags:Object, loaded:Boolean):void {
35 _version=version; this.tags=tags; _loaded=loaded;
38 // Tag-handling methods
40 public function hasTags():Boolean {
41 for (var key:String in tags)
46 public function getTag(key:String):String {
50 public function setTag(key:String, value:String):void {
51 var old:String = tags[key];
53 if ( value == null || value == "" )
58 dispatchEvent(new TagEvent(Connection.TAG_CHANGE, this, key, key, old, value));
62 public function renameTag(oldKey:String, newKey:String):void {
63 var value:String = tags[oldKey];
64 if ( oldKey != newKey ) {
68 dispatchEvent(new TagEvent(Connection.TAG_CHANGE, this, oldKey, newKey, value, value));
72 public function getTagList():TagList {
73 return new TagList(tags);
76 public function getTagsCopy():Object {
78 for (var key:String in tags )
79 copy[key] = tags[key];
83 public function getTagsHash():Object {
84 // hm, not sure we should be doing this, but for read-only purposes
85 // it's faster than using getTagsCopy
89 public function getTagArray():Array {
91 for (var key:String in tags )
92 copy.push(new Tag(this, key, tags[key]));
96 // Clean/dirty methods
98 public function get isDirty():Boolean {
102 public function markClean(newID:Number, newVersion:uint):void {
104 this._version = newVersion;
108 protected function markDirty():void {
114 public function addParent(parent:Entity):void {
115 parents[parent]=true;
118 public function removeParent(parent:Entity):void {
119 delete parents[parent];
122 public function get parentWays():Array {
124 for (var o:Object in parents) {
125 if (o is Way) { a.push(o); }
130 public function get parentRelations():Array {
132 for (var o:Object in parents) {
133 if (o is Relation) { a.push(o); }
138 public function get parentObjects():Array {
140 for (var o:Object in parents) { a.push(o); }
144 public function hasParent(entity:Entity):Boolean {
145 return parents[entity] == true;
150 public function getType():String {