Class: Dor::WorkflowDefinitionDs

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

Class Method Summary collapse

Instance Method Summary collapse

Methods included from SolrDocHelper

#add_solr_value

Class Method Details

.xml_templateObject



31
32
33
# File 'lib/dor/datastreams/workflow_definition_ds.rb', line 31

def self.xml_template
  Nokogiri::XML('<workflow-def/>')
end

Instance Method Details

#add_process(attributes) ⇒ Object



35
36
37
# File 'lib/dor/datastreams/workflow_definition_ds.rb', line 35

def add_process(attributes)
  add_child_node(ng_xml.at_xpath('/workflow-def'), :process, self, attributes)
end

#configurationObject



57
58
59
60
61
62
63
# File 'lib/dor/datastreams/workflow_definition_ds.rb', line 57

def configuration
  result = ActiveSupport::OrderedHash.new
  result['repository'] = repo
  result['name'] = name
  processes.each { |process| result[process.name] = process.to_hash }
  result
end

#configuration=(hash) ⇒ Object



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

def configuration=(hash)
  self.ng_xml = Nokogiri::XML(%(<workflow-def id="#{hash['name']}" repository="#{hash['repository']}"/>))
  i = 0
  hash.each_pair do |k, v|
    add_process(v.merge({:name => k, :sequence => i += 1})) if v.is_a?(Hash)
  end
end

#graph(parent = nil) ⇒ Object



39
40
41
# File 'lib/dor/datastreams/workflow_definition_ds.rb', line 39

def graph(parent = nil)
  Workflow::Graph.from_processes(repo, name, processes, parent)
end

#initial_workflowString

Creates the xml used by Dor::WorkflowService#create_workflow

Returns:

  • (String)

    An object’s initial workflow as defined by the <workflow-def> in content



75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# File 'lib/dor/datastreams/workflow_definition_ds.rb', line 75

def initial_workflow
  doc = Nokogiri::XML('<workflow/>')
  root = doc.root
  root['id'] = name
  processes.each { |proc|
    doc.create_element 'process' do |node|
      node['name'] = proc.name
      if proc.status
        node['status'] = proc.status
        node['attempts'] = '1'
      else
        node['status'] = 'waiting'
      end
      node['lifecycle'] = proc.lifecycle if proc.lifecycle
      root.add_child node
    end
  }
  Nokogiri::XML(doc.to_xml) { |x| x.noblanks }.to_xml { |config| config.no_declaration }
end

#nameObject



49
50
51
# File 'lib/dor/datastreams/workflow_definition_ds.rb', line 49

def name
  ng_xml.at_xpath('/workflow-def/@id').to_s
end

#prefixObject

maintain AF < 8 indexing behavior



109
110
111
# File 'lib/dor/datastreams/workflow_definition_ds.rb', line 109

def prefix
  ''
end

#processesObject



43
44
45
46
47
# File 'lib/dor/datastreams/workflow_definition_ds.rb', line 43

def processes
  ng_xml.xpath('/workflow-def/process').collect do |node|
    Workflow::Process.new(repo, name, node)
  end.sort { |a, b| (a.sequence || 0) <=> (b.sequence || 0) }
end

#repoObject



53
54
55
# File 'lib/dor/datastreams/workflow_definition_ds.rb', line 53

def repo
  ng_xml.at_xpath('/workflow-def/@repository').to_s
end

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



95
96
97
98
99
100
101
102
# File 'lib/dor/datastreams/workflow_definition_ds.rb', line 95

def to_solr(solr_doc = {}, *args)
  solr_doc = super(solr_doc, *args)
  add_solr_value(solr_doc, 'workflow_name', name, :symbol, [:symbol])
  processes.each do |p|
    add_solr_value(solr_doc, 'process', "#{p.name}|#{p.label}", :symbol, [:displayable])
  end
  solr_doc
end

#to_yamlObject



104
105
106
# File 'lib/dor/datastreams/workflow_definition_ds.rb', line 104

def to_yaml
  YAML.dump(configuration)
end