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 findEntityMemberIndexes(entity:Entity):Array {
34 var indexes:Array = [];
35 for (var index:uint = 0; index < members.length; index++) {
36 var member:RelationMember = members[index];
37 if ( member.entity == entity )
43 public function getMember(index:uint):RelationMember {
44 return members[index];
47 public function setMember(index:uint, member:RelationMember):void {
48 member.entity.addParent(this);
49 members.splice(index, 1, member);
53 public function insertMember(index:uint, member:RelationMember):void {
54 member.entity.addParent(this);
55 members.splice(index, 0, member);
59 public function appendMember(member:RelationMember):uint {
60 member.entity.addParent(this);
63 return members.length;
66 public function removeMember(entity:Entity):void {
68 while ((i=findEntityMemberIndex(entity))>-1) {
71 entity.removeParent(this);
75 public function removeMemberByIndex(index:uint):void {
76 var removed:Array=members.splice(index, 1);
77 var entity:Entity=removed[0].entity;
78 if (findEntityMemberIndex(entity)==-1) { entity.removeParent(this); }
82 public override function remove():void {
84 for each (var member:RelationMember in members) { member.entity.removeParent(this); }
87 dispatchEvent(new EntityEvent(Connection.RELATION_DELETED, this));
90 internal override function isEmpty():Boolean {
91 return (deleted || (members.length==0));
94 public function getDescription():String {
96 var relTags:Object = getTagsHash();
97 if ( relTags["type"] ) {
98 desc = relTags["type"];
100 desc += " " + relTags[desc];
102 if ( relTags["ref"] )
103 desc += " " + relTags["ref"];
104 if ( relTags["name"] )
105 desc += " " + relTags["name"];
109 public override function getType():String {
113 public override function toString():String {
114 return "Relation("+id+"@"+version+"): "+members.length+" members "+getTagList();