10079: add "parent" to work_unit to aid the child display
[arvados.git] / apps / workbench / app / controllers / work_units_controller.rb
index a7d0feb7d0f3b13b7c1be5ee162f95947a51c150..fe6bff1cee4dfd7fa42a8b487376713808cbbd29 100644 (file)
@@ -128,21 +128,37 @@ class WorkUnitsController < ApplicationController
   def show_child_component
     data = JSON.load(params[:action_data])
 
-    current_obj = data['current_obj']
-    current_obj_type = data['current_obj_type']
+    current_obj = {}
+    current_obj_uuid = data['current_obj_uuid']
     current_obj_name = data['current_obj_name']
-    if current_obj['uuid']
-      resource_class = resource_class_for_uuid current_obj['uuid']
-      obj = object_for_dataclass(resource_class, current_obj['uuid'])
+    current_obj_type = data['current_obj_type']
+    current_obj_parent = data['current_obj_parent']
+    if current_obj_uuid
+      resource_class = resource_class_for_uuid current_obj_uuid
+      obj = object_for_dataclass(resource_class, current_obj_uuid)
       current_obj = obj if obj
     end
 
-    if current_obj_type == JobWorkUnit.to_s
-      wu = JobWorkUnit.new(current_obj, current_obj_name)
-    elsif current_obj_type == PipelineInstanceWorkUnit.to_s
-      wu = PipelineInstanceWorkUnit.new(current_obj, current_obj_name)
-    elsif current_obj_type == ContainerWorkUnit.to_s
-      wu = ContainerWorkUnit.new(current_obj, current_obj_name)
+    if current_obj.is_a?(Hash) and !current_obj.any?
+      if current_obj_parent
+        resource_class = resource_class_for_uuid current_obj_parent
+        parent = object_for_dataclass(resource_class, current_obj_parent)
+        parent_wu = parent.work_unit
+        children = parent_wu.children
+        if current_obj_uuid
+          wu = children.select {|c| c.uuid == current_obj_uuid}.first
+        else current_obj_name
+          wu = children.select {|c| c.label.to_s == current_obj_name}.first
+        end
+      end
+    else
+      if current_obj_type == JobWorkUnit.to_s
+        wu = JobWorkUnit.new(current_obj, current_obj_name, current_obj_parent)
+      elsif current_obj_type == PipelineInstanceWorkUnit.to_s
+        wu = PipelineInstanceWorkUnit.new(current_obj, current_obj_name, current_obj_parent)
+      elsif current_obj_type == ContainerWorkUnit.to_s
+        wu = ContainerWorkUnit.new(current_obj, current_obj_name, current_obj_parent)
+      end
     end
 
     respond_to do |f|