Relation selection dialog
[potlatch2.git] / net / systemeD / halcyon / connection / Relation.as
index 02fccdc005e5f24b17a3c281d3908af660b35be8..784d6f73275a7f0c64b0587074105b4451ec1003 100644 (file)
@@ -4,39 +4,80 @@ package net.systemeD.halcyon.connection {
         private var members:Array;
                public static var entity_type:String = 'relation';
 
-        public function Relation(id:Number, version:uint, tags:Object, members:Array) {
-            super(id, version, tags);
+        public function Relation(id:Number, version:uint, tags:Object, loaded:Boolean, members:Array) {
+            super(id, version, tags, loaded);
             this.members = members;
+                       for each (var member:RelationMember in members) { member.entity.addParent(this); }
         }
 
+        public function update(version:uint, tags:Object, loaded:Boolean, members:Array):void {
+                       var member:RelationMember;
+                       for each (member in this.members) { member.entity.removeParent(this); }
+                       updateEntityProperties(version,tags,loaded); this.members=members;
+                       for each (member in members) { member.entity.addParent(this); }
+               }
+               
         public function get length():uint {
             return members.length;
         }
 
+        public function findEntityMemberIndex(entity:Entity):int {
+            for (var index:uint = 0; index < members.length; index++) {
+                var member:RelationMember = members[index];
+                if ( member.entity == entity )
+                    return index;
+            }
+            return -1;
+        }
+        
         public function getMember(index:uint):RelationMember {
             return members[index];
         }
 
         public function setMember(index:uint, member:RelationMember):void {
-            members.splice(index, 1, member);
+                       member.entity.addParent(this);
+                       members.splice(index, 1, member);
         }
 
         public function insertMember(index:uint, member:RelationMember):void {
+                       member.entity.addParent(this);
             members.splice(index, 0, member);
         }
 
         public function appendMember(member:RelationMember):uint {
+                       member.entity.addParent(this);
             members.push(member);
             return members.length;
         }
 
         public function removeMember(index:uint):void {
-            members.splice(index, 1);
+            var removed:Array=members.splice(index, 1);
+                       removed[0].entity.removeParent(this);
+        }
+
+        public function getDescription():String {
+            var desc:String = "";
+            var relTags:Object = getTagsHash();
+            if ( relTags["type"] ) {
+                desc = relTags["type"];
+                if ( relTags[desc] )
+                    desc += " " + relTags[desc];
+            }
+            if ( relTags["ref"] )
+                desc += " " + relTags["ref"];
+            if ( relTags["name"] )
+                desc += " " + relTags["name"];
+            return desc;
         }
 
                public override function getType():String {
                        return 'relation';
                }
+               
+               public override function toString():String {
+            return "Relation("+id+"@"+version+"): "+members.length+" members "+getTagList();
+        }
+
     }
 
 }