forked from: SO xml namespace access

by pleclech forked from SO xml namespace access (diff: 147)
♥0 | Line 118 | Modified 2012-08-09 20:37:43 | MIT License
play

ActionScript3 source code

/**
 * Copyright pleclech ( http://wonderfl.net/user/pleclech )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/owdG
 */

package {
    import flash.display.Sprite;
    import flash.utils.ByteArray;
    import flash.utils.getQualifiedSuperclassName;
    import flash.utils.getQualifiedClassName;
    import flash.utils.describeType;
    import flash.utils.Dictionary;
    import flash.events.Event;
    import flash.utils.setTimeout;
    import com.bit101.components.TextArea;
    import flash.utils.getDefinitionByName;
     
    final public class  FlashTest extends Sprite {
        public function FlashTest() {
            if (!stage.getChildByName("DoTest")) {
                var doTest:DoTest=new DoTest();
                stage.addChild(doTest);
                setTimeout(function():void{doTest.run();}, 500);                        
            } 
        }
        
/*
        public function doTest():void {
            trace("hello");
            setTimeout(function():void{
            try {
             var t:*= new FlashTest();
//             trace("t",t)
            } catch (e:*){
                trace("error",e);
            }
            }, 500);

//            var r:IRequest=new Request("", "FlashTest", "a.b.c.ping", [trace, "hello world"]);
//            r.execute();
        }
*/
    }
}

import com.bit101.components.TextArea;
    import flash.utils.describeType;


class DoTest extends TextArea {
    function DoTest(){
        name="DoTest";
        width=400;
        height=400;
    }

    public function trace(...args):void {
        text=text + args.join(", ")+"\n"
    }
 
    public function run():void {
        var a:Object={};
        a.b=[1,2];
        a.b["hello"] = "world";
        trace(a.b.length);
        for  (var i:* in a.b) trace(i);
        trace("running test"); 
        var o:Object=new A().b;
trace(o is Function)        
        o=new B().c;
trace(o is Function)        



//        var cl:Class=getDefinitionByName("::FlashTest") as Class;
//        if (cl)
//            trace(describeType(new cl()));
//        var t:*=new FlashTest();      
    }
}


interface IRequest {

    function get packagePath():String;

    function get className():String;

    function get functions():Vector.<String>;

    function get parameters():Array;

    function execute():void;
}

import flash.utils.getDefinitionByName;

class Request implements IRequest {
    private var _pp:String="";
    private var _cn:String="";
    private var _fns:Vector.<String>=new Vector.<String>();
    private var _pms:Array=[];
    
    function Request(packagePath:String, className:String, functions:String, parameters:Array){
        _pp=packagePath;
        _cn=className;
        _fns=Vector.<String>(functions.split("."));
        _pms=parameters;   
    }
    public function get packagePath():String {
        return _pp;
    }
    public function get className():String {
        return _cn;
    }
    public function get functions():Vector.<String>{
        return _fns;
    }
    public function get parameters():Array{
        return _pms;
    }
    public function execute():void {
        var fnLen:int = _fns.length - 1;
        if (fnLen < 0) return;
        var cl:Class = getDefinitionByName(_pp+"::"+_cn) as Class;
        if (cl) {
            var o:Object=new cl();
            for  (var i:int=0; i < fnLen; i++) {
                var fnName:String=_fns[i];
                if (!o.hasOwnProperty(fnName)) break;
                var fn:Object=o[fnName];
                if (fn.hasOwnProperty("apply")) {
                    o=fn.apply(o);
                } else {
                    o=fn;
                }
            }
            fnName=_fns[fnLen];
            if (!o.hasOwnProperty(fnName)) return;
            fn=o[fnName];
            if (fn.hasOwnProperty("apply")) {
              fn.apply(o, _pms);
            }
        }

    }

}


class C {
    public function ping(traceFn:Function, msg:String):void {
        traceFn(msg);
    }
    
}
class B {
    private var _c:C=new C();
    public function c():C{
        return _c;
    }
}

class A {
    private var _b:B=new B();
    public function get b():B{
        return _b;
    }

}

Forked