10079: add "parent" to work_unit to aid the child display
authorradhika <radhika@curoverse.com>
Sun, 23 Oct 2016 01:47:51 +0000 (21:47 -0400)
committerradhika <radhika@curoverse.com>
Tue, 25 Oct 2016 22:25:41 +0000 (18:25 -0400)
apps/workbench/app/controllers/work_units_controller.rb
apps/workbench/app/models/container.rb
apps/workbench/app/models/container_request.rb
apps/workbench/app/models/container_work_unit.rb
apps/workbench/app/models/job.rb
apps/workbench/app/models/job_task.rb
apps/workbench/app/models/pipeline_instance.rb
apps/workbench/app/models/pipeline_instance_work_unit.rb
apps/workbench/app/models/proxy_work_unit.rb
apps/workbench/app/models/work_unit.rb
apps/workbench/app/views/work_units/_show_child.html.erb

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|
index 0a7c288718f581f89235cb9a9fed9fdcd76d1d8e..e683a6e4f2b28e501ce7adb3574c12db796b73b4 100644 (file)
@@ -4,6 +4,6 @@ class Container < ArvadosBase
   end
 
   def work_unit(label=nil)
-    ContainerWorkUnit.new(self, label)
+    ContainerWorkUnit.new(self, label, self.uuid)
   end
 end
index 0148de51f7459a678d49547fe4f24a10e6bc27e9..aae712b343e1468386ee77ba257d6eee04848063 100644 (file)
@@ -12,6 +12,6 @@ class ContainerRequest < ArvadosBase
   end
 
   def work_unit(label=nil)
-    ContainerWorkUnit.new(self, label)
+    ContainerWorkUnit.new(self, label, self.uuid)
   end
 end
index b6e72dc526538d022166d52ff0a342373bb585cc..88aab306cedc8b9ea5a8a94a27cc394f2022780b 100644 (file)
@@ -1,7 +1,7 @@
 class ContainerWorkUnit < ProxyWorkUnit
   attr_accessor :container
 
-  def initialize proxied, label
+  def initialize proxied, label, parent
     super
     if @proxied.is_a?(ContainerRequest)
       container_uuid = get(:container_uuid)
@@ -12,7 +12,7 @@ class ContainerWorkUnit < ProxyWorkUnit
   end
 
   def children
-    return self.my_children if self.my_children
+    return @my_children if @my_children
 
     container_uuid = nil
     container_uuid = if @proxied.is_a?(Container) then uuid else get(:container_uuid) end
@@ -25,7 +25,7 @@ class ContainerWorkUnit < ProxyWorkUnit
       end
     end
 
-    self.my_children = items
+    @my_children = items
   end
 
   def title
index bf202c4eaaadffbd92f1a44d1160c3bd8c51572e..7bfed6d44b5c089fb9ecc518362e026e787762f4 100644 (file)
@@ -54,6 +54,6 @@ class Job < ArvadosBase
   end
 
   def work_unit(label=nil)
-    JobWorkUnit.new(self, label)
+    JobWorkUnit.new(self, label, self.uuid)
   end
 end
index 9fb04737badb1114547c0a6a581f71e9b2bbd459..654e0a37e0897c6b85d4bd60a46ad0f76c521e0d 100644 (file)
@@ -1,5 +1,5 @@
 class JobTask < ArvadosBase
   def work_unit(label=nil)
-    JobTaskWorkUnit.new(self, label)
+    JobTaskWorkUnit.new(self, label, self.uuid)
   end
 end
index 62bbc5431937e6a4b89826a3f03e2cda5c37ff27..e9fa04ab6d09419f7875354a01c26b33c8c0b679 100644 (file)
@@ -133,7 +133,7 @@ class PipelineInstance < ArvadosBase
   end
 
   def work_unit(label=nil)
-    PipelineInstanceWorkUnit.new(self, label || self.name)
+    PipelineInstanceWorkUnit.new(self, label || self.name, self.uuid)
   end
 
   private
index dd5685ac3d8082d5a5836896afa310b416e728f2..293a77c099d829ae58e58d07784932ba1e9c5fdf 100644 (file)
@@ -18,10 +18,10 @@ class PipelineInstanceWorkUnit < ProxyWorkUnit
           if job[:uuid] and jobs[job[:uuid]]
             items << jobs[job[:uuid]].work_unit(name)
           else
-            items << JobWorkUnit.new(job, name)
+            items << JobWorkUnit.new(job, name, uuid)
           end
         else
-          items << JobWorkUnit.new(c, name)
+          items << JobWorkUnit.new(c, name, uuid)
         end
       else
         @unreadable_children = true
index b5349ec595df9163902333b4a893a0a56a784466..48bc3a04bc95dd41915e317449e7287ed4e42bce 100644 (file)
@@ -6,23 +6,24 @@ class ProxyWorkUnit < WorkUnit
   attr_accessor :my_children
   attr_accessor :unreadable_children
 
-  def initialize proxied, label
+  def initialize proxied, label, parent
     @lbl = label
     @proxied = proxied
+    @parent = parent
   end
 
   def label
     @lbl
   end
 
-  def proxied
-    @proxied
-  end
-
   def uuid
     get(:uuid)
   end
 
+  def parent
+    @parent
+  end
+
   def modified_by_user_uuid
     get(:modified_by_user_uuid)
   end
index 727180ecfa8ab23d02b38a2ffe7f7665606e6c8f..dd4a706f9d6edfdbaf60b7607e62d3f40a672fe2 100644 (file)
@@ -5,14 +5,14 @@ class WorkUnit
     # returns the label that was assigned when creating the work unit
   end
 
-  def proxied
-    # returns the proxied object of this work unit
-  end
-
   def uuid
     # returns the arvados UUID of the underlying object
   end
 
+  def parent
+    # returns the parent uuid of this work unit
+  end
+
   def children
     # returns an array of child work units
   end
index 277aa3785296bca1fff42195f5756201e95a71cb..8bb33b54cb7523ac3ecf5516a55e95358eb3e816 100644 (file)
@@ -51,7 +51,7 @@
   </div>
 
   <% content_url = url_for(controller: :work_units, action: :show_child_component, id: @object.uuid, object_type: @object.class.to_s) %>
-  <div id="collapse<%=i%>" class="work-unit-component-detail panel-collapse collapse <%= if expanded then 'in' end %>" content-url="<%=content_url%>" action-data="<%={current_obj_type: current_obj.class.to_s, current_obj_name: current_obj.label, current_obj: current_obj.proxied}.to_json%>">
+  <div id="collapse<%=i%>" class="work-unit-component-detail panel-collapse collapse <%= if expanded then 'in' end %>" content-url="<%=content_url%>" action-data="<%={current_obj_type: current_obj.class.to_s, current_obj_uuid: current_obj.uuid, current_obj_name: current_obj.label, current_obj_parent: current_obj.parent}.to_json%>">
     <div class="panel-body work-unit-component-detail-body">
     </div>
   </div>