akubra_llstore_migrate 0.0.1-java

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
+