splinklibrary feature demo
here is a quick demo class showcasing a few splinklibrary features. Please note that this example focuses on showing some splinklibrary features and it is not considered to be a best practice approach for loading and tweening an image. Also note that the demo is just a teaser, splinklibrary has a lot more useful concepts to offer. I recommend you to checkout the source and see for yourself.
package
{
import org.splink.library.loading.QLoader;
import org.splink.library.loading.QUrlLoader;
import org.splink.library.logging.ILogger;
import org.splink.library.logging.ILoggerFactory;
import org.splink.library.logging.LogLevel;
import org.splink.library.logging.LogRange;
import org.splink.library.logging.LoggerFactory;
import org.splink.library.logging.LoggerProvider;
import org.splink.library.logging.logoutput.DefaultOutputFormatter;
import org.splink.library.logging.logoutput.FirebugOutput;
import org.splink.library.logging.logoutput.QLogOutput;
import org.splink.library.queue.Queue;
import org.splink.library.queue.QueueEvent;
import org.splink.library.queue.QueueResultProvider;
import org.splink.library.queue.ResultQueue;
import org.splink.library.tween.TweenAction;
import org.splink.library.tween.TweenPool;
import org.splink.library.tween.sprop.FilterProp;
import mx.effects.easing.Sine;
import flash.display.DisplayObject;
import flash.display.Sprite;
import flash.filters.BlurFilter;
import flash.net.URLLoaderDataFormat;
import flash.net.URLRequest;
/**
* This class demos the usage of some of the splinklibrary classes.
*
* @author Max Kugland
*/
public class Demo extends Sprite
{
private var _logger:ILogger;
/**
* Configure the logger once for the project
*/
private function configureLogger():void
{
// we need an ILoggerFactory, which will create our ILogger instances
var factory:ILoggerFactory = new LoggerFactory();
// set a factory id
factory.setId("demo");
// set the range of LogLevels which will be logged
factory.setRange(new LogRange(LogLevel.TRACE, LogLevel.FATAL));
// set an IOutputFormatter to format our logmessages
factory.setOuputFormatter(new DefaultOutputFormatter("demo-app"));
// add ILogOuputs which will send the logs to their destination,
// in this case we let the logs appear in QLog and in Firebug
factory.addLogOutput(new QLogOutput());
factory.addLogOutput(new FirebugOutput());
// add the factory to the LoggerProvider
LoggerProvider.addLoggerFactory(factory);
// get an ILogger from the LoggerProvider using the ILoggerFactory
// with the id "demo"
_logger = LoggerProvider.getLogger("demo", Demo);
}
public function Demo()
{
configureLogger();
// log a message with the LogLevel INFO, as INFO is within the
// specified LogRange, the message will get logged
_logger.log(LogLevel.INFO, "starting Demo");
// Create a ResultQueue and register listeners for error and
// completion events as ResultQueue is capable of distributing
// events because it extends Distributor
var queue:ResultQueue = new ResultQueue;
queue.register(QueueEvent.ON_COMPLETE, onComplete);
queue.register(QueueEvent.ON_ERROR, onError);
// add a loader to the queue which loads xml and assign it an id
//(feedResult)
queue.add(new QUrlLoader(
new URLRequest("http://splink.org/?feed=rss2"),
URLLoaderDataFormat.TEXT, "feedResult"));
// add a loader to the queue which loads an image and register a
// listener for its completion event, also pass the queue instance
// (q) to enable it's usage within the method which is called on
// it's completion, (QLoader also extends Distributor and therefore
// can fire events)
queue.add(new QLoader(
new URLRequest(
"http://splink.org/wp-content/themes/splink/img/header.jpg"))).
register(QueueEvent.ON_COMPLETE, onImage, queue);
// start the queue
queue.start();
}
/**
* Called when the image loader completes
*
* @param e the event sent by the image loader
* @param q an optional object, in this case the queue
*/
private function onImage(e:QueueEvent, q:Queue):void
{
// unregister from the event source (the image loader)
e.getSource().unregister(QueueEvent.ON_COMPLETE, onImage);
// cast the event source (IDistributor) to QLoader
var loader:QLoader = (e.getSource() as QLoader);
// add the loaded image data to the stage, and set it's alpha
// value to 0
var bmp:DisplayObject = loader.getContent();
addChild(bmp).alpha = 0;
_logger.log(LogLevel.TRACE, "image present: " + bmp);
// create a bitmapfilter which is used for tweening
var fprop:ISpecialProp = new FilterProp(new BlurFilter(0, 0, 1));
// create a TweenPool and add some TweenActions targeting the
// loaded image (bmp). tween the alpha from it's current value
// (0) to 1 and tween the blurX and blurY properties of the image
// from 100 to 0
var t:TweenPool = new TweenPool;
t.add(new TweenAction(bmp, Sine.easeOut, 500,
TweenAction.ALPHA, bmp.alpha, 1));
t.add(new TweenAction(bmp, Sine.easeOut, 500,
TweenAction.BLUR_X, 100, 0, 0, fprop));
t.add(new TweenAction(bmp, Sine.easeOut, 500,
TweenAction.BLUR_Y, 100, 0, 0, fprop));
// add the TweenPool to the end of the queue
q.add(t);
}
/**
* If one of the queued operations fails, we get notified here
*/
private function onError(e:QueueEvent):void
{
_logger.log(LogLevel.ERROR, "Demo error " + e.getErrorMessage());
}
/**
* As the queue continues even if a queued operation fails onComplete
* gets called in any case.
*/
private function onComplete(e:QueueEvent):void
{
// as we used a ResultQueue we can retrieve a QueueResultProvider
// which carries the results of the IResultQueueable items within
// the ResultQueue. Note that the TweenPool is not an
// IResultQueueable but an IQueueable, as it doesn't compute any
// results, so the QueueResultProvider only holds the results of
// both loaders (the image loader and the xml loader)
var p:QueueResultProvider =
(e.getSource() as ResultQueue).getResultProvider();
// here we retrieve the result with the id "feedResult" from the
// QueueResultProvider and as we know its content is xml we cast
// it to xml
var xml:XML = XML(p.getResultById("feedResult").getResult());
// we log the title of the loaded xml document which is a rss feed
// at the TRACE LogLevel and ouput that the demo is complete at
//INFO level
_logger.log(LogLevel.TRACE, "xml feed title: "+xml["channel"].title);
_logger.log(LogLevel.INFO, "Demo complete.");
// Eventually we invoke finalize on the event source which results
// in removement of all the registred listeners
e.getSource().finalize();
}
}
}