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 : LazyJSONLoader = new LazyJSONLoader("sample-lazy.json", "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 LazyJSONLoader extends LazyBulkLoader { private var _decodeFunc : Function; function LazyJSONLoader(url : *, name : String, numConnections : int = BulkLoader.DEFAULT_NUM_CONNECTIONS, logLevel : int = BulkLoader.DEFAULT_LOG_LEVEL){ super (url, name, numConnections, logLevel); } /** 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 */ public function get decodeFunc() : Function { if (!Boolean(_decodeFunc)){ // defaults to adobe`s corelib decoder: var decoderClass : Object = getDefinitionByName("com.adobe.serialization.json.JSON"); _decodeFunc = decoderClass.decode; } return _decodeFunc; } public function set decodeFunc(value:Function) : void { _decodeFunc = value; } lazy_loader override function _lazyParseLoader(withData : String) : void{ var source : Object = decodeFunc(withData); stringSubstitutions = source["stringSubstitutions"] || undefined; _allowsAutoIDFromFileName = source["allowsAutoIDFromFileName"] || false; _numConnections = source["numConnections"] || BulkLoader.DEFAULT_NUM_CONNECTIONS; logLevel = source["logLevel"] || BulkLoader.DEFAULT_LOG_LEVEL; if (source["name"]){ _name = source["name"]; } var url : String; for each (var fileProp : Object in source["files"]) { var props : Object = fileProp; if (!String(props["url"])) { trace("[LazyBulkLoader] got a item files with no url, ignoring"); continue; } if (props["context"]){ var context : Object; if (BulkLoader.guessType(String(fileProp["url"])) == BulkLoader.TYPE_SOUND || fileProp["type"] == "sound") { context = new SoundLoaderContext(); } else { context = new LoaderContext(); } context.applicationDomain = ApplicationDomain.currentDomain; props[BulkLoader.CONTEXT] = context; }else if (fileProp["headers"]){ var oldHeaders : Object = fileProp["headers"]; fileProp["headers"]= []; for each(var headerObject : Object in oldHeaders){ for (var headerName : String in headerObject){ var theHeader : URLRequestHeader = new URLRequestHeader(headerName, headerObject[headerName]); fileProp["headers"].push(theHeader); } } } url = props["url"]; delete props["url"]; var theItem : LoadingItem = add(url, props); } } } }