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;
}
}
}