       )))
 
 
+;; TODO: this logic needs to be moved to nimbus for constructing system topology
 (defn outbound-components
   "Returns map of stream id to component id to grouper"
   [topology-context]

(defmulti mk-task-stats class-selector)

(defn- get-readable-name [topology-context]
  (let [component-id (.getThisComponentId topology-context)]
    (if (system-component? component-id)
      ({ACKER-COMPONENT-ID "Acker"} component-id)
      ;; TODO: change this so that can get better name for nested bolts 
      (str (class (get-task-object (.getRawTopology topology-context) component-id)))
      )))

(defn- send-ack [^TopologyContext topology-context ^Tuple input-tuple
                 ^List generated-ids send-fn]

  (.emitDirect collector task stream values)
  )

;; TODO: this should be defined somewhere else and be serializable. it should be added to topology by nimbus
(defn mk-acker-bolt []
  (let [output-collector (atom nil)
        pending (atom nil)]
