Class: Dor::WorkflowDs

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

Instance Method Summary collapse

Methods included from SolrDocHelper

#add_solr_value

Constructor Details

#initialize(*args) ⇒ WorkflowDs

Returns a new instance of WorkflowDs.



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

def initialize *args
  self.field_mapper = UtcDateFieldMapper.new
  super
end

Instance Method Details

#[](wf) ⇒ Object



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

def [](wf)
  xml=Dor::WorkflowService.get_workflow_xml('dor', self.pid, wf)
  xml=Nokogiri::XML(xml)
  if xml.xpath('workflow').length == 0
    nil
  else
    Workflow::Document.new(xml.to_s)
  end
end

#contentObject



54
55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/dor/datastreams/workflow_ds.rb', line 54

def content
  begin
    @content ||= Dor::WorkflowService.get_workflow_xml 'dor', self.pid, nil
  rescue RestClient::ResourceNotFound
    xml = Nokogiri::XML(%{<?xml version="1.0" encoding="UTF-8" standalone="yes"?>\n<workflows objectId="#{self.pid}"/>})
    self.digital_object.datastreams.keys.each do |dsid|
      if dsid =~ /WF$/
        ds_content = Nokogiri::XML(Dor::WorkflowService.get_workflow_xml 'dor', self.pid, dsid)
        xml.root.add_child(ds_content.root)
      end
    end
    @content ||= xml.to_xml
  end
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



90
91
92
93
94
# File 'lib/dor/datastreams/workflow_ds.rb', line 90

def current_priority
  cp = workflows.detect {|wf| wf.expedited? }
  return 0 if(cp.nil?)
  cp.priority.to_i
end

#ensure_xml_loadedObject



45
46
47
48
# File 'lib/dor/datastreams/workflow_ds.rb', line 45

def ensure_xml_loaded
  ng_xml
  self.xml_loaded = true
end

#get_workflow(wf, repo = 'dor') ⇒ Object



25
26
27
28
29
30
31
32
33
# File 'lib/dor/datastreams/workflow_ds.rb', line 25

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

#graph(dir = nil) ⇒ Object



73
74
75
76
77
78
79
80
81
82
83
84
85
# File 'lib/dor/datastreams/workflow_ds.rb', line 73

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

#ng_xmlObject



50
51
52
# File 'lib/dor/datastreams/workflow_ds.rb', line 50

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

#to_solr(solr_doc = Hash.new, *args) ⇒ Object



96
97
98
99
100
# File 'lib/dor/datastreams/workflow_ds.rb', line 96

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

#workflowsObject



69
70
71
# File 'lib/dor/datastreams/workflow_ds.rb', line 69

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