package data { import flash.events.Event; import flash.events.EventDispatcher; import flash.events.IOErrorEvent; import flash.net.URLLoader; import flash.net.URLRequest; import flash.xml.XMLNode; import mx.controls.Alert; [Event(name="ready")] [Event(name="serverCacheDropped")] public class DataSourceGUI extends EventDispatcher { [Bindable] public var guiTree:XMLList; [Bindable] public var configs:XMLList; [Bindable] public var defaultConfig:XMLList; private var _configsUrl:String; private var _defaultConfigUrl:String; private var _serverUrl:String; private var _login:String; private var getRequestCounter:Number; private function getRequestCompleted():void { getRequestCounter--; if(getRequestCounter == 0) { buildTree(); } } private var treePutRequestCounter:Number; private function treePutRequestCompleted():void { treePutRequestCounter--; if(treePutRequestCounter == 0) { Alert.show("Saved"); } } private function finishSave():void { } public function logout(callback:Function):void { /*var logoutLoader:URLLoader = new URLLoader(); logoutLoader.addEventListener(Event.COMPLETE, function():void { callback(); }); logoutLoader.load(new URLRequest(_serverUrl + "request=Logout")); */ } private function loadData():void { getRequestCounter = 2; var configsLoader:URLLoader = new URLLoader(); configsLoader.addEventListener(Event.COMPLETE, function():void { configs = XMLList(configsLoader.data); getRequestCompleted(); }); configsLoader.load(new URLRequest(_configsUrl)); var defaultConfigLoader:URLLoader = new URLLoader(); defaultConfigLoader.addEventListener(Event.COMPLETE, function():void { defaultConfig =XMLList(defaultConfigLoader.data); getRequestCompleted(); }); defaultConfigLoader.load(new URLRequest(_defaultConfigUrl)); } private function buildTree():void { var tree:XML = ; var buttonBars:XML = ; var buttons:XML for(var i:Number=0;i; configNode.@name = configs[i].Geoide_Client_Config.name; configNode.appendChild(defaultConfig.Colors); var colorNodes:XMLList = defaultConfig.Colors; for(var j:Number=0;j 0) { clientId = item.@clientId.toString(). toLocaleLowerCase() == "true" ? true : false; } switch(item.localName()) { case "Context": list = contextProps.source; break; case "Map": list = mapProps.source; break; case "Server": list = serverProps; break; case "Layer": list = layerProps.source; break; case "QueryAspect": list = queryAspectProps.source; break; case "Template": list = templateProps.source; break; case "Report": list = reportProps.source; break; } if(list == null) return null; for each(var currentItem:XML in list.child(item.localName())) { var currentClientId:Boolean = false; if(currentItem.attribute("clientId").length() > 0) { currentClientId = currentItem.@clientId.toString(). toLocaleLowerCase() == "true" ? true : false; } if(currentClientId == clientId && currentItem.@id == item.@id) { return new XMLList(currentItem); } } */ return new XMLList(); } public function isOwner(item:XML):Boolean { /*var props:XML = item.child("Owner").length() == 0 ? getProps(item)[0] : item; if(props != null && props.Owner.length() > 0) { return props.Owner == _login; }*/ return false; } private function isClientId(item:XML):Boolean { return item.child("@clientId").length() > 0 && item.@clientId; } public function duplicateItem(item:XML):XML { /*var newItem:XML = item.copy(); newItem.@clientId = true; newItem.@id = lastId++; newItem.@status = "new"; if(item.localName() == "Server") { newItem.Title = item.Title + "_copy"; } else { newItem.Name = item.Name + "_copy"; } addItem(newItem); //Copy subitem refs switch(item.localName()) { case 'Map': for each(var map:XML in contextTree.Context.Maps.Map) { if(isClientId(map) == isClientId(item) && map.@id == item.@id) { var dupRef:XML = map.copy(); dupRef.@id = newItem.@id; dupRef.@clientId = true; XML(map.parent()).appendChild(dupRef); } } break; case 'Context': for each(var context:XML in contextTree.Context) { if(isClientId(context) == isClientId(item) && context.@id == item.@id) { dupRef = context.copy(); dupRef.@id = newItem.@id; dupRef.@clientId = true; XML(context.parent()).appendChild(dupRef); } } } */ return new XML(); } public function newConfig():XMLList { var newConfig:XMLList = defaultConfig; //newItem.@id = lastId++; //newItem.Owner = _login; return newConfig; } public function save():void { /*var updateServers:XMLList = serverProps.Server.(@status != "existing"); if(updateServers.length() > 0) { var serverPutter:URLLoader = new URLLoader(); serverPutter.addEventListener(Event.COMPLETE, function():void { var response:XML = XML(serverPutter.data); if(XML(response).localName() == "Error") { Alert.show("Couldn't store server properties!" + "\n" + response.ErrorMessage); } else { for each(var server:XML in response.Server) { setServerId(contextProps.source, server.@clientId, server.@Id); setServerId(layerProps.source, server.@clientId, server.@Id); setServerId(queryAspectProps.source, server.@clientId, server.@Id); setServerId(serverProps, server.@clientId, server.@Id); } for each(server in serverProps.child("Server").(@status == 'changed')) { server.@status = 'existing'; } removeDeleted(serverProps); saveNewChangedEntities(); } }); var serverPutRequest:URLRequest = new URLRequest(_serverUrl + "request=PutServers"); serverPutRequest.method = "POST"; serverPutRequest.data = "" + .appendChild( updateServers.copy()).toString(); serverPutter.load(serverPutRequest); } else { saveNewChangedEntities(); }*/ } public function addCollectionsEventListener(listener:Function):void { /*layerProps.addEventListener(CollectionEvent.COLLECTION_CHANGE, listener); contextProps.addEventListener(CollectionEvent.COLLECTION_CHANGE, listener); mapProps.addEventListener(CollectionEvent.COLLECTION_CHANGE, listener); queryAspectProps.addEventListener(CollectionEvent.COLLECTION_CHANGE, listener); templateProps.addEventListener(CollectionEvent.COLLECTION_CHANGE, listener); reportProps.addEventListener(CollectionEvent.COLLECTION_CHANGE, listener);*/ } public function isUnique(type:String, name:String, newElement:Boolean = false):Boolean { /*var count:Number = newElement ? 0 : 1; switch(type) { case 'Context': return XMLList(contextProps.source.Context.(Name == name)).length() == count; break; case 'Layer': return XMLList(layerProps.source.Layer.(Name == name)).length() == count; break; case 'QueryAspect': return XMLList(queryAspectProps.source.QueryAspect.(Name == name)).length() == count; break; case 'Template': return XMLList(templateProps.source.Template.(Name == name)).length() == count; break case 'Map': return XMLList(mapProps.source.Map.(Name == name)).length() == count; } */ return true; } } }