package data.trees
{
import data.Tree;
import mx.collections.IViewCursor;
import mx.collections.XMLListCollection;
import mx.events.CollectionEvent;
public class AdminTree extends Tree
{
private function collectionChanged(event:CollectionEvent, elementGroupName:Object, elementName:Object) : void {
var admin:XML = XML(collection.getItemAt(0));
var group:XML = admin.child(elementGroupName)[0];
switch(event.kind) {
case "add":
for each(var obj:Object in event.items) {
var ref:XML = getRef(obj as XML);
var collection:XMLListCollection = new XMLListCollection();
collection.source = group.children();
var cursor:IViewCursor = collection.createCursor();
while(!cursor.afterLast) {
if(titleCompare(cursor.current, ref) > 0) {
cursor.insert(ref);
return;
}
cursor.moveNext();
}
if(cursor.afterLast) {
group.appendChild(getRef(XML(obj)));
}
}
return;
case "remove":
for each(obj in event.items) {
var item:XML = XML(obj);
group.setChildren(group.child(elementName).(!(@id == item.@id && @clientId == item.@clientId)));
}
return;
case "update":
for each(obj in event.items) {
if(obj.property == "@useCount") {
item = obj.source as XML;
var list:XMLList = group.children().(@id == item.@id && @clientId == item.@clientId);
if(list.length() > 0) {
if(list[0].@useCount != item.@useCount) {
list[0].@useCount = item.@useCount;
}
}
}
}
}
}
protected override function getRef(item:XML) : XML {
var ref:XML = super.getRef(item);
if(item.attribute("useCount").length() > 0) {
ref.@useCount = item.@useCount;
}
return ref;
}
protected override function mapsChanged(event:CollectionEvent) : void {
collectionChanged(event, "Maps", "Map");
}
protected override function layersChanged(event:CollectionEvent) : void {
collectionChanged(event, "Layers", "Layer");
}
protected override function queryAspectsChanged(event:CollectionEvent) : void {
collectionChanged(event, "QueryAspects", "QueryAspect");
}
protected override function templatesChanged(event:CollectionEvent) : void {
collectionChanged(event, "Templates", "Template");
}
protected override function serversChanged(event:CollectionEvent) : void {
collectionChanged(event, "Servers", "Server");
}
protected override function reportsChanged(event:CollectionEvent) : void {
collectionChanged(event, "Reports", "Report");
}
public override function buildTree() : void {
super.buildTree();
var admin:XML = ;
admin.appendChild();
var maps:Array = new Array();
for each(var map:XML in dataSource.maps) {
maps.push(getRef(map));
}
maps.sort(titleCompare);
for each(map in maps) {
admin.Maps.appendChild(map);
}
admin.appendChild();
var layers:Array = new Array();
for each(var layer:XML in dataSource.layers) {
layers.push(getRef(layer));
}
layers.sort(titleCompare);
for each(layer in layers) {
admin.Layers.appendChild(layer);
}
admin.appendChild();
var queryAspects:Array = new Array();
for each(var queryAspect:XML in dataSource.queryAspects) {
queryAspects.push(getRef(queryAspect));
}
queryAspects.sort(titleCompare);
for each(queryAspect in queryAspects) {
admin.QueryAspects.appendChild(queryAspect);
}
admin.appendChild();
var templates:Array = new Array();
for each(var template:XML in dataSource.templates) {
templates.push(getRef(template));
}
templates.sort(titleCompare);
for each(template in templates) {
admin.Templates.appendChild(template);
}
admin.appendChild();
var servers:Array = new Array();
for each(var server:XML in dataSource.servers) {
servers.push(getRef(server));
}
servers.sort(titleCompare);
for each(server in servers) {
admin.Servers.appendChild(server);
}
admin.appendChild();
var reports:Array = new Array();
for each(var report:XML in dataSource.reports) {
reports.push(getRef(report));
}
reports.sort(titleCompare);
for each(report in reports) {
admin.Reports.appendChild(report);
}
collection.addItem(admin);
}
}
}