+ if job[:docker_image_locator] and !@opts[:no_docker]
+ gr += describe_node(job[:docker_image_locator], {label: (job[:runtime_constraints].andand[:docker_image] || job[:docker_image_locator])})
+ gr += edge(job[:docker_image_locator], uuid, {label: "docker_image"})
+ end
+
+ if @opts[:script_version_nodes]
+ gr += describe_node(job[:script_version], {:label => "git:#{job[:script_version]}"})
+ gr += edge(job[:script_version], uuid, {:label => "script_version"})
+ end
+
+ if job[:output] and !edge_opts[:no_output]
+ gr += describe_node(job[:output])
+ gr += edge(uuid, job[:output], {label: "output" })
+ end
+
+ if job[:log] and !edge_opts[:no_log]
+ gr += describe_node(job[:log])
+ gr += edge(uuid, job[:log], {label: "log"})
+ end
+
+ gr
+ end
+
+ def generate_provenance_edges(uuid)
+ gr = ""
+ m = GenerateGraph::collection_uuid(uuid)
+ uuid = m if m
+
+ if uuid.nil? or uuid.empty? or @visited[uuid]
+ return ""
+ end
+
+ if @pdata[uuid].nil?
+ return ""
+ else
+ @visited[uuid] = true
+ end
+
+ if uuid.start_with? "component_"
+ # Pipeline component inputs
+ job = @pdata[@pdata[uuid][:job].andand[:uuid]]
+