 {
 	import flash.utils.getQualifiedClassName;
 	
+	import mx.utils.ObjectUtil;
 	import mx.utils.StringUtil;
 	
 	import weave.api.core.ICallbackCollection;

					nameLookup[columnIds[i]] = true;
			}
			updateKeys(true);
		}
		
		private function updateKeys(forced:Boolean = false):void


		public function CSVDataSource()
		{
			registerLinkableChild(hierarchyRefresh, metadata);
		}

		public const csvData:LinkableVariable = registerLinkableChild(this, new LinkableVariable(Array), handleCSVDataChange);
		public const keyType:LinkableString = newLinkableChild(this, LinkableString, updateKeys);
		public const keyColName:LinkableString = newLinkableChild(this, LinkableString, updateKeys);
		
		public const metadata:LinkableVariable = registerLinkableChild(this, new LinkableVariable(null, typeOfIsObject));
		private function typeOfIsObject(value:Object):Boolean
		{
			return typeof value == 'object';
		}
		
		public const url:LinkableFile = newLinkableChild(this, LinkableFile, parseRawData);
		
