1 package net.systemeD.halcyon.connection {
3 public class Relation extends Entity {
4 private var members:Array;
5 public static var entity_type:String = 'relation';
7 public function Relation(id:Number, version:uint, tags:Object, loaded:Boolean, members:Array) {
8 super(id, version, tags, loaded);
9 this.members = members;
10 for each (var member:RelationMember in members) { member.entity.addParent(this); }
13 public function update(version:uint, tags:Object, loaded:Boolean, members:Array):void {
14 var member:RelationMember;
15 for each (member in this.members) { member.entity.removeParent(this); }
16 updateEntityProperties(version,tags,loaded); this.members=members;
17 for each (member in members) { member.entity.addParent(this); }
20 public function get length():uint {
21 return members.length;
24 public function findEntityMemberIndex(entity:Entity):int {
25 for (var index:uint = 0; index < members.length; index++) {
26 var member:RelationMember = members[index];
27 if ( member.entity == entity )
33 public function getMember(index:uint):RelationMember {
34 return members[index];
37 public function setMember(index:uint, member:RelationMember):void {
38 member.entity.addParent(this);
39 members.splice(index, 1, member);
43 public function insertMember(index:uint, member:RelationMember):void {
44 member.entity.addParent(this);
45 members.splice(index, 0, member);
49 public function appendMember(member:RelationMember):uint {
50 member.entity.addParent(this);
53 return members.length;
56 public function removeMember(entity:Entity):void {
58 while ((i=findEntityMemberIndex(entity))>-1) {
61 entity.removeParent(this);
65 public function removeMemberByIndex(index:uint):void {
66 var removed:Array=members.splice(index, 1);
67 var entity:Entity=removed[0].entity;
68 if (findEntityMemberIndex(entity)==-1) { entity.removeParent(this); }
72 public override function remove():void {
74 for each (var member:RelationMember in members) { member.entity.removeParent(this); }
77 dispatchEvent(new EntityEvent(Connection.RELATION_DELETED, this));
80 internal override function isEmpty():Boolean {
81 return (deleted || (members.length==0));
84 public function getDescription():String {
86 var relTags:Object = getTagsHash();
87 if ( relTags["type"] ) {
88 desc = relTags["type"];
90 desc += " " + relTags[desc];
93 desc += " " + relTags["ref"];
94 if ( relTags["name"] )
95 desc += " " + relTags["name"];
99 public override function getType():String {
103 public override function toString():String {
104 return "Relation("+id+"@"+version+"): "+members.length+" members "+getTagList();