d0e727437f2c61b6a9b052e3a8ca02e259ffb683
[potlatch2.git] / net / systemeD / halcyon / connection / Entity.as
1 package net.systemeD.halcyon.connection {
2
3     import flash.events.EventDispatcher;
4
5     public class Entity extends EventDispatcher {
6         private var _id:Number;
7         private var _version:uint;
8         private var tags:Object = {};
9         private var modified:Boolean = false;
10
11         public function Entity(id:Number, version:uint, tags:Object) {
12             this._id = id;
13             this._version = version;
14             this.tags = tags;
15             modified = id < 0;
16         }
17
18         public function get id():Number {
19             return _id;
20         }
21
22         public function get version():uint {
23             return _version;
24         }
25
26         public function hasTags():Boolean {
27             for (var key:String in tags)
28                 return true;
29             return false;
30         }
31
32         public function getTag(key:String):String {
33             return tags[key];
34         }
35
36         public function setTag(key:String, value:String):void {
37             var old:String = tags[key];
38             if ( old != value ) {
39                 if ( value == null || value == "" )
40                     delete tags[key];
41                 else
42                     tags[key] = value;
43                 modified = true;
44                 dispatchEvent(new TagEvent(Connection.TAG_CHANGE, this, key, key, old, value));
45             }
46         }
47
48         public function renameTag(oldKey:String, newKey:String):void {
49             var value:String = tags[oldKey];
50             if ( oldKey != newKey ) {
51                 delete tags[oldKey];
52                 tags[newKey] = value;
53                 modified = true;
54                 dispatchEvent(new TagEvent(Connection.TAG_CHANGE, this, oldKey, newKey, value, value));
55             }
56         }
57
58         public function getTagList():TagList {
59             return new TagList(tags);
60         }
61
62         public function getTagsCopy():Object {
63             var copy:Object = {};
64             for (var key:String in tags )
65                 copy[key] = tags[key];
66             return copy;
67         }
68
69         public function getTagArray():Array {
70             var copy:Array = [];
71             for (var key:String in tags )
72                 copy.push(new Tag(this, key, tags[key]));
73             return copy;
74         }
75
76         public function get isDirty():Boolean {
77             return modified;
78         }
79
80         public function markClean(newID:Number, newVersion:uint):void {
81             this._id = newID;
82             this._version = newVersion;
83             modified = false;
84         }
85
86         protected function markDirty():void {
87             modified = true;
88         }
89
90         public function getType():String {
91             return '';
92         }
93
94     }
95
96 }