SO dynamic access to property with custom namespace

by pleclech forked from SO object living (diff: 80)
http://stackoverflow.com/questions/7211620/dynamically-access-properties-in-custom-namespaces
♥0 | Line 49 | Modified 2011-09-06 23:21:29 | 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/7M9O
 */

// forked from pleclech's SO object living
package {
    import flash.system.ApplicationDomain;
    import flash.events.Event;
    import flash.utils.setTimeout;
    import com.bit101.components.TextArea
    
    public class FlashTest extends TextArea {
        public namespace foo;
        foo var bar:String='baz';
        public function FlashTest() {
            width=400
            height=400
            setTimeout(doTest, 500)                        
        }
        // get a public namespace from an URI 
        // URI: package:namespace
        // or
        // URI: package.myClass/namespace
        public function getNamespaceFromURI(uri:String, domain:ApplicationDomain = null):Namespace {
         if(domain == null) domain = ApplicationDomain.currentDomain;

         var tmp:Array = uri.split("/");
         var ns:Namespace = null;
         var pkg:String = tmp[0].replace(":", ".");
         if(tmp.length == 1) {
            // namespace declared in a file
            ns = domain.getDefinition(pkg) as Namespace;
         } else {
            // namespace inside a class
            var cls:Class = domain.getDefinition(pkg) as Class;
            if(cls) {
                ns = cls[tmp[1]] as Namespace;
            }
         }
         return ns;
       }
        public function doTest():void {
            var ns:Namespace=foo;
           trace("foo::bar=>", foo::bar);
           var qn:QName=new QName(ns, 'bar');            
          trace("this[new QName(ns, 'bar')] ==> ", this[qn]);

          var dynamicNS:String='foo';
          var ns2:Namespace = FlashTest[dynamicNS]
          trace("ns2::['bar']=>", ns2::['bar'])

          trace('getNamespaceFromURI("FlashTest/foo") ==> ', getNamespaceFromURI("FlashTest/foo"))

          try{
          qn=new QName(ns, 'unknown');            
          trace("this[new QName(ns, 'unknown')] ==> ", this[qn]);
          } catch (e:*) {
              trace("this[new QName(ns, 'unknown')] ==> ",e);
          }

        }
        public function trace(...args):void {
            text=text+args.join(", ")+"\n"
        }
    }
}

Forked