akubra_llstore_migrate 0.0.1-java
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/bin/akubra_llstore_migrate.rb +26 -0
- data/lib/akubra.rb +5 -0
- data/lib/akubra/bean.rb +35 -0
- data/lib/akubra/migration.rb +51 -0
- data/lib/akubra/store.rb +44 -0
- metadata +119 -0
@@ -0,0 +1,26 @@
|
|
1
|
+
#!/usr/bin/env jruby
|
2
|
+
require 'rubygems'
|
3
|
+
require 'bundler'
|
4
|
+
Bundler.require(:default)
|
5
|
+
|
6
|
+
require 'slop'
|
7
|
+
|
8
|
+
$LOAD_PATH.unshift(File.expand_path('../lib', File.dirname(__FILE__)))
|
9
|
+
require 'akubra'
|
10
|
+
|
11
|
+
opts = Slop.parse do
|
12
|
+
banner "Usage: akubra_llstore_migrate.rb [options]"
|
13
|
+
on :h, :help, :tail => true do
|
14
|
+
puts help
|
15
|
+
exit
|
16
|
+
end
|
17
|
+
|
18
|
+
on :f, :from=, 'current akubra_llstore configuration', :optional => false
|
19
|
+
on :t, :to=, ' akubra_llstore configuration to migrate to', :optional => false
|
20
|
+
on :o, :objectStore, :default => true
|
21
|
+
on :d, :datastreamStore, :default => true
|
22
|
+
end
|
23
|
+
|
24
|
+
@migration = Akubra::Migration.new(:from => File.expand_path(opts[:from]), :to => File.expand_path(opts[:to]))
|
25
|
+
@migration.migrate_object_store! if opts[:objectStore]
|
26
|
+
@migration.migrate_datastream_store! if opts[:datastreamStore]
|
data/lib/akubra.rb
ADDED
data/lib/akubra/bean.rb
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'nokogiri'
|
2
|
+
module Akubra
|
3
|
+
class Bean
|
4
|
+
|
5
|
+
def initialize file
|
6
|
+
@file = file
|
7
|
+
end
|
8
|
+
|
9
|
+
def objectStore
|
10
|
+
ref = xml.xpath('//bean[@class="org.fcrepo.server.storage.lowlevel.akubra.AkubraLowlevelStorage"]/constructor-arg[1]/ref/@bean').to_s
|
11
|
+
|
12
|
+
store = bean(ref)
|
13
|
+
end
|
14
|
+
|
15
|
+
def datastreamStore
|
16
|
+
ref = xml.xpath('//bean[@class="org.fcrepo.server.storage.lowlevel.akubra.AkubraLowlevelStorage"]/constructor-arg[2]/ref/@bean').to_s
|
17
|
+
|
18
|
+
store = bean(ref)
|
19
|
+
end
|
20
|
+
|
21
|
+
|
22
|
+
protected
|
23
|
+
def xml
|
24
|
+
@xml ||= Nokogiri::XML(File.read(@file))
|
25
|
+
end
|
26
|
+
|
27
|
+
def beans
|
28
|
+
@beans ||= org.springframework.context.support.ClassPathXmlApplicationContext.new("file:#{File.expand_path(@file)}")
|
29
|
+
end
|
30
|
+
|
31
|
+
def bean ref
|
32
|
+
beans.getBean(ref)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require 'java'
|
2
|
+
require 'fileutils'
|
3
|
+
Dir.glob(File.expand_path('../../jars', File.dirname(__FILE__)) + "/*.jar").map { |x| require x }
|
4
|
+
|
5
|
+
module Akubra
|
6
|
+
class Migration
|
7
|
+
|
8
|
+
def initialize options
|
9
|
+
@options = options
|
10
|
+
end
|
11
|
+
|
12
|
+
def migrate_object_store!
|
13
|
+
migrate!(:objectStore)
|
14
|
+
end
|
15
|
+
|
16
|
+
def migrate_datastream_store!
|
17
|
+
migrate!(:datastreamStore)
|
18
|
+
end
|
19
|
+
|
20
|
+
protected
|
21
|
+
def migrate! storeName
|
22
|
+
source[storeName].each_file do |f|
|
23
|
+
pid = source[storeName].mapper.getExternalId(java.net.URI.create(f)).to_s
|
24
|
+
dest = File.join(destination[storeName].baseDir, destination[storeName].mapper.getInternalId(java.net.URI.create(pid)).rawSchemeSpecificPart)
|
25
|
+
FileUtils.mkdir_p(File.dirname(dest))
|
26
|
+
FileUtils.cp(f, dest)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def source
|
31
|
+
@source ||= begin
|
32
|
+
h = {}
|
33
|
+
bean = Bean.new(@options[:from])
|
34
|
+
h[:objectStore] = Store.new(bean.objectStore)
|
35
|
+
h[:datastreamStore] = Store.new(bean.datastreamStore)
|
36
|
+
h
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def destination
|
41
|
+
@destination ||= begin
|
42
|
+
h = {}
|
43
|
+
bean = Bean.new(@options[:to])
|
44
|
+
h[:objectStore] = Store.new(bean.objectStore)
|
45
|
+
h[:datastreamStore] = Store.new(bean.datastreamStore)
|
46
|
+
h
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
data/lib/akubra/store.rb
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
module Akubra
|
2
|
+
class Store
|
3
|
+
attr_reader :bean
|
4
|
+
|
5
|
+
def initialize bean
|
6
|
+
@bean = bean
|
7
|
+
end
|
8
|
+
|
9
|
+
def each_file &block
|
10
|
+
return to_enum(:each_file).to_a unless block_given?
|
11
|
+
store.listBlobIds(nil).each { |x| block.call(File.join(baseDir, x.schemeSpecificPart)) }
|
12
|
+
end
|
13
|
+
|
14
|
+
def each &block
|
15
|
+
return to_enum(:each).to_a unless block_given?
|
16
|
+
bean.open_connection(nil, nil).listBlobIds(nil).each { |x| block.call(x.schemeSpecificPart) }
|
17
|
+
end
|
18
|
+
|
19
|
+
def store
|
20
|
+
@store ||= begin
|
21
|
+
fl = bean.java_class.declared_field('store')
|
22
|
+
fl.accessible = true
|
23
|
+
fl.value(bean).open_connection(nil, nil)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def baseDir
|
28
|
+
@baseDir ||= begin
|
29
|
+
fl = store.java_class.declared_field('baseDir')
|
30
|
+
fl.accessible = true
|
31
|
+
fl.value(store).to_s
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def mapper
|
36
|
+
@mapper ||= begin
|
37
|
+
fl = bean.java_class.declared_field('mapper')
|
38
|
+
fl.accessible = true
|
39
|
+
fl.value(bean)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
end
|
metadata
ADDED
@@ -0,0 +1,119 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: akubra_llstore_migrate
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease:
|
5
|
+
version: 0.0.1
|
6
|
+
platform: java
|
7
|
+
authors:
|
8
|
+
- Chris Beer
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
|
13
|
+
date: 2011-12-29 00:00:00 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: nokogiri
|
17
|
+
version_requirements: &id001 !ruby/object:Gem::Requirement
|
18
|
+
none: false
|
19
|
+
requirements:
|
20
|
+
- - ">="
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: "0"
|
23
|
+
requirement: *id001
|
24
|
+
prerelease: false
|
25
|
+
type: :runtime
|
26
|
+
- !ruby/object:Gem::Dependency
|
27
|
+
name: slop
|
28
|
+
version_requirements: &id002 !ruby/object:Gem::Requirement
|
29
|
+
none: false
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: "0"
|
34
|
+
requirement: *id002
|
35
|
+
prerelease: false
|
36
|
+
type: :runtime
|
37
|
+
- !ruby/object:Gem::Dependency
|
38
|
+
name: bundler
|
39
|
+
version_requirements: &id003 !ruby/object:Gem::Requirement
|
40
|
+
none: false
|
41
|
+
requirements:
|
42
|
+
- - ">="
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
version: 1.0.14
|
45
|
+
requirement: *id003
|
46
|
+
prerelease: false
|
47
|
+
type: :development
|
48
|
+
- !ruby/object:Gem::Dependency
|
49
|
+
name: rspec
|
50
|
+
version_requirements: &id004 !ruby/object:Gem::Requirement
|
51
|
+
none: false
|
52
|
+
requirements:
|
53
|
+
- - ">="
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: "0"
|
56
|
+
requirement: *id004
|
57
|
+
prerelease: false
|
58
|
+
type: :development
|
59
|
+
- !ruby/object:Gem::Dependency
|
60
|
+
name: jruby-openssl
|
61
|
+
version_requirements: &id005 !ruby/object:Gem::Requirement
|
62
|
+
none: false
|
63
|
+
requirements:
|
64
|
+
- - ">="
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: "0"
|
67
|
+
requirement: *id005
|
68
|
+
prerelease: false
|
69
|
+
type: :development
|
70
|
+
description: REQUIRES FCREPO 3.4+
|
71
|
+
email:
|
72
|
+
- chris@cbeer.info
|
73
|
+
executables:
|
74
|
+
- akubra_llstore_migrate.rb
|
75
|
+
extensions: []
|
76
|
+
|
77
|
+
extra_rdoc_files: []
|
78
|
+
|
79
|
+
files:
|
80
|
+
- lib/akubra.rb
|
81
|
+
- lib/akubra/bean.rb
|
82
|
+
- lib/akubra/migration.rb
|
83
|
+
- lib/akubra/store.rb
|
84
|
+
- bin/akubra_llstore_migrate.rb
|
85
|
+
homepage: http://github.com/cbeer/fedora_akubra_mappers/tree/master/akubra_llstore_migrate
|
86
|
+
licenses: []
|
87
|
+
|
88
|
+
post_install_message:
|
89
|
+
rdoc_options: []
|
90
|
+
|
91
|
+
require_paths:
|
92
|
+
- lib
|
93
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
94
|
+
none: false
|
95
|
+
requirements:
|
96
|
+
- - ">="
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
hash: 2
|
99
|
+
segments:
|
100
|
+
- 0
|
101
|
+
version: "0"
|
102
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
103
|
+
none: false
|
104
|
+
requirements:
|
105
|
+
- - ">="
|
106
|
+
- !ruby/object:Gem::Version
|
107
|
+
hash: 2
|
108
|
+
segments:
|
109
|
+
- 0
|
110
|
+
version: "0"
|
111
|
+
requirements: []
|
112
|
+
|
113
|
+
rubyforge_project:
|
114
|
+
rubygems_version: 1.8.9
|
115
|
+
signing_key:
|
116
|
+
specification_version: 3
|
117
|
+
summary: Fedora Commons Akubra Low-level storage migration utility
|
118
|
+
test_files: []
|
119
|
+
|