dor-services 4.22.3 → 4.22.4
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.
- checksums.yaml +8 -8
- data/bin/dor-indexer +19 -20
- data/bin/dor-indexerd +2 -3
- data/config/certs/robots-dor-dev.crt +29 -0
- data/config/certs/robots-dor-dev.key +27 -0
- data/config/dev_console_env.rb +77 -0
- data/lib/dor-services.rb +3 -3
- data/lib/dor/config.rb +15 -15
- data/lib/dor/datastreams/administrative_metadata_ds.rb +5 -5
- data/lib/dor/datastreams/content_metadata_ds.rb +181 -225
- data/lib/dor/datastreams/datastream_spec_solrizer.rb +1 -1
- data/lib/dor/datastreams/default_object_rights_ds.rb +8 -10
- data/lib/dor/datastreams/desc_metadata_ds.rb +35 -34
- data/lib/dor/datastreams/embargo_metadata_ds.rb +7 -7
- data/lib/dor/datastreams/events_ds.rb +11 -11
- data/lib/dor/datastreams/geo_metadata_ds.rb +86 -86
- data/lib/dor/datastreams/identity_metadata_ds.rb +19 -19
- data/lib/dor/datastreams/role_metadata_ds.rb +3 -3
- data/lib/dor/datastreams/simple_dublin_core_ds.rb +13 -13
- data/lib/dor/datastreams/version_metadata_ds.rb +5 -5
- data/lib/dor/datastreams/workflow_definition_ds.rb +21 -21
- data/lib/dor/migrations/identifiable/assert_adminPolicy.rb +1 -1
- data/lib/dor/migrations/identifiable/fix_model_assertions.rb +1 -1
- data/lib/dor/migrations/identifiable/record_remediation.rb +2 -2
- data/lib/dor/migrations/identifiable/uriify_augmented_contentlocation_refs.rb +1 -1
- data/lib/dor/migrations/identifiable/uriify_contentlocation_refs.rb +1 -1
- data/lib/dor/migrations/processable/unify_workflows.rb +4 -4
- data/lib/dor/migrations/versionable/add_missing_version_md.rb +1 -1
- data/lib/dor/models/admin_policy_object.rb +1 -1
- data/lib/dor/models/assembleable.rb +5 -5
- data/lib/dor/models/contentable.rb +27 -27
- data/lib/dor/models/describable.rb +168 -179
- data/lib/dor/models/discoverable.rb +13 -13
- data/lib/dor/models/editable.rb +55 -55
- data/lib/dor/models/embargoable.rb +26 -26
- data/lib/dor/models/eventable.rb +3 -3
- data/lib/dor/models/geoable.rb +8 -8
- data/lib/dor/models/governable.rb +14 -14
- data/lib/dor/models/identifiable.rb +117 -143
- data/lib/dor/models/item.rb +2 -2
- data/lib/dor/models/itemizable.rb +9 -9
- data/lib/dor/models/presentable.rb +8 -8
- data/lib/dor/models/preservable.rb +4 -4
- data/lib/dor/models/processable.rb +22 -23
- data/lib/dor/models/releaseable.rb +26 -26
- data/lib/dor/models/shelvable.rb +14 -14
- data/lib/dor/models/upgradable.rb +13 -13
- data/lib/dor/models/versionable.rb +2 -2
- data/lib/dor/models/workflow_object.rb +4 -4
- data/lib/dor/services/cleanup_reset_service.rb +27 -27
- data/lib/dor/services/cleanup_service.rb +4 -7
- data/lib/dor/services/digital_stacks_service.rb +10 -10
- data/lib/dor/services/merge_service.rb +1 -1
- data/lib/dor/services/metadata_handlers/mdtoolkit_handler.rb +2 -2
- data/lib/dor/services/metadata_service.rb +20 -20
- data/lib/dor/services/registration_service.rb +27 -27
- data/lib/dor/services/reset_workspace_service.rb +15 -15
- data/lib/dor/services/sdr_ingest_service.rb +6 -6
- data/lib/dor/services/search_service.rb +2 -2
- data/lib/dor/services/suri_service.rb +5 -5
- data/lib/dor/services/technical_metadata_service.rb +2 -3
- data/lib/dor/utils/ng_tidy.rb +9 -9
- data/lib/dor/utils/predicate_patch.rb +1 -1
- data/lib/dor/utils/solr_doc_helper.rb +2 -2
- data/lib/dor/version.rb +1 -1
- data/lib/dor/workflow/document.rb +19 -19
- data/lib/dor/workflow/graph.rb +36 -36
- data/lib/dor/workflow/process.rb +12 -12
- data/lib/tasks/dor.rake +1 -1
- data/lib/tasks/rdoc.rake +3 -3
- metadata +6 -3
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
NGNmODk1OTA4MGVlYTZjMmVmYjBjOTRkMTk2MmMyOTk2ZDVhMDI5OA==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
OWMwZTg1ODA3ZGE1YTg0Njk1NmMzM2FmMWU0ZGJkNjQ5MzZmYmZkOQ==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
MjYwYzkwNTFjZmIxZGRlY2M5NjIyZTYzNTNkNTMyZGVmNzk2NGIwYjc0NjNk
|
10
|
+
NWUzMTExZDA1N2IyNWNjZTc0MTNkZWM3Y2M1ZDMzNjA1OGM1NzFjMjAwNDI0
|
11
|
+
MTkwYjlhMjVjMmQ4OTMzODIzZWM5MDNmYTA3MjkwYjc5MTEzODI=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
ZTFkZWVjOTI2OTZjZjBlZjA2OTVjNmY1ODQ0MzE2NDM0ZjBiYzE1ZTNhMWM3
|
14
|
+
OTQ0NzYwOGIwYTA0NDRlMWVjM2JkODhmNzdiZGYyMDc3ZTA3ZGMxZjc5OTFl
|
15
|
+
YjVmYzIyMjI0MDU4MDliNDQ4ODk0YjAxNjU1OTY5ZDZkN2I3Mzk=
|
data/bin/dor-indexer
CHANGED
@@ -27,11 +27,11 @@ optparse = OptionParser.new do|opts|
|
|
27
27
|
opts.on('-c', '--client-id ID', 'Stomp client ID') do |client_id|
|
28
28
|
Dor::Config.stomp.client_id = client_id
|
29
29
|
end
|
30
|
-
|
30
|
+
|
31
31
|
opts.on('-v', 'Verbose') do
|
32
32
|
options[:log_level] -= 1 if options[:log_level] > 0
|
33
33
|
end
|
34
|
-
|
34
|
+
|
35
35
|
opts.on('-h', '--help', 'Display this screen') do
|
36
36
|
puts opts
|
37
37
|
exit
|
@@ -53,16 +53,16 @@ begin
|
|
53
53
|
@clientid = options[:client_id]
|
54
54
|
@destination = options[:destination]
|
55
55
|
|
56
|
-
|
56
|
+
|
57
57
|
@conn = Dor::Config.stomp.connection
|
58
58
|
$stderr.print Time.now.to_s + " Getting output from #{@destination}\n"
|
59
|
-
|
59
|
+
|
60
60
|
@conn.subscribe(@destination, {"activemq.subscriptionName" => @clientid, :ack =>"client" })
|
61
61
|
while true
|
62
|
-
|
62
|
+
|
63
63
|
begin
|
64
|
-
|
65
|
-
|
64
|
+
Timeout::timeout(300) do
|
65
|
+
@msg = @conn.receive
|
66
66
|
end
|
67
67
|
if @msg.nil?
|
68
68
|
$stderr.print 'nil message\n'
|
@@ -85,18 +85,18 @@ begin
|
|
85
85
|
@conn.ack @msg.headers["message-id"]
|
86
86
|
end
|
87
87
|
rescue Timeout::Error
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
88
|
+
begin
|
89
|
+
$stderr.print Time.now.to_s +" Sending heartbeat\n"
|
90
|
+
@conn.begin('heartbeat')
|
91
|
+
@conn.commit('heartbeat')
|
92
|
+
rescue Exception => e
|
93
|
+
body = "Unable to send heartbeat to broker\n"
|
94
|
+
body << "\n\nExeption:\n" << he.inspect << "\n" << he.backtrace.join("\n")
|
95
|
+
$stderr.print(Time.now.to_s + " Unable to send heartbeat")
|
96
|
+
$stderr.print(body)
|
97
|
+
end
|
98
|
+
|
99
|
+
|
100
100
|
rescue Exception => e
|
101
101
|
$stderr.print Time.now.to_s + " failed to update solr index for #{pid}: #<#{e.class.name}: #{e.message}>"
|
102
102
|
end
|
@@ -105,4 +105,3 @@ begin
|
|
105
105
|
rescue Exception => e
|
106
106
|
p e
|
107
107
|
end
|
108
|
-
|
data/bin/dor-indexerd
CHANGED
@@ -43,12 +43,12 @@ log_dir=nil
|
|
43
43
|
if ARGV[3]=='--log_dir'
|
44
44
|
log_dir=ARGV[4]
|
45
45
|
else
|
46
|
-
|
46
|
+
puts "Log dir not specified"
|
47
47
|
end
|
48
48
|
|
49
49
|
|
50
50
|
if log_dir.empty?
|
51
|
-
|
51
|
+
File.join(Dir.pwd,'log')
|
52
52
|
end
|
53
53
|
|
54
54
|
|
@@ -70,4 +70,3 @@ version = '>=0'
|
|
70
70
|
#app = Gem.bin_path('dor-services','dor-indexer',version)
|
71
71
|
app = File.expand_path('../dor-indexer',__FILE__)
|
72
72
|
Daemons.run(app,options)
|
73
|
-
|
@@ -0,0 +1,29 @@
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
2
|
+
MIIE9zCCAt8CCQCcUJVDTu7rTjANBgkqhkiG9w0BAQUFADCBvzELMAkGA1UEBhMC
|
3
|
+
VVMxEzARBgNVBAgTCkNhbGlmb3JuaWExETAPBgNVBAcTCFN0YW5mb3JkMRwwGgYD
|
4
|
+
VQQKExNTdGFuZm9yZCBVbml2ZXJzaXR5MRIwEAYDVQQLEwlMaWJyYXJpZXMxJTAj
|
5
|
+
BgNVBAMTHFNVTCBET1IgKGRldi90ZXN0KSBhY2Nlc3MgQ0ExLzAtBgkqhkiG9w0B
|
6
|
+
CQEWIHN1bC13ZWJtYXN0ZXJAbGlzdHMuc3RhbmZvcmQuZWR1MB4XDTEyMDkyNjE1
|
7
|
+
NTQzNVoXDTIyMDkyNDE1NTQzNVowgboxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpD
|
8
|
+
YWxpZm9ybmlhMREwDwYDVQQHEwhTdGFuZm9yZDEcMBoGA1UEChMTU3RhbmZvcmQg
|
9
|
+
VW5pdmVyc2l0eTEyMDAGA1UEAxQpcm9ib3RzQHN1bC1seWJlcnNlcnZpY2VzLWRl
|
10
|
+
di5zdGFuZm9yZC5lZHUxMTAvBgkqhkiG9w0BCQEWImRsc3MtZGV2ZWxvcGVyc0Bs
|
11
|
+
aXN0cy5zdGFuZm9yZC5lZHUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
|
12
|
+
AQC1t+PPhLTDFQBuAf4f1GOj7jHdXMN0tvSHL1OCaibe0d8iKbXCMMIE0z8lbBpZ
|
13
|
+
1pA+8terIvxoTlly92EEvGkywZb+DIxnjyG0b9ftDJ64pARJMcnvwJMW/w3WdHCd
|
14
|
+
5uJ5HVM8ZCbEItUfskFukS6tfNBpG8ri6cIQ2ulJzOWYxPV5R2eRneM6vtFD0xtu
|
15
|
+
RJb/uMwiOwB79qk4QazbEQtkeZsrvomDFkIuHO/nf9wmgYG99H7q1kXplIrzDDX+
|
16
|
+
fvD+JHvuMr5YXfmBQ9wmaZf6YIL7CXj79HUF4uG/a0SjrLZyLh262zWJQFVpjSW8
|
17
|
+
Brl/fAyjeZvWJMyCDXRqsedjAgMBAAEwDQYJKoZIhvcNAQEFBQADggIBAG0jIfTj
|
18
|
+
1FJsxTzcD938vtKuNo5XEIX8phqW1MA2eJ5Ojgu1hpW5Jf7fmUHKVnamm7eya5QR
|
19
|
+
356KCJzZzwdCS4xVFq/l43gCA2j8TYrwO6/0EfM/5psUZS3ecwahzcJXfHPHvd9u
|
20
|
+
qaXRqbjJYi+Ls70uStTC/JBIIu48atDF0DeXJ21hAbstZ1OKKNzAcYgZk14GKxCi
|
21
|
+
ArgAzdg8UDtC4KsdqgxP6vF8Vc/gcHSu9AkVHgPVXbITjV0/kaKNgFi0bVqP7bJD
|
22
|
+
hrUFYrS+S+hflQJCmVrDwW0JU2HnJ3EJOFX5F4FYHL4vt6ZjVsMzucraMqiLyUaO
|
23
|
+
s6DVaWO8WMlphmFUfb3ChQjrKxFZZ6vKJPD/ExnQHa0kWwOELyMJuXw2PLk7k+qD
|
24
|
+
rmjX+K3Ed+JiJuiDG5k8f1BDZE24lvxDwye5fQyDWPfib1yTClYYy4PRh4AI688f
|
25
|
+
qgMyv51Qx82o0IJ1On1rNg5/iB7OEVcYSol3U5xiY9gRUd3vq637agZzMuRQnKXs
|
26
|
+
Uj0+Vl4OrZ54F8MVsUKfi7Je1oVUEhuHqFt/tSOGlHg1XyR/ExwulCNBKIVdhhrF
|
27
|
+
rxZCYrGDSUCF6tteJXpOBTtFT9b7hbMmBohKyS4XjfPSPRh9QHx7wepqSp3aHpmR
|
28
|
+
4gY8Go40mS83xHCKBooqsy2/Z9vQlSb9Cr8u
|
29
|
+
-----END CERTIFICATE-----
|
@@ -0,0 +1,27 @@
|
|
1
|
+
-----BEGIN RSA PRIVATE KEY-----
|
2
|
+
MIIEpQIBAAKCAQEAtbfjz4S0wxUAbgH+H9Rjo+4x3VzDdLb0hy9Tgmom3tHfIim1
|
3
|
+
wjDCBNM/JWwaWdaQPvLXqyL8aE5ZcvdhBLxpMsGW/gyMZ48htG/X7QyeuKQESTHJ
|
4
|
+
78CTFv8N1nRwnebieR1TPGQmxCLVH7JBbpEurXzQaRvK4unCENrpSczlmMT1eUdn
|
5
|
+
kZ3jOr7RQ9MbbkSW/7jMIjsAe/apOEGs2xELZHmbK76JgxZCLhzv53/cJoGBvfR+
|
6
|
+
6tZF6ZSK8ww1/n7w/iR77jK+WF35gUPcJmmX+mCC+wl4+/R1BeLhv2tEo6y2ci4d
|
7
|
+
uts1iUBVaY0lvAa5f3wMo3mb1iTMgg10arHnYwIDAQABAoIBAQCmlDzsZZ2C24S6
|
8
|
+
U29OZFc21kq1vqyaGIEOT48BFSguyDsAyTWKH0IsRC41suRxCGTQn7KeegLh5zjO
|
9
|
+
UAGK4uCYm6g7mOs4n5fpHUHWVuRFJG2dX1vbQTBVO1fHCJSX2ygumHhN+w0ibT/r
|
10
|
+
v2+F2ObuOGWghM62tkylQNfsRD0QjalE8ST2xp9p4xwPrAwEuURlA04qnLYNi4+6
|
11
|
+
qexDtrLG8E6JV/dd3dY95WjKPscadR1fAKm9sebD0XO31Lu6BGCvpmBU0OmYVfrY
|
12
|
+
BN/ofhEmJh+Xgwfxx6PicRDvu9bPnffqbGhDO4ckGDlqXp1fDBgf1I7CclXdrVMH
|
13
|
+
Qsxunh5pAoGBAN7929V1aw0S7Rqvuf4N+o1XwBExa2DL7EYI1Oea/nuBMPqvfeNh
|
14
|
+
SrbM0gYejEzLmeRUUKRhMMoAgXQnxcg3Kz/5pUXT3b4YtzeskX8nkJ6/2gEU3M7E
|
15
|
+
lJj7c5wW1otqMH19+iDNR4N8vjPh98kDJW1HZUHSAcdyE+dZiFP2ofMfAoGBANCe
|
16
|
+
AJgA9EkdwZsom+I7Ty9LSrTWx6cKmNEbLVn1iSlyJx1kHoWyTMtuZszCWBjiXx70
|
17
|
+
84WpX2B4MuJBq6sSoEiUahNsphks82glOd6i+eoE/I+NtZehOFnkAMyGux+FbMyG
|
18
|
+
q/9ZlQgsbWpFHxS59vX/kvlNun2RpJkaF6QPBuc9AoGBAIGdscCb5cPNsoCGkGf6
|
19
|
+
HB84WG4l+bJkFkyHKaoOT8neSGgOxe/7R4CGAbaI3yhsWGF+GPnTfJaOQLERxUch
|
20
|
+
ukQPil/STNwIZcc4ycHNb6S3A7MJO2f8oBtkXcjnBYI4EUOAjHmwmNb3FV/3Ax6W
|
21
|
+
c5TXoSXnOh2CU8twIWwcufolAoGATqnFf4uckZVu05rUbNIAYcz6NoZmck5EoVSm
|
22
|
+
HS3Asqggp6yA9djtrCfNC5icr4VsaLfku5nKJQ4t4bLxkGhNmBCejwSA/S09+x9O
|
23
|
+
Wu0JX3zR3y+IMczQ+tRGmNiU5qXhCJ4fbQHSeGqIN3Io7h/RR6E/QlJU59RrRG/a
|
24
|
+
SjqAV+ECgYEA2mA5VFK3jECnLde+biEaXidIOuBMcqaP0VG6sBwz2wTGSTBE1WkG
|
25
|
+
6prCD0McWVAgDTm3MMKxeuMaoW5eEi83+G+CywLaTBpc8Hz7qgRhBpKhRirCfHMW
|
26
|
+
EfQV5k32vEGoSI+eG8zcGb9mwDeb/EWXAMGXrx2YuYFu7txtwC2mZXc=
|
27
|
+
-----END RSA PRIVATE KEY-----
|
@@ -0,0 +1,77 @@
|
|
1
|
+
cert_dir = File.join(File.dirname(__FILE__), 'certs')
|
2
|
+
|
3
|
+
Dor::Config.configure do
|
4
|
+
|
5
|
+
ssl do
|
6
|
+
cert_file File.join(cert_dir, 'robots-dor-dev.crt')
|
7
|
+
key_file File.join(cert_dir, 'robots-dor-dev.key')
|
8
|
+
key_pass ''
|
9
|
+
end
|
10
|
+
|
11
|
+
suri do
|
12
|
+
mint_ids true
|
13
|
+
id_namespace 'druid'
|
14
|
+
url 'https://lyberservices-dev.stanford.edu'
|
15
|
+
user 'labware'
|
16
|
+
pass 'lyberteam'
|
17
|
+
end
|
18
|
+
|
19
|
+
metadata do
|
20
|
+
exist.url 'http://viewer:l3l%40nd@lyberapps-dev.stanford.edu/exist/rest/'
|
21
|
+
catalog.url 'http://lyberservices-prod.stanford.edu/catalog/mods'
|
22
|
+
end
|
23
|
+
|
24
|
+
stacks do
|
25
|
+
document_cache_host 'purl-dev.stanford.edu'
|
26
|
+
local_stacks_root '/stacks'
|
27
|
+
local_document_cache_root '/purl/document_cache'
|
28
|
+
local_workspace_root '/dor/workspace'
|
29
|
+
end
|
30
|
+
|
31
|
+
solrizer.url 'http://sul-solr.stanford.edu/solr/argo_test'
|
32
|
+
fedora.url 'https://sul-dor-test.stanford.edu/fedora'
|
33
|
+
workflow.url 'https://lyberservices-dev.stanford.edu/workflow/'
|
34
|
+
dor_services.url 'https://dorAdmin:dorAdmin@sul-lyberservices-dev.stanford.edu/dor'
|
35
|
+
|
36
|
+
cleanup do
|
37
|
+
local_workspace_root '/dor/workspace'
|
38
|
+
local_export_home '/dor/export'
|
39
|
+
end
|
40
|
+
|
41
|
+
sdr do
|
42
|
+
url 'https://sdrAdmin:sdrAdmin@sdr-services-test.stanford.edu/sdr/'
|
43
|
+
local_workspace_root '/dor/workspace'
|
44
|
+
local_export_home '/dor/export'
|
45
|
+
datastreams do
|
46
|
+
administrativeMetadata 'optional'
|
47
|
+
contentMetadata 'optional'
|
48
|
+
descMetadata 'required'
|
49
|
+
defaultObjectRights 'optional'
|
50
|
+
events 'optional'
|
51
|
+
embargoMetadata 'optional'
|
52
|
+
identityMetadata 'required'
|
53
|
+
provenanceMetadata 'required'
|
54
|
+
relationshipMetadata 'required'
|
55
|
+
rightsMetadata 'optional'
|
56
|
+
roleMetadata 'optional'
|
57
|
+
sourceMetadata 'optional'
|
58
|
+
technicalMetadata 'optional'
|
59
|
+
versionMetadata 'required'
|
60
|
+
workflows 'optional'
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
accessioning_robot_sleep_time 30
|
65
|
+
|
66
|
+
end
|
67
|
+
|
68
|
+
#WORKFLOW_URI = 'http://lyberservices-test.stanford.edu/workflow'
|
69
|
+
|
70
|
+
# Constants for Dor::WorkflowService
|
71
|
+
#module Dor
|
72
|
+
# CREATE_WORKFLOW = DOR_CREATE_WORKFLOW = true
|
73
|
+
# WF_URI = 'http://lyberservices-test.stanford.edu/workflow'
|
74
|
+
#end
|
75
|
+
|
76
|
+
# External application locations
|
77
|
+
JHOVE_HOME = File.join(ENV['HOME'], 'jhoveToolkit')
|
data/lib/dor-services.rb
CHANGED
@@ -30,11 +30,11 @@ module Dor
|
|
30
30
|
# Dor.load_instance() if the item is not in the index, or is improperly
|
31
31
|
# indexed.
|
32
32
|
# @param [String] pid The object's PID
|
33
|
-
def find pid, opts={}
|
34
|
-
|
33
|
+
def find pid, opts = {}
|
34
|
+
find_all(%{id:"#{pid}"}, opts).first || load_instance(pid)
|
35
35
|
end
|
36
36
|
|
37
|
-
def find_all query, opts={}
|
37
|
+
def find_all query, opts = {}
|
38
38
|
ensure_models_loaded!
|
39
39
|
af_version = Gem::Version.new(ActiveFedora::VERSION)
|
40
40
|
if opts[:lightweight] and af_version < Gem::Version.new('4.0.0.rc9')
|
data/lib/dor/config.rb
CHANGED
@@ -29,27 +29,27 @@ module Dor
|
|
29
29
|
params[:timeout] = result.workflow.timeout if result.workflow.timeout
|
30
30
|
# params[:logger] = Logger.new('logs/workflow_service.log', 'weekly') # if you want to control the logger, insert it here.
|
31
31
|
Dor::WorkflowService.configure result.workflow.url, params
|
32
|
-
|
32
|
+
result
|
33
33
|
end
|
34
34
|
|
35
|
-
def autoconfigure(url, cert_file=Config.ssl.cert_file, key_file=Config.ssl.key_file, key_pass=Config.ssl.key_pass)
|
35
|
+
def autoconfigure(url, cert_file = Config.ssl.cert_file, key_file = Config.ssl.key_file, key_pass = Config.ssl.key_pass)
|
36
36
|
client = make_rest_client(url, cert_file, key_file, key_pass)
|
37
37
|
config = Confstruct::Configuration.symbolize_hash JSON.parse(client.get :accept => 'application/json')
|
38
|
-
|
38
|
+
configure(config)
|
39
39
|
end
|
40
40
|
|
41
41
|
def sanitize
|
42
|
-
|
42
|
+
dup
|
43
43
|
end
|
44
44
|
|
45
|
-
def make_rest_client(url, cert=Config.ssl.cert_file, key=Config.ssl.key_file, pass=Config.ssl.key_pass)
|
45
|
+
def make_rest_client(url, cert = Config.ssl.cert_file, key = Config.ssl.key_file, pass = Config.ssl.key_pass)
|
46
46
|
params = {}
|
47
47
|
params[:ssl_client_cert] = OpenSSL::X509::Certificate.new(File.read(cert)) if cert
|
48
48
|
params[:ssl_client_key] = OpenSSL::PKey::RSA.new(File.read(key), pass) if key
|
49
49
|
RestClient::Resource.new(url, params)
|
50
50
|
end
|
51
51
|
|
52
|
-
def make_solr_connection(add_opts={})
|
52
|
+
def make_solr_connection(add_opts = {})
|
53
53
|
opts = Config.solrizer.opts.merge(add_opts).merge(
|
54
54
|
:url => Config.solrizer.url
|
55
55
|
)
|
@@ -71,7 +71,7 @@ module Dor
|
|
71
71
|
}
|
72
72
|
},
|
73
73
|
:sdr => {
|
74
|
-
:rest_client => Confstruct.deferred { |c| config.make_rest_client c.url }
|
74
|
+
:rest_client => Confstruct.deferred { |c| config.make_rest_client c.url }
|
75
75
|
},
|
76
76
|
:gsearch => {
|
77
77
|
:rest_client => Confstruct.deferred { |c| config.make_rest_client c.rest_url },
|
@@ -101,11 +101,11 @@ module Dor
|
|
101
101
|
if ActiveFedora.respond_to?(:configurator)
|
102
102
|
if config.solrizer.url.present?
|
103
103
|
ActiveFedora::SolrService.register
|
104
|
-
ActiveFedora::SolrService.instance.instance_variable_set :@conn,
|
104
|
+
ActiveFedora::SolrService.instance.instance_variable_set :@conn, make_solr_connection
|
105
105
|
end
|
106
106
|
else
|
107
|
-
ActiveFedora::RubydoraConnection.connect
|
108
|
-
if
|
107
|
+
ActiveFedora::RubydoraConnection.connect fedora_config if fedora.url.present?
|
108
|
+
if solrizer.url.present?
|
109
109
|
ActiveFedora::SolrService.register config.solrizer.url, config.solrizer.opts
|
110
110
|
conn = ActiveFedora::SolrService.instance.conn.connection
|
111
111
|
if config.ssl.cert_file.present?
|
@@ -125,15 +125,15 @@ module Dor
|
|
125
125
|
def init *args; end
|
126
126
|
|
127
127
|
def fedora_config
|
128
|
-
fedora_uri = URI.parse(
|
129
|
-
connection_opts = { :url =>
|
130
|
-
connection_opts[:ssl_client_cert] = OpenSSL::X509::Certificate.new(File.read(
|
131
|
-
connection_opts[:ssl_client_key] = OpenSSL::PKey::RSA.new(File.read(
|
128
|
+
fedora_uri = URI.parse(fedora.url)
|
129
|
+
connection_opts = { :url => fedora.safeurl, :user => fedora_uri.user, :password => fedora_uri.password }
|
130
|
+
connection_opts[:ssl_client_cert] = OpenSSL::X509::Certificate.new(File.read(ssl.cert_file)) if ssl.cert_file.present?
|
131
|
+
connection_opts[:ssl_client_key] = OpenSSL::PKey::RSA.new(File.read(ssl.key_file),ssl.key_pass) if ssl.key_file.present?
|
132
132
|
connection_opts
|
133
133
|
end
|
134
134
|
|
135
135
|
def solr_config
|
136
|
-
{ :url =>
|
136
|
+
{ :url => solrizer.url }
|
137
137
|
end
|
138
138
|
|
139
139
|
def predicate_config
|
@@ -99,21 +99,21 @@ class AdministrativeMetadataDS < ActiveFedora::OmDatastream
|
|
99
99
|
#################################################################################
|
100
100
|
|
101
101
|
def default_workflow_lane= lane
|
102
|
-
|
102
|
+
defaults.initiate_workflow.lane = lane
|
103
103
|
end
|
104
104
|
|
105
105
|
def default_workflow_lane
|
106
|
-
|
106
|
+
defaults.initiate_workflow.lane.first
|
107
107
|
end
|
108
108
|
|
109
109
|
def default_shelving_path= path
|
110
|
-
|
110
|
+
defaults.shelving.path = path
|
111
111
|
end
|
112
112
|
|
113
113
|
def default_shelving_path
|
114
|
-
|
114
|
+
defaults.shelving.path.first
|
115
115
|
end
|
116
116
|
|
117
117
|
end
|
118
118
|
|
119
|
-
end
|
119
|
+
end
|
@@ -1,29 +1,29 @@
|
|
1
1
|
module Dor
|
2
|
-
class ContentMetadataDS < ActiveFedora::OmDatastream
|
2
|
+
class ContentMetadataDS < ActiveFedora::OmDatastream
|
3
3
|
include Upgradable
|
4
4
|
include SolrDocHelper
|
5
5
|
|
6
6
|
set_terminology do |t|
|
7
|
-
t.root
|
8
|
-
t.contentType :path => '/contentMetadata/@type',
|
9
|
-
t.stacks
|
7
|
+
t.root :path => 'contentMetadata', :index_as => [:not_searchable]
|
8
|
+
t.contentType :path => '/contentMetadata/@type', :index_as => [:not_searchable]
|
9
|
+
t.stacks :path => '/contentMetadata/@stacks', :index_as => [:not_searchable]
|
10
10
|
t.resource(:index_as => [:not_searchable]) do
|
11
|
-
t.id_
|
12
|
-
t.sequence
|
13
|
-
t.type_
|
11
|
+
t.id_ :path => { :attribute => 'id' }
|
12
|
+
t.sequence :path => { :attribute => 'sequence' } #, :data_type => :integer
|
13
|
+
t.type_ :path => { :attribute => 'type' }, :index_as => [:displayable]
|
14
14
|
t.attribute(:path => 'attr', :index_as => [:not_searchable]) do
|
15
|
-
t.name
|
15
|
+
t.name :path => { :attribute => 'name' }, :index_as => [:not_searchable]
|
16
16
|
end
|
17
17
|
t.file(:index_as => [:not_searchable]) do
|
18
|
-
t.id_
|
18
|
+
t.id_ :path => { :attribute => 'id' }
|
19
19
|
t.mimeType :path => { :attribute => 'mimeType' }, :index_as => [:displayable]
|
20
20
|
t.dataType :path => { :attribute => 'dataType' }, :index_as => [:displayable]
|
21
|
-
t.size
|
22
|
-
t.shelve
|
23
|
-
t.publish
|
24
|
-
t.preserve :path => { :attribute => 'preserve' }, :index_as => [:not_searchable]#, :data_type => :boolean
|
21
|
+
t.size :path => { :attribute => 'size' }, :index_as => [:displayable] #, :data_type => :long
|
22
|
+
t.shelve :path => { :attribute => 'shelve' }, :index_as => [:not_searchable] #, :data_type => :boolean
|
23
|
+
t.publish :path => { :attribute => 'publish' }, :index_as => [:not_searchable] #, :data_type => :boolean
|
24
|
+
t.preserve :path => { :attribute => 'preserve' }, :index_as => [:not_searchable] #, :data_type => :boolean
|
25
25
|
t.checksum do
|
26
|
-
t.type_
|
26
|
+
t.type_ :path => { :attribute => 'type' }
|
27
27
|
end
|
28
28
|
end
|
29
29
|
t.shelved_file(:path => 'file', :attributes => {:shelve=>'yes'}, :index_as => [:not_searchable]) do
|
@@ -34,305 +34,261 @@ module Dor
|
|
34
34
|
end
|
35
35
|
|
36
36
|
def public_xml
|
37
|
-
result =
|
38
|
-
result.xpath('/contentMetadata/resource[not(file[(@deliver="yes" or @publish="yes")])]').each { |n| n.remove }
|
39
|
-
result.xpath('/contentMetadata/resource/file[not(@deliver="yes" or @publish="yes")]').each { |n| n.remove }
|
37
|
+
result = ng_xml.clone
|
38
|
+
result.xpath('/contentMetadata/resource[not(file[(@deliver="yes" or @publish="yes")])]' ).each { |n| n.remove }
|
39
|
+
result.xpath('/contentMetadata/resource/file[not(@deliver="yes" or @publish="yes")]' ).each { |n| n.remove }
|
40
40
|
result.xpath('/contentMetadata/resource/file').xpath('@preserve|@shelve|@publish|@deliver').each { |n| n.remove }
|
41
41
|
result.xpath('/contentMetadata/resource/file/checksum').each { |n| n.remove }
|
42
42
|
result
|
43
43
|
end
|
44
|
+
|
44
45
|
def add_file(file, resource_name)
|
45
|
-
xml=
|
46
|
+
xml = ng_xml
|
46
47
|
resource_nodes = xml.search('//resource[@id=\''+resource_name+'\']')
|
47
|
-
if resource_nodes.length==0
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
file_node=
|
52
|
-
file_node['
|
53
|
-
file_node['
|
54
|
-
file_node['publish']=file[:publish] ? file[:publish] : ''
|
55
|
-
file_node['preserve']=file[:preserve] ? file[:preserve] : ''
|
48
|
+
raise 'resource doesnt exist.' if resource_nodes.length == 0
|
49
|
+
node = resource_nodes.first
|
50
|
+
file_node = Nokogiri::XML::Node.new('file', xml)
|
51
|
+
file_node['id'] = file[:name]
|
52
|
+
file_node['shelve'] = file[:shelve ] ? file[:shelve ] : ''
|
53
|
+
file_node['publish'] = file[:publish ] ? file[:publish ] : ''
|
54
|
+
file_node['preserve'] = file[:preserve] ? file[:preserve] : ''
|
56
55
|
node.add_child(file_node)
|
57
56
|
|
58
|
-
|
59
|
-
|
60
|
-
checksum_node
|
61
|
-
checksum_node
|
57
|
+
[:md5, :sha1].each do |algo|
|
58
|
+
next unless file[algo]
|
59
|
+
checksum_node = Nokogiri::XML::Node.new('checksum', xml)
|
60
|
+
checksum_node['type'] = algo.to_s
|
61
|
+
checksum_node.content = file[algo]
|
62
62
|
file_node.add_child(checksum_node)
|
63
63
|
end
|
64
|
-
if file[:
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
file_node.add_child(checksum_node)
|
69
|
-
end
|
70
|
-
if file[:size]
|
71
|
-
file_node['size']=file[:size]
|
72
|
-
end
|
73
|
-
if file[:mime_type]
|
74
|
-
file_node['mimetype']=file[:mime_type]
|
75
|
-
end
|
76
|
-
self.content=xml.to_s
|
77
|
-
self.save
|
64
|
+
file_node['size' ] = file[:size ] if file[:size]
|
65
|
+
file_node['mimetype'] = file[:mime_type] if file[:mime_type]
|
66
|
+
self.content = xml.to_s
|
67
|
+
save
|
78
68
|
end
|
79
69
|
|
80
|
-
def add_resource(files,resource_name, position,type="file")
|
81
|
-
xml=
|
82
|
-
if xml.search('//resource[@id=\''+resource_name+'\']').length>0
|
83
|
-
|
84
|
-
end
|
85
|
-
node=nil
|
86
|
-
|
87
|
-
max=-1
|
70
|
+
def add_resource(files,resource_name, position,type = "file")
|
71
|
+
xml = ng_xml
|
72
|
+
raise "resource #{resource_name} already exists" if xml.search('//resource[@id=\'' + resource_name + '\']').length > 0
|
73
|
+
max = -1
|
88
74
|
xml.search('//resource').each do |node|
|
89
|
-
if node['sequence'].to_i>max
|
90
|
-
max=node['sequence'].to_i
|
91
|
-
end
|
75
|
+
max = node['sequence'].to_i if node['sequence'].to_i > max
|
92
76
|
end
|
93
77
|
#renumber all of the resources that will come after the newly added one
|
94
|
-
while max>position do
|
95
|
-
node=xml.search('//resource[@sequence=\'' + position + '\']')
|
96
|
-
if node.length>0
|
97
|
-
node=node.first
|
98
|
-
node[sequence]=max+1
|
78
|
+
while max > position do
|
79
|
+
node = xml.search('//resource[@sequence=\'' + position + '\']')
|
80
|
+
if node.length > 0
|
81
|
+
node = node.first
|
82
|
+
node[sequence] = max + 1
|
99
83
|
end
|
100
|
-
max
|
84
|
+
max -= 1
|
101
85
|
end
|
102
|
-
node=Nokogiri::XML::Node.new('resource',xml)
|
103
|
-
node['sequence']=position.to_s
|
104
|
-
node['id']=resource_name
|
105
|
-
node['type']=type
|
86
|
+
node = Nokogiri::XML::Node.new('resource',xml)
|
87
|
+
node['sequence'] = position.to_s
|
88
|
+
node['id'] = resource_name
|
89
|
+
node['type'] = type
|
106
90
|
files.each do |file|
|
107
|
-
file_node=Nokogiri::XML::Node.new('file',xml)
|
108
|
-
file_node['shelve']=file[:shelve] ? file[:shelve] : ''
|
109
|
-
file_node['publish']=file[:publish] ? file[:publish] : ''
|
110
|
-
file_node['preserve']=file[:preserve] ? file[:preserve] : ''
|
111
|
-
file_node['id']=file[:name]
|
91
|
+
file_node = Nokogiri::XML::Node.new('file', xml)
|
92
|
+
file_node['shelve' ] = file[:shelve ] ? file[:shelve ] : ''
|
93
|
+
file_node['publish' ] = file[:publish ] ? file[:publish ] : ''
|
94
|
+
file_node['preserve'] = file[:preserve] ? file[:preserve] : ''
|
95
|
+
file_node['id' ] = file[:name]
|
112
96
|
node.add_child(file_node)
|
113
|
-
|
114
|
-
|
115
|
-
checksum_node=Nokogiri::XML::Node.new('checksum',xml)
|
116
|
-
checksum_node['type']=
|
117
|
-
checksum_node.content=file[
|
118
|
-
file_node.add_child(checksum_node)
|
119
|
-
end
|
120
|
-
if not file[:sha1].nil?
|
121
|
-
checksum_node=Nokogiri::XML::Node.new('checksum',xml)
|
122
|
-
checksum_node['type']='sha1'
|
123
|
-
checksum_node.content=file[:sha1]
|
97
|
+
[:md5, :sha1].each do |algo|
|
98
|
+
next unless file[algo]
|
99
|
+
checksum_node = Nokogiri::XML::Node.new('checksum', xml)
|
100
|
+
checksum_node['type'] = algo.to_s
|
101
|
+
checksum_node.content = file[algo]
|
124
102
|
file_node.add_child(checksum_node)
|
125
103
|
end
|
126
|
-
if file[:size]
|
127
|
-
|
128
|
-
end
|
129
|
-
end
|
104
|
+
file_node['size'] = file[:size] if file[:size]
|
105
|
+
end
|
130
106
|
xml.search('//contentMetadata').first.add_child(node)
|
131
|
-
self.content=xml.to_s
|
132
|
-
|
107
|
+
self.content = xml.to_s
|
108
|
+
save
|
133
109
|
end
|
134
110
|
|
135
111
|
def remove_resource resource_name
|
136
|
-
xml=
|
137
|
-
position
|
138
|
-
|
139
|
-
resources
|
140
|
-
|
141
|
-
raise 'Resource is missing or duplicated!'
|
142
|
-
end
|
143
|
-
position=resources.first['sequence']
|
112
|
+
xml = ng_xml
|
113
|
+
position = -1
|
114
|
+
resources = xml.search('//resource[@id=\'' + resource_name + '\']')
|
115
|
+
raise 'Resource is missing or duplicated!' if resources.length != 1
|
116
|
+
position = resources.first['sequence']
|
144
117
|
resources.first.remove
|
145
|
-
position=position.to_i+1
|
118
|
+
position = position.to_i + 1
|
146
119
|
while true
|
147
|
-
res=xml.search('//resource[@sequence=\''+position.to_s+'\']')
|
148
|
-
if
|
149
|
-
|
150
|
-
|
151
|
-
res['sequence']=position.to_s
|
152
|
-
position=position+1
|
120
|
+
res = xml.search('//resource[@sequence=\'' + position.to_s + '\']')
|
121
|
+
break if res.length == 0
|
122
|
+
res['sequence'] = position.to_s
|
123
|
+
position += 1
|
153
124
|
end
|
154
|
-
self.content=xml.to_s
|
155
|
-
|
125
|
+
self.content = xml.to_s
|
126
|
+
save
|
156
127
|
end
|
157
128
|
|
158
129
|
def remove_file file_name
|
159
|
-
xml=
|
160
|
-
xml.search('//file[@id=\''+file_name+'\']').each do |node|
|
130
|
+
xml = ng_xml
|
131
|
+
xml.search('//file[@id=\'' + file_name + '\']').each do |node|
|
161
132
|
node.remove
|
162
133
|
end
|
163
|
-
self.content=xml.to_s
|
164
|
-
|
134
|
+
self.content = xml.to_s
|
135
|
+
save
|
165
136
|
end
|
137
|
+
|
166
138
|
def update_attributes file_name, publish, shelve, preserve
|
167
|
-
xml=
|
168
|
-
file_node=xml.search('//file[@id=\''+file_name+'\']').first
|
169
|
-
file_node['shelve']=shelve
|
170
|
-
file_node['publish']=publish
|
171
|
-
file_node['preserve']=preserve
|
172
|
-
self.content=xml.to_s
|
173
|
-
|
139
|
+
xml = ng_xml
|
140
|
+
file_node = xml.search('//file[@id=\'' + file_name + '\']').first
|
141
|
+
file_node['shelve' ] = shelve
|
142
|
+
file_node['publish' ] = publish
|
143
|
+
file_node['preserve'] = preserve
|
144
|
+
self.content = xml.to_s
|
145
|
+
save
|
174
146
|
end
|
147
|
+
|
175
148
|
def update_file file, old_file_id
|
176
|
-
xml=
|
177
|
-
file_node=xml.search('//file[@id=\''+old_file_id+'\']').first
|
178
|
-
file_node['id']=file[:name]
|
179
|
-
|
180
|
-
checksum_node=xml.search('//file[@id=\''+old_file_id+'\']/checksum[@type=\'md5\']').first
|
149
|
+
xml = ng_xml
|
150
|
+
file_node = xml.search('//file[@id=\'' + old_file_id + '\']').first
|
151
|
+
file_node['id'] = file[:name]
|
152
|
+
unless file[:md5].nil?
|
153
|
+
checksum_node = xml.search('//file[@id=\'' + old_file_id + '\']/checksum[@type=\'md5\']').first
|
181
154
|
if checksum_node.nil?
|
182
|
-
checksum_node=Nokogiri::XML::Node.new('checksum',xml)
|
155
|
+
checksum_node = Nokogiri::XML::Node.new('checksum', xml)
|
183
156
|
file_node.add_child(checksum_node)
|
184
157
|
end
|
185
|
-
checksum_node['type']='md5'
|
186
|
-
checksum_node.content=file[:md5]
|
158
|
+
checksum_node['type'] = 'md5'
|
159
|
+
checksum_node.content = file[:md5]
|
187
160
|
end
|
188
|
-
|
189
|
-
checksum_node=xml.search('//file[@id=\''+old_file_id+'\']/checksum[@type=\'sha1\']').first
|
161
|
+
unless file[:sha1].nil?
|
162
|
+
checksum_node = xml.search('//file[@id=\'' + old_file_id + '\']/checksum[@type=\'sha1\']').first
|
190
163
|
if checksum_node.nil?
|
191
|
-
checksum_node=Nokogiri::XML::Node.new('checksum',xml)
|
164
|
+
checksum_node = Nokogiri::XML::Node.new('checksum', xml)
|
192
165
|
file_node.add_child(checksum_node)
|
193
166
|
end
|
194
|
-
checksum_node['type']='sha1'
|
195
|
-
checksum_node.content=file[:sha1]
|
196
|
-
end
|
197
|
-
if file[:size]
|
198
|
-
file_node['size']=file[:size]
|
199
|
-
end
|
200
|
-
if file[:shelve]
|
201
|
-
file_node['shelve']=file[:shelve]
|
202
|
-
end
|
203
|
-
if file[:preserve]
|
204
|
-
file_node['preserve']=file[:preserve]
|
167
|
+
checksum_node['type'] = 'sha1'
|
168
|
+
checksum_node.content = file[:sha1]
|
205
169
|
end
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
170
|
+
|
171
|
+
file_node['size' ] = file[:size ] if file[:size]
|
172
|
+
file_node['shelve' ] = file[:shelve ] if file[:shelve]
|
173
|
+
file_node['preserve'] = file[:preserve] if file[:preserve]
|
174
|
+
file_node['publish' ] = file[:publish ] if file[:publish]
|
175
|
+
self.content = xml.to_s
|
176
|
+
save
|
211
177
|
end
|
178
|
+
|
212
179
|
# Terminology-based solrization is going to be painfully slow for large
|
213
180
|
# contentMetadata streams. Just select the relevant elements instead.
|
214
|
-
def to_solr(solr_doc=
|
215
|
-
doc =
|
181
|
+
def to_solr(solr_doc = {}, *args)
|
182
|
+
doc = ng_xml
|
216
183
|
if doc.root['type']
|
217
|
-
shelved_file_count=0
|
218
|
-
content_file_count=0
|
219
|
-
resource_type_counts={}
|
220
|
-
resource_count=0
|
221
|
-
preserved_size=0
|
222
|
-
first_shelved_image=nil
|
184
|
+
shelved_file_count = 0
|
185
|
+
content_file_count = 0
|
186
|
+
resource_type_counts = {}
|
187
|
+
resource_count = 0
|
188
|
+
preserved_size = 0
|
189
|
+
first_shelved_image = nil
|
223
190
|
add_solr_value(solr_doc, "content_type", doc.root['type'], :string, [:facetable])
|
224
|
-
doc.xpath('contentMetadata/resource').sort { |a,b| a['sequence'].to_i <=> b['sequence'].to_i }.each do |resource|
|
225
|
-
resource_count+=1
|
226
|
-
if
|
191
|
+
doc.xpath('contentMetadata/resource').sort { |a, b| a['sequence'].to_i <=> b['sequence'].to_i }.each do |resource|
|
192
|
+
resource_count += 1
|
193
|
+
if resource['type']
|
227
194
|
if resource_type_counts[resource['type']]
|
228
|
-
resource_type_counts[resource['type']]+=1
|
195
|
+
resource_type_counts[resource['type']] += 1
|
229
196
|
else
|
230
|
-
resource_type_counts[resource['type']]=1
|
197
|
+
resource_type_counts[resource['type']] = 1
|
231
198
|
end
|
232
199
|
end
|
233
200
|
resource.xpath('file').each do |file|
|
234
|
-
content_file_count+=1
|
201
|
+
content_file_count += 1
|
235
202
|
if file['shelve'] == 'yes'
|
236
|
-
shelved_file_count+=1
|
237
|
-
if first_shelved_image.nil?
|
238
|
-
first_shelved_image=file['id']
|
239
|
-
end
|
240
|
-
end
|
241
|
-
if file['preserve'] == 'yes'
|
242
|
-
preserved_size += file['size'].to_i
|
203
|
+
shelved_file_count += 1
|
204
|
+
first_shelved_image = file['id'] if first_shelved_image.nil? && file['id'].match(/jp2$/)
|
243
205
|
end
|
206
|
+
preserved_size += file['size'].to_i if file['preserve'] == 'yes'
|
244
207
|
end
|
245
208
|
end
|
246
|
-
add_solr_value(solr_doc,
|
247
|
-
add_solr_value(solr_doc,
|
248
|
-
add_solr_value(solr_doc,
|
249
|
-
add_solr_value(solr_doc,
|
209
|
+
add_solr_value(solr_doc, 'content_file_count', content_file_count.to_s, :string, [:searchable, :displayable])
|
210
|
+
add_solr_value(solr_doc, 'shelved_content_file_count', shelved_file_count.to_s, :string, [:searchable, :displayable])
|
211
|
+
add_solr_value(solr_doc, 'resource_count', resource_count.to_s, :string, [:searchable, :displayable])
|
212
|
+
add_solr_value(solr_doc, 'preserved_size', preserved_size.to_s, :string, [:searchable, :displayable])
|
250
213
|
resource_type_counts.each do |key, count|
|
251
|
-
add_solr_value(solr_doc, key+
|
214
|
+
add_solr_value(solr_doc, key + '_resource_count', count.to_s, :string, [:searchable, :displayable])
|
252
215
|
end
|
253
|
-
|
254
|
-
add_solr_value(solr_doc,
|
216
|
+
unless first_shelved_image.nil?
|
217
|
+
add_solr_value(solr_doc, 'first_shelved_image', first_shelved_image, :string, [:displayable])
|
255
218
|
end
|
256
219
|
end
|
257
220
|
solr_doc
|
258
221
|
end
|
222
|
+
|
259
223
|
def rename_file old_name, new_name
|
260
|
-
xml=
|
261
|
-
file_node=xml.search('//file[@id=\''+old_name+'\']').first
|
262
|
-
file_node['id']=new_name
|
263
|
-
self.content=xml.to_s
|
264
|
-
|
224
|
+
xml = ng_xml
|
225
|
+
file_node = xml.search('//file[@id=\'' + old_name + '\']').first
|
226
|
+
file_node['id'] = new_name
|
227
|
+
self.content = xml.to_s
|
228
|
+
save
|
265
229
|
end
|
266
230
|
|
267
231
|
def update_resource_label resource_name, new_label
|
268
|
-
xml=
|
269
|
-
resource_node=xml.search('//resource[@id=\''+resource_name+'\']')
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
labels=xml.search('//resource[@id=\''+resource_name+'\']/label')
|
274
|
-
if(labels.length==0)
|
232
|
+
xml = ng_xml
|
233
|
+
resource_node = xml.search('//resource[@id=\'' + resource_name + '\']')
|
234
|
+
raise 'Resource not found or duplicate found.' unless resource_node.length == 1
|
235
|
+
labels = xml.search('//resource[@id=\'' + resource_name + '\']/label')
|
236
|
+
if labels.length == 0
|
275
237
|
#create a label
|
276
|
-
label_node = Nokogiri::XML::Node.new('label',xml)
|
277
|
-
label_node.content=new_label
|
238
|
+
label_node = Nokogiri::XML::Node.new('label', xml)
|
239
|
+
label_node.content = new_label
|
278
240
|
resource_node.first.add_child(label_node)
|
279
241
|
else
|
280
|
-
labels.first.content=new_label
|
242
|
+
labels.first.content = new_label
|
281
243
|
end
|
282
244
|
end
|
245
|
+
|
283
246
|
def update_resource_type resource, new_type
|
284
|
-
xml=
|
285
|
-
resource_node=xml.search('//resource[@id=\''+resource_name+'\']')
|
286
|
-
|
287
|
-
|
288
|
-
end
|
289
|
-
resource_node.first['type']=new_type
|
247
|
+
xml = ng_xml
|
248
|
+
resource_node = xml.search('//resource[@id=\'' + resource_name + '\']')
|
249
|
+
raise 'Resource not found or duplicate found.' unless resource_node.length == 1
|
250
|
+
resource_node.first['type'] = new_type
|
290
251
|
end
|
291
252
|
|
292
253
|
def move_resource resource_name, new_position
|
293
|
-
xml=
|
294
|
-
file_node=xml.search('//resource[@id=\''+resource_name+'\']')
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
if new_position>position
|
302
|
-
counter=position
|
254
|
+
xml = ng_xml
|
255
|
+
file_node = xml.search('//resource[@id=\''+resource_name+'\']')
|
256
|
+
raise 'Resource not found or duplicate found.' unless file_node.length == 1
|
257
|
+
position = file_node.first['sequence'].to_i
|
258
|
+
# is the resource being moved earlier in the sequence or later?
|
259
|
+
new_position = new_position.to_i
|
260
|
+
if new_position > position
|
261
|
+
counter = position
|
303
262
|
while true
|
304
|
-
if counter == position
|
305
|
-
|
306
|
-
|
307
|
-
item
|
308
|
-
counter=counter+1
|
309
|
-
item['sequence']=counter.to_s
|
263
|
+
break if counter == position
|
264
|
+
item = xml.search('/resource[@id=\'' + counter.to_s + '\']').first
|
265
|
+
counter += 1
|
266
|
+
item['sequence'] = counter.to_s
|
310
267
|
end
|
311
268
|
else
|
312
|
-
counter=position
|
269
|
+
counter = position
|
313
270
|
while true
|
314
|
-
if counter == new_position
|
315
|
-
|
316
|
-
|
317
|
-
item
|
318
|
-
counter=counter-1
|
319
|
-
item['sequence']=counter.to_s
|
271
|
+
break if counter == new_position
|
272
|
+
item = xml.search('/resource[@id=\'' + counter.to_s + '\']').first
|
273
|
+
counter -= 1
|
274
|
+
item['sequence'] = counter.to_s
|
320
275
|
end
|
321
276
|
end
|
322
277
|
end
|
323
|
-
|
324
|
-
|
325
|
-
|
278
|
+
|
279
|
+
# Set the content type to and the resource types for all resources
|
280
|
+
# @param new_type [String] the new content type, ex book
|
281
|
+
# @param new_resource_type [String] the new type for all resources, ex book
|
326
282
|
def set_content_type old_type, old_resource_type, new_type, new_resource_type
|
327
|
-
xml=
|
328
|
-
xml.search('/contentMetadata[@type=\''+old_type+'\']').each do |node|
|
329
|
-
node['type']=new_type
|
330
|
-
xml.search('//resource[@type=\''+old_resource_type+'\']').each do |resource|
|
331
|
-
resource['type']=new_resource_type
|
283
|
+
xml = ng_xml
|
284
|
+
xml.search('/contentMetadata[@type=\'' + old_type + '\']').each do |node|
|
285
|
+
node['type'] = new_type
|
286
|
+
xml.search('//resource[@type=\'' + old_resource_type + '\']').each do |resource|
|
287
|
+
resource['type'] = new_resource_type
|
332
288
|
end
|
333
289
|
end
|
334
|
-
self.content=xml.to_s
|
290
|
+
self.content = xml.to_s
|
335
291
|
end
|
336
292
|
end
|
337
293
|
|
338
|
-
end
|
294
|
+
end
|