162 lines
3.6 KiB
ActionScript
Executable File
162 lines
3.6 KiB
ActionScript
Executable File
/*
|
|
Copyright (c) 2009 Yahoo! Inc. All rights reserved.
|
|
The copyrights embodied in the content of this file are licensed under the BSD (revised) open source license
|
|
*/
|
|
package com.yahoo.astra.utils
|
|
{
|
|
import flash.utils.getQualifiedClassName;
|
|
|
|
/**
|
|
* Creates an instance of the specified class. Sets initial properties, and calls specified methods.
|
|
*
|
|
* @author Josh Tynjala
|
|
*/
|
|
public class InstanceFactory
|
|
{
|
|
|
|
//--------------------------------------
|
|
// Constructor
|
|
//--------------------------------------
|
|
|
|
/**
|
|
* Constructor.
|
|
*/
|
|
public function InstanceFactory(targetClass:Class, properties:Object = null, methods:Object = null)
|
|
{
|
|
this.targetClass = targetClass;
|
|
this.properties = properties;
|
|
this.methods = methods;
|
|
}
|
|
|
|
//--------------------------------------
|
|
// Properties
|
|
//--------------------------------------
|
|
|
|
/**
|
|
* @private
|
|
* Storage for the targetClass property.
|
|
*/
|
|
private var _targetClass:Class = Object;
|
|
|
|
/**
|
|
* The class that will be instantiated.
|
|
*/
|
|
public function get targetClass():Class
|
|
{
|
|
return this._targetClass;
|
|
}
|
|
|
|
/**
|
|
* @private
|
|
*/
|
|
public function set targetClass(value:Class):void
|
|
{
|
|
this._targetClass = value;
|
|
}
|
|
|
|
/**
|
|
* Storage for the properties property.
|
|
*/
|
|
private var _properties:Object;
|
|
|
|
/**
|
|
* The initial values to pass to the properties of the
|
|
* newly-instantiated object.
|
|
*/
|
|
public function get properties():Object
|
|
{
|
|
return this._properties;
|
|
}
|
|
|
|
/**
|
|
* @private
|
|
*/
|
|
public function set properties(value:Object):void
|
|
{
|
|
this._properties = value;
|
|
}
|
|
|
|
/**
|
|
* @private
|
|
* Storage for the methods property.
|
|
*/
|
|
private var _methods:Object;
|
|
|
|
/**
|
|
* A set of methods to call once the object has been created and
|
|
* properties have been initialized. Format is a set of key-value pairs
|
|
* where the key is the name of the method and the value is an Array
|
|
* of parameter values.
|
|
*
|
|
* <p>Example: <code>{ load: [ "image.gif" ] }</code></p>
|
|
*/
|
|
public function get methods():Object
|
|
{
|
|
return this._methods;
|
|
}
|
|
|
|
/**
|
|
* @private
|
|
*/
|
|
public function set methods(value:Object):void
|
|
{
|
|
this._methods = value;
|
|
}
|
|
|
|
//--------------------------------------
|
|
// Public Methods
|
|
//--------------------------------------
|
|
|
|
/**
|
|
* Creates a new instance of the target class and initializes it.
|
|
*/
|
|
public function createInstance():Object
|
|
{
|
|
var instance:Object = new targetClass();
|
|
this.restoreInstance(instance);
|
|
return instance;
|
|
}
|
|
|
|
/**
|
|
* Initializes an object with the properties and methods. The object
|
|
* must be an instance of the <code>targetClass</code> property, or
|
|
* this method will throw an <code>ArgumentError</code>.
|
|
*/
|
|
public function restoreInstance(instance:Object):void
|
|
{
|
|
if(!(instance is targetClass))
|
|
{
|
|
throw new ArgumentError("Value to be initialized must be an instance of " + getQualifiedClassName(this.targetClass));
|
|
}
|
|
|
|
//set initial properties
|
|
if(this.properties)
|
|
{
|
|
for(var propName:String in this.properties)
|
|
{
|
|
if(instance.hasOwnProperty(propName))
|
|
{
|
|
instance[propName] = properties[propName];
|
|
}
|
|
}
|
|
}
|
|
|
|
//make initial method calls
|
|
//use case: Loader.load()
|
|
if(this.methods)
|
|
{
|
|
for(var methodName:String in this.methods)
|
|
{
|
|
if(instance[methodName] is Function)
|
|
{
|
|
var args:Array = this.methods[methodName] as Array;
|
|
instance[methodName].apply(instance, args);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
}
|