 	import weave.api.newLinkableChild;
 	import weave.api.registerLinkableChild;
 	import weave.api.reportError;
+	import weave.core.LinkableDynamicObject;
 	import weave.core.LinkableHashMap;
 	import weave.core.LinkablePromise;
 	import weave.core.LinkableString;
 	import weave.data.AttributeColumns.ProxyColumn;
 	import weave.data.AttributeColumns.ReferencedColumn;
+	import weave.data.KeySets.KeyFilter;
 	import weave.data.hierarchy.ColumnTreeNode;
 	import weave.services.AMF3Servlet;
 	import weave.services.addAsyncResponder;
 	import weave.utils.ColumnUtils;
-	import weave.utils.VectorUtils;
+	import weave.utils.VectorUtils;
 	
 	public class RDataSource extends AbstractDataSource implements IDataSource_Service
 	{

		public const url:LinkableString = registerLinkableChild(this, new LinkableString('/WeaveAnalystServices/ComputationalServlet'), handleURLChange);
		public const scriptName:LinkableString = newLinkableChild(this, LinkableString);
		public const inputs:LinkableHashMap = newLinkableChild(this, LinkableHashMap);
		
		private const promise:LinkablePromise = registerLinkableChild(this, new LinkablePromise(runScript, describePromise));
		private function describePromise():String { return lang("Running script {0}", scriptName.value); }

						var csvRoot:IWeaveTreeNode = outputCSV.getHierarchyRoot();
						return csvRoot.getChildren().map(function(csvNode:IColumnReference, ..._):IWeaveTreeNode {
							var meta:Object = csvNode.getColumnMetadata();
							meta[SCRIPT_OUTPUT_NAME] = meta[CSVDataSource.METADATA_COLUMN_NAME] || meta[CSVDataSource.METADATA_COLUMN_INDEX];
							return generateHierarchyNode(meta);
						});
					}
