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.
@@ -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]
@@ -0,0 +1,5 @@
1
+ module Akubra
2
+ require 'akubra/migration'
3
+ require 'akubra/bean'
4
+ require 'akubra/store'
5
+ end
@@ -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
@@ -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
+