Merge branch '4000-rerun-pipeline-changed-template'
[arvados.git] / apps / workbench / app / models / pipeline_instance.rb
index ccb88351a761be86abeda65dec7346b4de76c145..936905713e44891f22261bf6e1c0ba19e598ae75 100644 (file)
@@ -1,6 +1,36 @@
 class PipelineInstance < ArvadosBase
   attr_accessor :pipeline_template
 
+  def self.goes_in_projects?
+    true
+  end
+
+  def friendly_link_name lookup=nil
+    pipeline_name = self.name
+    if pipeline_name.nil? or pipeline_name.empty?
+      template = if lookup and lookup[self.pipeline_template_uuid]
+                   lookup[self.pipeline_template_uuid]
+                 else
+                   PipelineTemplate.where(uuid: self.pipeline_template_uuid).first
+                 end
+      if template
+        template.name
+      else
+        self.uuid
+      end
+    else
+      pipeline_name
+    end
+  end
+
+  def content_summary
+    begin
+      PipelineTemplate.find(pipeline_template_uuid).name
+    rescue
+      super
+    end
+  end
+
   def update_job_parameters(new_params)
     self.components[:steps].each_with_index do |step, i|
       step[:params].each do |param|
@@ -16,9 +46,11 @@ class PipelineInstance < ArvadosBase
       end
     end
   end
-  
-  def attribute_editable?(attr)
-    attr.to_sym == :name || (attr.to_sym == :components and self.active == nil)
+
+  def attribute_editable? attr, *args
+    super && (attr.to_sym == :name || attr.to_sym == :description ||
+              (attr.to_sym == :components and
+               (self.state == 'New' || self.state == 'Ready')))
   end
 
   def attributes_for_display
@@ -28,4 +60,19 @@ class PipelineInstance < ArvadosBase
   def self.creatable?
     false
   end
+
+  def component_input_title(component_name, input_name)
+    component = components[component_name]
+    return nil if component.nil?
+    param_info = component[:script_parameters].andand[input_name.to_sym]
+    if param_info.is_a?(Hash) and param_info[:title]
+      param_info[:title]
+    else
+      "\"#{input_name.to_s}\" parameter for #{component[:script]} script in #{component_name} component"
+    end
+  end
+
+  def textile_attributes
+    [ 'description' ]
+  end
 end