Class: Dor::WorkflowObject

Inherits:
ActiveFedora::Base
  • Object
show all
Includes:
Governable, Identifiable, SolrDocHelper
Defined in:
lib/dor/models/workflow_object.rb

Constant Summary collapse

@@xml_cache =
{}
@@repo_cache =
{}

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Governable

#add_collection, #can_manage_content?, #can_manage_desc_metadata?, #can_manage_embargo?, #can_manage_item?, #can_manage_rights?, #can_manage_system_metadata?, #can_view_content?, #can_view_metadata?, #default_workflow_lane, #groups_which_manage_content, #groups_which_manage_desc_metadata, #groups_which_manage_embargo, #groups_which_manage_item, #groups_which_manage_rights, #groups_which_manage_system_metadata, #groups_which_view_content, #groups_which_view_metadata, #initiate_apo_workflow, #intersect, #reapplyAdminPolicyObjectDefaults, #remove_collection, #reset_to_apo_default, #rights, #set_read_rights

Methods included from SolrDocHelper

#add_solr_value

Methods included from Identifiable

#add_other_Id, #add_tag, #content_type_tag, #initialize, #method_missing, #normalize_tag, #normalize_tag_arr, #remove_displayTypes, #remove_other_Id, #remove_tag, #set_source_id, #split_tag_to_arr, #tags, #update_other_Id, #update_tag, #validate_and_normalize_tag, #validate_tag_format

Methods included from Upgradable

add_upgrade_callback, included, run_upgrade_callbacks, #upgrade!

Methods included from Eventable

#add_event

Dynamic Method Handling

This class handles dynamic methods through the method_missing method in the class Dor::Identifiable

Class Method Details

.find_and_cache_workflow_xml_and_repo(name) ⇒ Object

Searches DOR for the workflow definition object. It then caches the workflow repository and xml

Parameters:

  • name (String)

    the name of the workflow

Returns:

  • (Object)

    a Dor::xxxx object, e.g. a Dor::Item object



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

def self.find_and_cache_workflow_xml_and_repo(name)
  wobj = find_by_name(name)
  raise "Failed to find workflow via find_by_name('#{name}')" if wobj.nil?
  @@repo_cache[name] = wobj.definition.repo
  @@xml_cache[name]  = wobj.generate_initial_workflow
  wobj
end

.find_by_name(name, opts = {}) ⇒ Object



14
15
16
# File 'lib/dor/models/workflow_object.rb', line 14

def self.find_by_name(name, opts = {})
  Dor.find_all(%{objectType_t:"#{object_type}" workflow_name_s:"#{name}"}, opts).first
end

.initial_repo(name) ⇒ String

Returns the repository attribute from the workflow definition It will cache the result for subsequent requests

Parameters:

  • name (String)

    the name of the workflow

Returns:

  • (String)

    the initial workflow xml



33
34
35
36
37
# File 'lib/dor/models/workflow_object.rb', line 33

def self.initial_repo(name)
  return @@repo_cache[name] if @@repo_cache.include?(name)
  find_and_cache_workflow_xml_and_repo name
  @@repo_cache[name]
end

.initial_workflow(name) ⇒ String

Searches for the workflow definition object in DOR, then returns an object’s initial workflow as defined in the worfklowDefinition datastream It will cache the result for subsequent requests

Parameters:

  • name (String)

    the name of the workflow

Returns:

  • (String)

    the initial workflow xml



23
24
25
26
27
# File 'lib/dor/models/workflow_object.rb', line 23

def self.initial_workflow(name)
  return @@xml_cache[name] if @@xml_cache.include?(name)
  find_and_cache_workflow_xml_and_repo name
  @@xml_cache[name]
end

Instance Method Details

#definitionObject



39
40
41
# File 'lib/dor/models/workflow_object.rb', line 39

def definition
  datastreams['workflowDefinition']
end

#generate_initial_workflowObject Also known as: generate_intial_workflow



56
57
58
# File 'lib/dor/models/workflow_object.rb', line 56

def generate_initial_workflow
  datastreams['workflowDefinition'].initial_workflow
end

#graph(*args) ⇒ Object



43
44
45
# File 'lib/dor/models/workflow_object.rb', line 43

def graph(*args)
  definition.graph *args
end

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



47
48
49
50
51
52
53
54
# File 'lib/dor/models/workflow_object.rb', line 47

def to_solr(solr_doc = {}, *args)
  super solr_doc, *args
  client = Dor::WorkflowService.workflow_resource
  xml = client["workflow_archive?repository=#{definition.repo}&workflow=#{definition.name}&count-only=true"].get
  count = Nokogiri::XML(xml).at_xpath('/objects/@count').value
  add_solr_value(solr_doc, "#{definition.name}_archived", count, :integer, [:displayable])
  solr_doc
end