package br.com.stimuli.loading.lazyloaders{ import br.com.stimuli.loading.*; import br.com.stimuli.loading.loadingtypes.*; import br.com.stimuli.loading.lazyloaders.*; import flash.events.*; import flash.net.*; import flash.display.*; import flash.media.Sound; import flash.utils.*; import flash.system.LoaderContext; import flash.system.ApplicationDomain; import flash.media.SoundLoaderContext; /** * @example Basic usage: var lazy : LazyXMLLoader = new LazyXMLLoader("sample-lazy.xml", "myBulkLoader"); // listen to when the lazy loader has loaded the external definition lazy.addEventListener(Event.LAZY_LOADED, onLazyLoaded); // add regular events to the BulkLoader instance lazy.addEventListener(ProgressEvent.PROGRESS, onLazyProgress); lazy.addEventListener(Event.LAZY_LOADED, onAllItemsLoaded); function onLazyLoaded(evt : Event) : void{ // now you can add individual events for items onLazyLoaded.get("config").addEventListener(BulkLoader.COMPLETE, onConfigLoaded); ... } */ dynamic public class LazyXMLLoader extends LazyBulkLoader { function LazyXMLLoader(url : *, name : String, numConnections : int = BulkLoader.DEFAULT_NUM_CONNECTIONS, logLevel : int = BulkLoader.DEFAULT_LOG_LEVEL){ super (url, name, numConnections, logLevel); } public var _sourceXML : XML; /** Reads a xml as a string and create a complete bulk loader from it. * @param withData The xml to be read as a string. * @private */ lazy_loader override function _lazyParseLoader(withData : String) : void{ var xml : XML = _sourceXML = new XML(withData); var substitutions : Object = stringSubstitutions || {}; for each (var substitutionXML: *in xml.stringSubstitutions.children()){ substitutions[substitutionXML.name()] = substitutionXML.toString(); } stringSubstitutions = substitutions; allowsAutoIDFromFileName = lazy_loader::toBoolean(xml.allowsAutoIDFromFileName); var possibleHandlerName : String; var theNode : XMLList; var hasNode : Boolean; for each (var itemNode:XML in xml.files.children()) { var props : Object = {}; var atts : XMLList = itemNode.@*; var nodeName : String; var headers : Array; var header : URLRequestHeader; var headerName : String; var headerValue : String; if (!String(itemNode.url)) { trace("[LazyBulkLoader] got a item files with no url, ignoring"); continue; } for each (var configNode:XML in itemNode.children()) { nodeName = configNode.name(); if (nodeName == "headers") { headers = []; for each (var headerNode:XML in configNode.children()) { headerName = String(headerNode.name()); headerValue = String(headerNode[0]) ; header = new URLRequestHeader( headerName, headerValue); headers.push(header); } props["headers"] = headers; } else if (nodeName == "context") { // todo: catch for sound items var context : Object; if (BulkLoader.guessType(String(itemNode.url)) == BulkLoader.TYPE_SOUND) { context = new SoundLoaderContext(); } else { context = new LoaderContext(); } context.applicationDomain = ApplicationDomain.currentDomain; props[BulkLoader.CONTEXT] = context; } else if (lazy_loader::INT_TYPES.indexOf(nodeName) > -1) { props[nodeName] = int(String(configNode)); //trace("(is int)"); } else if (lazy_loader::NUMBER_TYPES.indexOf(nodeName) > -1) { props[nodeName] = Number(String(configNode)); //trace("(is number)"); } else if (lazy_loader::STRINGED_BOOLEAN.indexOf(nodeName) > -1) { props[nodeName] = lazy_loader::toBoolean(String(configNode)); //trace("(is boolean)"); } else if (nodeName != "url") { props[nodeName] = String(configNode); } } var theItem : LoadingItem = add(String(String(itemNode.url)), props); } } } }