lyber-core 0.9.6.2.3 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.rdoc +18 -0
- data/lib/dlss_service.rb +0 -1
- data/lib/dor_service.rb +125 -72
- data/lib/lyber_core.rb +6 -3
- data/lib/lyber_core/config.rb +13 -0
- data/lib/lyber_core/connection.rb +34 -1
- data/lib/lyber_core/destroyer.rb +0 -1
- data/lib/lyber_core/exceptions/chained_error.rb +21 -0
- data/lib/lyber_core/exceptions/fatal_error.rb +10 -0
- data/lib/lyber_core/exceptions/item_error.rb +19 -0
- data/lib/lyber_core/exceptions/service_error.rb +10 -0
- data/lib/lyber_core/log.rb +17 -4
- data/lib/lyber_core/robots/robot.rb +185 -66
- data/lib/lyber_core/robots/service_controller.rb +174 -0
- data/lib/lyber_core/robots/work_item.rb +24 -15
- data/lib/lyber_core/robots/work_queue.rb +27 -4
- data/lib/lyber_core/robots/workspace.rb +2 -2
- data/lib/lyber_core/utils/checksum_validate.rb +1 -1
- data/lib/lyber_core/utils/file_utilities.rb +10 -10
- data/lib/xml_models/identity_metadata/dublin_core.rb +116 -0
- data/lib/xml_models/identity_metadata/identity_metadata.rb +264 -0
- metadata +338 -249
- checksums.yaml +0 -15
- data/lib/dor/base.rb +0 -18
- data/lib/dor/suri_service.rb +0 -28
- data/lib/dor/workflow_service.rb +0 -112
- data/lib/lyber_core/rake/dlss_release.rb +0 -126
- data/lib/roxml_models/identity_metadata/dublin_core.rb +0 -46
- data/lib/roxml_models/identity_metadata/identity_metadata.rb +0 -118
checksums.yaml
DELETED
@@ -1,15 +0,0 @@
|
|
1
|
-
---
|
2
|
-
!binary "U0hBMQ==":
|
3
|
-
metadata.gz: !binary |-
|
4
|
-
MTk4OWM3ZjU4MzBjMWM4MWNkNjE5YjEzYjhiNmQ3NGZiNWU5MDkxNw==
|
5
|
-
data.tar.gz: !binary |-
|
6
|
-
MzdiOTUzNGVkYzhmZTBiMzE1MzdiZTFiZmU5ZjYyNzQ2NWY2OTBkMg==
|
7
|
-
SHA512:
|
8
|
-
metadata.gz: !binary |-
|
9
|
-
ZTQwMjNkYTBmN2RjYmQ1ODg2ODNhZDRlNzRmMGU0N2E4ZTZkZDYwY2E2NWQw
|
10
|
-
ZDY0YmNlNGU4MWM2MTdjMWY2ODZhNGE4ODc2ZDMxYmY5NjFkMDI3NGE4ZDY2
|
11
|
-
OTJhMDkxODM0Mzc2ZTc2Y2U1NGM0MDEzMmE4MzIxMjk2NWFhMWU=
|
12
|
-
data.tar.gz: !binary |-
|
13
|
-
N2NjOGRkZjM5ZDE3OTgzMDYwMTgwMjBkZjdiYjZjMTRhZDZhOTgwNmM4MjEx
|
14
|
-
ZDI2NmQ3MzMxOTUwMTdjZTNiNjk4MTdiNTkzNTBhMjNlZmM2NDFjY2VhMTY5
|
15
|
-
ZDZkM2MyZjExNTNjMjRkY2Y2OTk3MDUzZWQxY2Q5ZTUwNmE1YmQ=
|
data/lib/dor/base.rb
DELETED
@@ -1,18 +0,0 @@
|
|
1
|
-
|
2
|
-
module Dor
|
3
|
-
|
4
|
-
class Base < ActiveFedora::Base
|
5
|
-
def initialize(attrs = {})
|
6
|
-
unless attrs[:pid]
|
7
|
-
attrs = attrs.merge!({:pid=>Dor::SuriService.mint_id})
|
8
|
-
@new_object=true
|
9
|
-
else
|
10
|
-
@new_object = attrs[:new_object] == false ? false : true
|
11
|
-
end
|
12
|
-
@inner_object = Fedora::FedoraObject.new(attrs)
|
13
|
-
@datastreams = {}
|
14
|
-
configure_defined_datastreams
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
end
|
data/lib/dor/suri_service.rb
DELETED
@@ -1,28 +0,0 @@
|
|
1
|
-
require 'net/https'
|
2
|
-
require 'active_fedora'
|
3
|
-
|
4
|
-
module Dor
|
5
|
-
class SuriService
|
6
|
-
|
7
|
-
# If Dor::MINT_SURI_IDS is set to ture, then this method
|
8
|
-
# Returns ID_NAMESPACE:id_from_suri
|
9
|
-
# Throws an exception if there were any problems
|
10
|
-
def self.mint_id
|
11
|
-
unless(Dor::MINT_SURI_IDS)
|
12
|
-
return Fedora::Repository.instance.nextid
|
13
|
-
end
|
14
|
-
|
15
|
-
#Post with no body
|
16
|
-
id = LyberCore::Connection.post("#{SURI_URL}/suri2/namespaces/#{ID_NAMESPACE}/identifiers", nil,
|
17
|
-
:auth_user => Dor::SURI_USER, :auth_password => Dor::SURI_PASSWORD)
|
18
|
-
|
19
|
-
return "#{Dor::ID_NAMESPACE}:#{id.strip}"
|
20
|
-
|
21
|
-
rescue Exception => e
|
22
|
-
Rails.logger.error("Unable to mint id from suri: #{e.to_s}")
|
23
|
-
raise e
|
24
|
-
end
|
25
|
-
|
26
|
-
|
27
|
-
end
|
28
|
-
end
|
data/lib/dor/workflow_service.rb
DELETED
@@ -1,112 +0,0 @@
|
|
1
|
-
|
2
|
-
module Dor
|
3
|
-
|
4
|
-
# Methods to create and update workflow
|
5
|
-
#
|
6
|
-
# ==== Required Constants
|
7
|
-
# - Dor::CREATE_WORKFLOW : true or false. Can be used to turn of workflow in a particular environment, like development
|
8
|
-
# - Dor::WF_URI : The URI to the workflow service. An example URI is 'http://lyberservices-dev.stanford.edu/workflow'
|
9
|
-
module WorkflowService
|
10
|
-
|
11
|
-
# Creates a workflow for a given object in the repository. If this particular workflow for this objects exists,
|
12
|
-
# it will replace the old workflow with wf_xml passed to this method.
|
13
|
-
# Returns true on success. Caller must handle any exceptions
|
14
|
-
#
|
15
|
-
# == Parameters
|
16
|
-
# - <b>repo</b> - The repository the object resides in. The service recoginzes "dor" and "sdr" at the moment
|
17
|
-
# - <b>druid</b> - The id of the object
|
18
|
-
# - <b>workflow_name</b> - The name of the workflow you want to create
|
19
|
-
# - <b>wf_xml</b> - The xml that represents the workflow
|
20
|
-
#
|
21
|
-
def WorkflowService.create_workflow(repo, druid, workflow_name, wf_xml)
|
22
|
-
return true unless(Dor::CREATE_WORKFLOW)
|
23
|
-
|
24
|
-
full_uri = ''
|
25
|
-
full_uri << Dor::WF_URI << '/' << repo << '/objects/' << druid << '/workflows/' << workflow_name
|
26
|
-
|
27
|
-
# On success, an empty body is sent
|
28
|
-
LyberCore::Connection.put(full_uri, wf_xml){|response| true}
|
29
|
-
end
|
30
|
-
|
31
|
-
# Updates the status of one step in a workflow.
|
32
|
-
# Returns true on success. Caller must handle any exceptions
|
33
|
-
#
|
34
|
-
# == Required Parameters
|
35
|
-
# - <b>repo</b> - The repository the object resides in. The service recoginzes "dor" and "sdr" at the moment
|
36
|
-
# - <b>druid</b> - The id of the object
|
37
|
-
# - <b>workflow_name</b> - The name of the workflow
|
38
|
-
# - <b>status</b> - The status that you want to set. Typical statuses are 'waiting', 'completed', 'error', but could be any string
|
39
|
-
#
|
40
|
-
# == Optional Parameters
|
41
|
-
# - <b>elapsed</b> - The number of seconds it took to complete this step. Can have a decimal. Is set to 0 if not passed in.
|
42
|
-
# - <b>lifecycle</b> - Bookeeping label for this particular workflow step. Examples are: 'registered', 'shelved'
|
43
|
-
#
|
44
|
-
# == Http Call
|
45
|
-
# The method does an HTTP PUT to the URL defined in Dor::WF_URI. As an example:
|
46
|
-
# PUT "/dor/objects/pid:123/workflows/GoogleScannedWF/convert"
|
47
|
-
# <process name=\"convert\" status=\"completed\" />"
|
48
|
-
def WorkflowService.update_workflow_status(repo, druid, workflow, process, status, elapsed = 0, lifecycle = nil, note = nil)
|
49
|
-
return true unless(Dor::CREATE_WORKFLOW)
|
50
|
-
|
51
|
-
uri = ''
|
52
|
-
uri << Dor::WF_URI << '/' << repo << '/objects/' << druid << '/workflows/' << workflow << '/' << process
|
53
|
-
process_xml = '<process name="'+ process + '" status="' + status + '" '
|
54
|
-
process_xml << 'elapsed="' + elapsed.to_s + '" '
|
55
|
-
process_xml << 'lifecycle="' + lifecycle + '" ' if(lifecycle)
|
56
|
-
process_xml << 'note="' + note + '" ' if(note)
|
57
|
-
process_xml << '/>'
|
58
|
-
|
59
|
-
# On success, an empty body is sent
|
60
|
-
LyberCore::Connection.put(uri, process_xml) {|response| true}
|
61
|
-
end
|
62
|
-
|
63
|
-
#
|
64
|
-
# Retrieves the process status of the given workflow for the given object identifier
|
65
|
-
#
|
66
|
-
def WorkflowService.get_workflow_status(repo, druid, workflow, process)
|
67
|
-
uri = ''
|
68
|
-
uri << Dor::WF_URI << '/' << repo << '/objects/' << druid << '/workflows/' << workflow
|
69
|
-
workflow_md = LyberCore::Connection.get(uri)
|
70
|
-
|
71
|
-
doc = Nokogiri::XML(workflow_md)
|
72
|
-
raise Exception.new("Unable to parse response:\n#{workflow_md}") if(doc.root.nil?)
|
73
|
-
|
74
|
-
status = doc.root.at_xpath("//process[@name='#{process}']/@status").content
|
75
|
-
return status
|
76
|
-
end
|
77
|
-
|
78
|
-
def WorkflowService.get_workflow_xml(repo, druid, workflow)
|
79
|
-
uri = ''
|
80
|
-
uri << Dor::WF_URI << '/' << repo << '/objects/' << druid << '/workflows/' << workflow
|
81
|
-
workflow_md = LyberCore::Connection.get(uri)
|
82
|
-
end
|
83
|
-
|
84
|
-
# Updates the status of one step in a workflow to error.
|
85
|
-
# Returns true on success. Caller must handle any exceptions
|
86
|
-
#
|
87
|
-
# == Required Parameters
|
88
|
-
# - <b>repo</b> - The repository the object resides in. The service recoginzes "dor" and "sdr" at the moment
|
89
|
-
# - <b>druid</b> - The id of the object
|
90
|
-
# - <b>workflow_name</b> - The name of the workflow
|
91
|
-
# - <b>error_msg</b> - The error message. Ideally, this is a brief message describing the error
|
92
|
-
#
|
93
|
-
# == Optional Parameters
|
94
|
-
# - <b>error_txt</b> - A slot to hold more information about the error, like a full stacktrace
|
95
|
-
#
|
96
|
-
# == Http Call
|
97
|
-
# The method does an HTTP PUT to the URL defined in Dor::WF_URI. As an example:
|
98
|
-
# PUT "/dor/objects/pid:123/workflows/GoogleScannedWF/convert"
|
99
|
-
# <process name=\"convert\" status=\"error\" />"
|
100
|
-
def WorkflowService.update_workflow_error_status(repo, druid, workflow, process, error_msg, error_txt = nil)
|
101
|
-
uri = ''
|
102
|
-
uri << Dor::WF_URI << '/' << repo << '/objects/' << druid << '/workflows/' << workflow << '/' << process
|
103
|
-
process_xml = '<process name="'+ process + '" status="error" errorMessage="' + error_msg + '" '
|
104
|
-
process_xml << 'errorText="' + error_txt + '" ' if(error_txt)
|
105
|
-
process_xml << '/>'
|
106
|
-
|
107
|
-
# On success, an empty body is sent
|
108
|
-
LyberCore::Connection.put(uri, process_xml) {|response| true}
|
109
|
-
end
|
110
|
-
|
111
|
-
end
|
112
|
-
end
|
@@ -1,126 +0,0 @@
|
|
1
|
-
require 'rake/tasklib'
|
2
|
-
require 'pony'
|
3
|
-
|
4
|
-
module LyberCore
|
5
|
-
|
6
|
-
# A rake task that will tag, build and publish your gem to the DLSS gemserver
|
7
|
-
#
|
8
|
-
# == Usage
|
9
|
-
# Include the following two lines in your <tt>Rakefile</tt>:
|
10
|
-
# require 'lyber_core/rake/dlss_release'
|
11
|
-
# LyberCore::DlssRelease.new
|
12
|
-
#
|
13
|
-
# To build and release the gem, run the following AFTER pushing your code to the git repository on AFS:
|
14
|
-
# rake dlss_release
|
15
|
-
#
|
16
|
-
# == Requirements
|
17
|
-
# - You need <b>ONE</b> <tt>your-gemname.gemspec</tt> file in the root of your project. See the example in <tt>lyber-core.gemspec</tt> or look at http://yehudakatz.com/2010/04/02/using-gemspecs-as-intended/
|
18
|
-
# - Inside the <tt>Gem::Specification</tt> block of the <tt>your-gemname.gemspec</tt> file, you must set the version number. For example
|
19
|
-
# Gem::Specification.new do |s|
|
20
|
-
# s.name = "your-gemname"
|
21
|
-
# ...
|
22
|
-
# s.version = "0.9.6"
|
23
|
-
# ...
|
24
|
-
# end
|
25
|
-
# - You need to have access to the account on the DLSS gemserver, usually by adding your sunetid to the .k5login. You also need git installed.
|
26
|
-
class DlssRelease < Rake::TaskLib
|
27
|
-
# Name of the rake task. Defaults to :dlss_release
|
28
|
-
attr_accessor :name
|
29
|
-
|
30
|
-
# Name of the gem
|
31
|
-
attr_accessor :gemname
|
32
|
-
|
33
|
-
# Version of the gem being released
|
34
|
-
attr_accessor :version
|
35
|
-
|
36
|
-
def initialize(name=:dlss_release)
|
37
|
-
@name = name
|
38
|
-
@gemname = determine_gemname
|
39
|
-
yield self if block_given?
|
40
|
-
raise "Gemname must be set" if @gemname.nil?
|
41
|
-
define
|
42
|
-
end
|
43
|
-
|
44
|
-
# Tries to parse the gemname from the prefix of the <tt>your-gemname.gemspec</tt> file.
|
45
|
-
def determine_gemname
|
46
|
-
files = Dir.glob("*.gemspec")
|
47
|
-
raise "Unable to find project gemspec file.\nEither it doesn't exist or there are too many files ending in .gemspec" if(files.size != 1)
|
48
|
-
|
49
|
-
files.first =~ /(.*)\.gemspec/
|
50
|
-
$1
|
51
|
-
end
|
52
|
-
|
53
|
-
def send_release_announcement
|
54
|
-
Pony.mail(:to => 'dlss-developers@lists.stanford.edu',
|
55
|
-
:from => 'dlss-developers@lists.stanford.edu',
|
56
|
-
:subject => "Release #{@version} of the #{@gemname} gem",
|
57
|
-
:body => "The #{@gemname}-#{@version}.gem has been released to the DLSS gemserver",
|
58
|
-
:via => :smtp,
|
59
|
-
:via_options => {
|
60
|
-
:address => 'smtp.stanford.edu',
|
61
|
-
:port => '25',
|
62
|
-
:enable_starttls_auto => true,
|
63
|
-
:authentication => :plain, # :plain, :login, :cram_md5, no auth by default
|
64
|
-
:domain => "localhost.localdomain" # the HELO domain provided by the client to the server
|
65
|
-
}
|
66
|
-
)
|
67
|
-
end
|
68
|
-
|
69
|
-
def define
|
70
|
-
desc "Tag, build, and release DLSS specified gem"
|
71
|
-
task @name do
|
72
|
-
IO.foreach(File.join(Rake.original_dir, "#{@gemname}.gemspec")) do |line|
|
73
|
-
if(line =~ /\.version.*=.*"(.*)"/)
|
74
|
-
@version = $1
|
75
|
-
break
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
|
-
if(@version.nil?)
|
80
|
-
raise "Unable to find version number in #{@gemname}.gemspec"
|
81
|
-
end
|
82
|
-
created_gem = "#{@gemname}-#{@version}.gem"
|
83
|
-
|
84
|
-
puts "Make sure:"
|
85
|
-
puts " 1) Version #{@version} of #{@gemname} has not been tagged and released previously"
|
86
|
-
puts " 2) All of the tests pass"
|
87
|
-
puts " 3) You've pushed the code to the git repository on AFS (usually 'git push origin master')"
|
88
|
-
puts "Type 'yes' to continue if all of these statements are true"
|
89
|
-
|
90
|
-
resp = STDIN.gets.chomp
|
91
|
-
unless(resp =~ /yes/ )
|
92
|
-
raise "Please complete the prerequisites"
|
93
|
-
end
|
94
|
-
|
95
|
-
puts "Releasing version #{@version} of the #{@gemname} gem"
|
96
|
-
|
97
|
-
begin
|
98
|
-
tags = `git tag`.split("\n")
|
99
|
-
raise "tag v#{@version} already exists. Change the version number in the #{@gemname}.gemspec file" if tags.include?("v#{@version}")
|
100
|
-
|
101
|
-
puts "...Tagging release"
|
102
|
-
sh "git tag -a v#{@version} -m 'Gem version #{@version}'"
|
103
|
-
sh "git push origin --tags"
|
104
|
-
|
105
|
-
puts "...Building gem"
|
106
|
-
sh "gem build #{@gemname}.gemspec"
|
107
|
-
|
108
|
-
puts "...Publishing gem to sulair-rails-dev DLSS gemserver"
|
109
|
-
sh "scp #{created_gem} webteam@sulair-rails-dev.stanford.edu:/var/www/html/gems"
|
110
|
-
sh "ssh webteam@sulair-rails-dev.stanford.edu gem generate_index -d /var/www/html"
|
111
|
-
|
112
|
-
puts "Done!!!!! A local copy of the gem is in the pkg directory"
|
113
|
-
FileUtils.mkdir("pkg") unless File.exists?("pkg")
|
114
|
-
FileUtils.mv("#{created_gem}", "pkg")
|
115
|
-
rescue Exception => e
|
116
|
-
FileUtils.rm("#{created_gem}") if(File.exists?("#{created_gem}"))
|
117
|
-
raise e
|
118
|
-
end
|
119
|
-
|
120
|
-
puts "Sending release announcement to DLSS developers list"
|
121
|
-
send_release_announcement
|
122
|
-
|
123
|
-
end
|
124
|
-
end
|
125
|
-
end
|
126
|
-
end
|
@@ -1,46 +0,0 @@
|
|
1
|
-
require 'rubygems'
|
2
|
-
require 'roxml'
|
3
|
-
|
4
|
-
#<oai_dc:dc xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:oai_dc="http://www.openarchives.org/OAI/2.0/oai_dc/"
|
5
|
-
#xmlns:srw_dc="info:srw/schema/1/dc-schema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
6
|
-
#xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/oai_dc/ http://cosimo.stanford.edu/standards/oai_dc/v2/oai_dc.xsd">
|
7
|
-
# <dc:title>Life of Abraham Lincoln, sixteenth president of the United States: Containing his early
|
8
|
-
#history and political career; together with the speeches, messages, proclamations and other official
|
9
|
-
#documents illus. of his eventful administration</dc:title>
|
10
|
-
# <dc:creator>Crosby, Frank.</dc:creator>
|
11
|
-
# <dc:format>text</dc:format>
|
12
|
-
# <dc:language>eng</dc:language>
|
13
|
-
# <dc:subject>E457 .C94</dc:subject>
|
14
|
-
# <dc:identifier>lccn:11030686</dc:identifier>
|
15
|
-
# <dc:identifier>callseq:1</dc:identifier>
|
16
|
-
# <dc:identifier>shelfseq:973.7111 .L731CR</dc:identifier>
|
17
|
-
# <dc:identifier>catkey:1206382</dc:identifier>
|
18
|
-
# <dc:identifier>barcode:36105005459602</dc:identifier>
|
19
|
-
# <dc:identifier>uuid:ddcf5f1a-0331-4345-beca-e66f7db276eb</dc:identifier>
|
20
|
-
# <dc:identifier>google:STANFORD_36105005459602</dc:identifier>
|
21
|
-
# <dc:identifier>druid:ng786kn0371</dc:identifier>
|
22
|
-
#</oai_dc:dc>
|
23
|
-
|
24
|
-
class DublinCore
|
25
|
-
include ROXML
|
26
|
-
xml_namespaces \
|
27
|
-
:oai_dc => "http://www.openarchives.org/OAI/2.0/oai_dc/",
|
28
|
-
:dc => "http://purl.org/dc/elements/1.1/"
|
29
|
-
|
30
|
-
xml_name :root => 'oai_dc:dc'
|
31
|
-
xml_reader :title, :as => [], :from => 'dc:title'
|
32
|
-
xml_reader :creator, :as => [], :from => 'dc:creator'
|
33
|
-
xml_reader :subject, :as => [], :from => 'dc:subject'
|
34
|
-
xml_reader :description, :as => [], :from => 'dc:description'
|
35
|
-
xml_reader :publisher, :as => [], :from => 'dc:publisher'
|
36
|
-
xml_reader :contributor, :as => [], :from => 'dc:contributor'
|
37
|
-
xml_reader :date, :as => [], :from => 'dc:date'
|
38
|
-
xml_reader :type, :as => [], :from => 'dc:type'
|
39
|
-
xml_reader :format, :as => [], :from => 'dc:format'
|
40
|
-
xml_reader :identifier, :as => [], :from => 'dc:identifier'
|
41
|
-
xml_reader :source, :as => [], :from => 'dc:source'
|
42
|
-
xml_reader :language, :as => [], :from => 'dc:language'
|
43
|
-
xml_reader :relation, :as => [], :from => 'dc:relation'
|
44
|
-
xml_reader :coverage, :as => [], :from => 'dc:coverage'
|
45
|
-
xml_reader :rights, :as => [], :from => 'dc:rights'
|
46
|
-
end
|
@@ -1,118 +0,0 @@
|
|
1
|
-
require 'rubygems'
|
2
|
-
require 'roxml'
|
3
|
-
|
4
|
-
#<identityMetadata>
|
5
|
-
# <objectId>druid:rt923jk342</objectId>
|
6
|
-
# <objectType>item</objectType>
|
7
|
-
# <objectLabel>google download barcode 36105049267078</objectLabel>
|
8
|
-
# <objectCreator>DOR</objectCreator>
|
9
|
-
# <citationTitle>Squirrels of North America</citationTitle>
|
10
|
-
# <citationCreator>Eder, Tamara, 1974-</citationCreator>
|
11
|
-
# <sourceId source="google">STANFORD_342837261527</sourceId>
|
12
|
-
# <otherId name="barcode">342837261527</otherId>
|
13
|
-
# <otherId name="catkey">129483625</otherId>
|
14
|
-
# <otherId name="uuid">7f3da130-7b02-11de-8a39-0800200c9a66</otherId>
|
15
|
-
# <agreementId>druid:yh72ms9133</agreementId>
|
16
|
-
# <tag>Google Books : Phase 1</tag>
|
17
|
-
# <tag>Google Books : Scan source STANFORD</tag>
|
18
|
-
#</identityMetadata>
|
19
|
-
|
20
|
-
class SourceId
|
21
|
-
include ROXML
|
22
|
-
|
23
|
-
xml_name :sourceId
|
24
|
-
xml_accessor :source, :from => '@source'
|
25
|
-
xml_accessor :value, :from => :content
|
26
|
-
end
|
27
|
-
|
28
|
-
class OtherId
|
29
|
-
include ROXML
|
30
|
-
|
31
|
-
xml_name :otherId
|
32
|
-
xml_accessor :name, :from => '@name'
|
33
|
-
xml_accessor :value, :from => :content
|
34
|
-
end
|
35
|
-
|
36
|
-
class Tag
|
37
|
-
include ROXML
|
38
|
-
xml_name :tag
|
39
|
-
xml_accessor :value, :from => :content
|
40
|
-
end
|
41
|
-
|
42
|
-
class IdentityMetadata
|
43
|
-
include ROXML
|
44
|
-
|
45
|
-
xml_name :identityMetadata
|
46
|
-
xml_accessor :objectId
|
47
|
-
xml_accessor :objectType
|
48
|
-
xml_accessor :objectAdminClass
|
49
|
-
xml_accessor :objectLabel
|
50
|
-
xml_accessor :objectCreator
|
51
|
-
xml_accessor :citationTitle
|
52
|
-
xml_accessor :citationCreator
|
53
|
-
xml_accessor :sourceId, :as => SourceId
|
54
|
-
xml_accessor :otherIds, :as => [OtherId]
|
55
|
-
xml_accessor :agreementId
|
56
|
-
xml_accessor :tags, :as => [Tag]
|
57
|
-
|
58
|
-
# Add a new tag to the IdentityMetadata instance
|
59
|
-
def add_tag(new_tag_value)
|
60
|
-
# Make sure tag is not already present
|
61
|
-
for tag in @tags do
|
62
|
-
if (tag.value == new_tag_value )
|
63
|
-
return
|
64
|
-
end
|
65
|
-
end
|
66
|
-
tag = Tag.new
|
67
|
-
tag.value = new_tag_value
|
68
|
-
@tags << tag
|
69
|
-
end
|
70
|
-
|
71
|
-
# Return the OtherId object for the specified identier name
|
72
|
-
def get_other_id(key)
|
73
|
-
if (@otherIds != nil)
|
74
|
-
for other_id in @otherIds do
|
75
|
-
return other_id if (other_id.name == key)
|
76
|
-
end
|
77
|
-
end
|
78
|
-
return nil
|
79
|
-
end
|
80
|
-
|
81
|
-
# Return the identifier value for the specified identier name
|
82
|
-
def get_identifier_value(key)
|
83
|
-
other_id = self.get_other_id(key)
|
84
|
-
if (other_id != nil)
|
85
|
-
return other_id.value
|
86
|
-
end
|
87
|
-
raise "No #{key} indentifier found for druid #{@objectId}"
|
88
|
-
end
|
89
|
-
|
90
|
-
# Add a new name,value pair to the set of identifiers
|
91
|
-
def add_identifier(key, value)
|
92
|
-
other_id = self.get_other_id(key)
|
93
|
-
if (other_id != nil)
|
94
|
-
other_id.value = value
|
95
|
-
else
|
96
|
-
other_id = OtherId.new
|
97
|
-
other_id.name = key
|
98
|
-
other_id.value = value
|
99
|
-
if (@otherIds == nil)
|
100
|
-
@otherIds = [other_id]
|
101
|
-
else
|
102
|
-
@otherIds << other_id
|
103
|
-
end
|
104
|
-
end
|
105
|
-
end
|
106
|
-
|
107
|
-
# Return an array of strings where each entry consists of name:value
|
108
|
-
def get_id_pairs
|
109
|
-
pairs=Array.new
|
110
|
-
if (@otherIds != nil)
|
111
|
-
@otherIds.each do |other_id|
|
112
|
-
pairs << "#{other_id.name}:#{other_id.value}"
|
113
|
-
end
|
114
|
-
end
|
115
|
-
return pairs
|
116
|
-
end
|
117
|
-
|
118
|
-
end
|