package 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;
import br.com.stimuli.loading.BulkLoader;
/**
* Dispatched when the external file representing this serialized bulk loader intance has been downloaded and parse. At
* this point the user can get references to all items
and attach events to them accordingly.
*
* @eventType br.com.stimuli.loading.BulkProgressEvent.PROGRESS
*/
[Event(name="lazyComplete", type="flash.events.Event")];
/** A serialized version of af BulkLoader instance. This class allows you to keep external files with a complete description of what loading items should be loaded. This class is not meant to be used directly, but used as a base classes for specific data transports (xml, json).
*
*/
public class LazyBulkLoader extends BulkLoader {
namespace lazy_loader = "http://code.google.com/p/bulk-loader/";
lazy_loader var _lazyTheURL : URLRequest;
/** @private */
lazy_loader var _lazyLoader : URLLoader;
/** @private */
lazy_loader static const INT_TYPES : Array = ["maxTries", "priority"];
/** @private */
lazy_loader static const NUMBER_TYPES : Array = ["weigth"];
/** @private */
lazy_loader static const STRINGED_BOOLEAN : Array = ["preventCache", "pausedAtStart", "checkPolicyFile"];
public static const LAZY_COMPLETE : String = "lazyComplete";
public function LazyBulkLoader(url : *, name : String, numConnections : int = BulkLoader.DEFAULT_NUM_CONNECTIONS, logLevel : int = BulkLoader.DEFAULT_LOG_LEVEL){
if (url is String) {
lazy_loader::_lazyTheURL = new URLRequest(url);
}
lazy_loader::_lazyTheURL = (lazy_loader::_lazyTheURL as URLRequest) || url;
super(name, numConnections, logLevel);
}
/** Starts to fetch the external data that will define a BulkLoader instance when parsed. When the fetch operation
* is done and the item is correctly parsed, it will dispatch an event with name LAZY_COMPLETE
.
*/
override public function start(numConnections : int = -1):void {
if (numConnections > 0){
this._numConnections = numConnections;
}
lazy_loader::_lazyLoader = new URLLoader(lazy_loader::_lazyTheURL);
lazy_loader::_lazyLoader.addEventListener(Event.COMPLETE, lazy_loader::_lazyOnComplete, false, 0, true);
}
/** @private */
lazy_loader function _lazyOnComplete(evt : Event):void {
lazy_loader::_lazyParseLoader(evt.target.data);
dispatchEvent(new Event(LAZY_COMPLETE));
super.start();
}
/** Useful subclasses should implement this method for a specific seralization method. The .start method will be called right after
* the serialized data is parsed.
* @param withData A String
to be turned into a BulkLoader
instance.
* @private
*/
lazy_loader function _lazyParseLoader(withData : String) : void{
throw new Error("subclasses should implement a useful method for this");
}
/** @private */
lazy_loader static function toBoolean(value : String):Boolean {
if (value == "true" || value == "1" || value == "yes") {
return true;
}
return false;
}
override public function toString():String {
return "[LazyBulkLoader] url: " + lazy_loader::_lazyTheURL.url + ", bulkloader: " + super.toString();
}
}
}