Class: Dor::WorkflowDs

Inherits:
ActiveFedora::OmDatastream
  • Object
show all
Defined in:
lib/dor/datastreams/workflow_ds.rb

Overview

TODO: class docs

Instance Method Summary collapse

Instance Method Details

#content(refresh = false) ⇒ Object

service. This flag will invalidate the cached content and refetch it from the workflow service directly

Parameters:

  • refresh (Boolean) (defaults to: false)

    The WorkflowDS caches the content retrieved from the workflow



35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/dor/datastreams/workflow_ds.rb', line 35

def content(refresh = false)
  @content = nil if refresh
  @content ||= Dor::Config.workflow.client.get_workflow_xml 'dor', pid, nil
rescue Dor::WorkflowException
  xml = Nokogiri::XML(%(<?xml version="1.0" encoding="UTF-8" standalone="yes"?>\n<workflows objectId="#{pid}"/>))
  digital_object.datastreams.keys.each do |dsid|
    next unless dsid =~ /WF$/
    ds_content = Nokogiri::XML(Dor::Config.workflow.client.get_workflow_xml('dor', pid, dsid))
    xml.root.add_child(ds_content.root)
  end
  @content ||= xml.to_xml
end

#current_priorityInteger

Finds the first workflow that is expedited, then returns the value of its priority

Returns:

  • (Integer)

    value of the priority. Defaults to 0 if none of the workflows are expedited



66
67
68
69
70
# File 'lib/dor/datastreams/workflow_ds.rb', line 66

def current_priority
  cp = workflows.detect(&:expedited?)
  return 0 if cp.nil?
  cp.priority.to_i
end

#get_workflow(wf, repo = 'dor') ⇒ Object Also known as: []



19
20
21
22
23
24
# File 'lib/dor/datastreams/workflow_ds.rb', line 19

def get_workflow(wf, repo = 'dor')
  xml = Dor::Config.workflow.client.get_workflow_xml(repo, pid, wf)
  xml = Nokogiri::XML(xml)
  return nil if xml.xpath('workflow').length == 0
  Workflow::Document.new(xml.to_s)
end

#graph(dir = nil) ⇒ Object



52
53
54
55
56
57
58
59
60
61
# File 'lib/dor/datastreams/workflow_ds.rb', line 52

def graph(dir = nil)
  result = GraphViz.digraph(pid)
  sg = result.add_graph('rank') { |g| g[:rank => 'same'] }
  workflows.reject(&:nil?).each do |wf|
    g = wf.graph(result)
    sg.add_node(g.root.id) unless g.nil?
  end
  result['rankdir'] = dir || 'TB'
  result
end

#ng_xmlObject



28
29
30
# File 'lib/dor/datastreams/workflow_ds.rb', line 28

def ng_xml
  @ng_xml ||= Nokogiri::XML::Document.parse(content)
end

#prefixObject

maintain AF < 8 indexing behavior



79
80
81
# File 'lib/dor/datastreams/workflow_ds.rb', line 79

def prefix
  ''
end

#to_solr(solr_doc = {}, *args) ⇒ Object



72
73
74
75
76
# File 'lib/dor/datastreams/workflow_ds.rb', line 72

def to_solr(solr_doc = {}, *args)
  # super solr_doc, *args
  workflows.each { |wf| solr_doc = wf.to_solr(solr_doc, *args) }
  solr_doc
end

#workflowsObject



48
49
50
# File 'lib/dor/datastreams/workflow_ds.rb', line 48

def workflows
  @workflows ||= workflow.nodeset.collect { |wf_node| Workflow::Document.new wf_node.to_xml }
end