package com.fourD.core { import mx.utils.ObjectUtil; import flash.utils.getDefinitionByName; import flash.utils.getQualifiedClassName; public class TectonUtils { public function TectonUtils() { } public static function clone(object:Object):Object { if (object is Tecton) { var fqn:String = getQualifiedClassName(object); var clazz:Class = getDefinitionByName(fqn) as Class; var cloned:Object = new clazz; cloned["tropon"] = object["tropon"]; cloned["actions"] = object["actions"]; cloned["actionParams"] = object["actionParams"]; cloned["kanon"] = object["kanon"]; cloned["tropons"] = object["tropons"]; cloned["name"] = object["name"]; cloned["actionName"] = object["actionName"]; cloned["conditions"] = object["conditions"]; cloned["receptors"] = object["receptors"]; cloned["initialize"] = object["initialize"]; cloned["start"] = object["start"]; cloned["complete"] = object["complete"]; cloned["isInitialized"] = object["isInitialized"]; cloned["isRunning"] = object["isRunning"]; cloned["isComplete"] = object["isComplete"]; cloned["isActive"] = object["isActive"]; /* for each (var node:XML in describeType(object)..accessor) { if (!isInvalidPropertyName(node.@name) && !RxUtils.isIgnored(node)) { try { var name:String = node.@name; cloned[name] = object[name]; } catch (e:Error) { // we can fail cloning if the property is read-only, etc. } } } */ return cloned; } else { return ObjectUtil.copy(object); } } } }