jrdspace 0.0.5

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: ca7f654c183e530d9bd2944d86932e9e236431ca
4
+ data.tar.gz: c1b7462812097642881381c0380e55498f88ae2f
5
+ SHA512:
6
+ metadata.gz: 59590638b4618cc7ccba03f43a6d044506b24d64974d5d113031f965eedcf1d1f438529ae14dd093a40734787b69b951c05b6b9e20bfc558f70bd79f38ac430f
7
+ data.tar.gz: 457c84e7d6172faf9383637f9164ded2a9c75e3811743ad392bbc1710d9e8d68baecbaf4416ebacff7549c2eb34e7897f073f131b912462f5e6ca20ef470643c
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 Jacob Brown
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,114 @@
1
+ # jrdspace
2
+
3
+ jrdsapce is implemented in JRuby.
4
+
5
+ It provides a simple mechanism to connect to a [DSpace](https://github.com/DSpace/DSpace) installation and to access and manipulate the Java Objects managed by classes from the dspace-api package.
6
+
7
+ jrdspace contains an interactive console and therefore enables quick experimentation.
8
+
9
+ The companion project [cli-dspace](https://github.com/akinom/dspace-cli) contains utilities that make use of jrdspace.
10
+
11
+ ## Installation
12
+
13
+ ### Prerequisite
14
+ * JRuby [Get Started](http://jruby.org/getting-started)
15
+ * Package Manager [Bundler](http://bundler.io/)
16
+ * optional - but useful [RMV](https://rvm.io/)
17
+
18
+ ### Installation
19
+
20
+ Add the gem to your projects Gemfile:
21
+ ```
22
+ gem 'jrdspace' # pull from rubygems
23
+
24
+ gem 'jrdspace', :git => 'https://github.com/akinom/dspace-jruby', :branch => 'master`
25
+
26
+ ```
27
+
28
+ Install the gem:
29
+ ```
30
+ bundle install
31
+ ```
32
+
33
+ ## Usage
34
+
35
+ To use in scripts simply include the following
36
+ ```
37
+ require 'dspace'
38
+ DSpace.load(dspace_install_dir)
39
+ ```
40
+
41
+ ## Interactive Usage
42
+
43
+ The included idspace command starts an interactive console.
44
+
45
+ ```
46
+ bundle exec idspace
47
+ > DSpace.load # load DSpace jars and configurations
48
+ > DSpace.help # lists all static methods of classes in jrdspace
49
+ ```
50
+
51
+ Use Tab completion to see available methods
52
+
53
+ # Get Started
54
+
55
+ Connect to your dspace database and configurations
56
+
57
+ ```
58
+ DSpace.load # load DSpace jars and configurations from ENV[DSPACE_HOME]
59
+ # or from /dspcae if DSPACE_HOME is undefined
60
+ DSpace.load("/home/you/installs/dspace") # load from /home/you/installs/dspace
61
+ ```
62
+
63
+ The load method sets the environment up by reading configurations from the dspace.cfg file and by requiring all jar files from the ${dspace.dir}/lib directory. After a succesfull load you can start using Java classes by importing them, for example:
64
+ ```
65
+ java_import org.dspace.content.Item;
66
+ ```
67
+ The included classes DSpace, DCommunity, DCollection, ... from [lib/dspace](lib/dspace) provide convenience methods, such as retrieving all Communities or the Group with a given name:
68
+ ```
69
+ DCommunity.all
70
+ DSpace.fromString('GROUP.name')
71
+ ```
72
+
73
+ If you want to make changes you can 'login'
74
+
75
+ ```
76
+ DSpace.login # login with ENV['USER']
77
+ DSpace.login ('netid') # login with given netid
78
+ ```
79
+
80
+ Remember to call the commit method if you want to save changes
81
+
82
+ ```
83
+ DSpace.commit
84
+ ```
85
+
86
+
87
+ Find Dspace stuff:
88
+
89
+ ```
90
+ DSpace.fromHandle ('xxxxx/yyy')
91
+ DSpace.fromString ('ITEM.124')
92
+ DSpace.fromString ('GROUP.Anonymous')
93
+ DSpace.fromString ('EPERSON.a_netid')
94
+ DCommunity.all
95
+ DGroup.find('group_name')
96
+ ```
97
+ These methods use the relevant Java classes to locate the objects and return nil or a reference to the Java object found. All public Java methods can be called on returned references.
98
+
99
+ The following prints a rudimentary community report:
100
+ ```
101
+ DCommunity.all.each { |c| puts [c.getCollections.length, c.getHandle, c.getName].join("\t") }
102
+ ```
103
+
104
+ Java objects can be converted to corresponding jrdspace objects, so that the additional functionality implemented by jrdspace classes becomes available.
105
+ For example all jrdspace objects implement the parents and policies method:
106
+ ```
107
+ dso = DSpace.fromHandle('xxxxx/zzz')
108
+ DSpace.create(dso).parents
109
+ DSpace.create(dso).policies
110
+ ```
111
+
112
+
113
+ # Thanks
114
+ Thank you https://github.com/kardeiz/dscriptor to set me on the path to jruby with dspace
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
data/bin/idspace ADDED
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env jruby
2
+
3
+ require "bundler/setup"
4
+ require "dspace"
5
+
6
+ require "irb"
7
+
8
+ puts "DSpace.load - to connect to dspave installation"
9
+ puts "DSpace.help - for basic help info"
10
+ IRB.start
data/dspace.gemspec ADDED
@@ -0,0 +1,27 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'dspace/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "jrdspace"
8
+ spec.version = DSpace::VERSION
9
+ spec.authors = ["Monika Mevenkamp"]
10
+ spec.email = ["monikam@princeton.edu"]
11
+
12
+ spec.summary = %q{Jruby classes that interact with the dspace-api Java classes - v5}
13
+ spec.description = %q{jrdspace enables scripting of the dspace-api Java objects in a DSpace installation; it includes an interactive console}
14
+ spec.homepage = "https://github.com/akinom/dspace-jruby"
15
+ spec.license = "MIT"
16
+
17
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
18
+ spec.bindir = "bin"
19
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
20
+ spec.require_paths = ["lib"]
21
+
22
+ spec.add_dependency 'jar'
23
+ spec.add_dependency 'json'
24
+
25
+ spec.add_development_dependency "bundler", "~> 1.10"
26
+ spec.add_development_dependency "rake", "~> 10.0"
27
+ end
data/lib/dspace.rb ADDED
@@ -0,0 +1,9 @@
1
+ require 'dspace/dspace'
2
+ require 'dspace/dso'
3
+ require 'dspace/deperson'
4
+ require 'dspace/dgroup'
5
+ require 'dspace/dcollection'
6
+ require 'dspace/dcommunity'
7
+ require 'dspace/ditem'
8
+ require 'dspace/dbitstream'
9
+
@@ -0,0 +1,9 @@
1
+ class DBitstream
2
+ include DSO
3
+
4
+ def self.all()
5
+ java_import org.dspace.content.Bitstream;
6
+ return Bitstream.findAll(DSpace.context)
7
+ end
8
+
9
+ end
@@ -0,0 +1,4 @@
1
+ class DBundle
2
+ include DSO
3
+
4
+ end
@@ -0,0 +1,29 @@
1
+ class DCollection
2
+ include DSO
3
+
4
+ def self.all()
5
+ java_import org.dspace.content.Collection;
6
+ return Collection.findAll(DSpace.context)
7
+ end
8
+
9
+ def self.findAll(name)
10
+ java_import org.dspace.content.Collection;
11
+ self.all.select do |c|
12
+ c.getName == name
13
+ end
14
+ end
15
+
16
+ def report()
17
+ rpt = dso_report
18
+ rpt[:name] = @obj.getName();
19
+ group = @obj.getSubmitters();
20
+ rpt[:submitters] = DGroup.new(group).report if group
21
+ [1, 2, 3].each do |i|
22
+ group = @obj.getWorkflowGroup(i);
23
+ if (group) then
24
+ rpt["workflow_group_#{i}".to_sym] = DGroup.new(group).report;
25
+ end
26
+ end
27
+ return rpt;
28
+ end
29
+ end
@@ -0,0 +1,25 @@
1
+ class DCommunity
2
+ include DSO
3
+
4
+ def self.all()
5
+ java_import org.dspace.content.Community;
6
+ return Community.findAll(DSpace.context)
7
+ end
8
+
9
+ def self.findAll(name)
10
+ java_import org.dspace.content.Community;
11
+ self.all.select do |c|
12
+ c.getName == name
13
+ end
14
+ end
15
+
16
+ def report
17
+ rpt = dso_report
18
+ list = @obj.getSubcommunities.collect {|sc| DCommunity.new(sc).report }
19
+ rpt[:subcomunities] = list unless list.empty?
20
+ list = @obj.getCollections.collect {|sc| DCollection.new(sc).report }
21
+ rpt[:collections] = list unless list.empty?
22
+ return rpt;
23
+ end
24
+
25
+ end
@@ -0,0 +1,42 @@
1
+ class DEperson
2
+ include DSO
3
+
4
+ def self.all()
5
+ java_import org.dspace.eperson.EPerson;
6
+ return EPerson.findAll(DSpace.context, 1)
7
+ end
8
+
9
+ def self.create(netid, first, last, email)
10
+ java_import org.dspace.eperson.EPerson;
11
+ raise "must give a netid value" unless netid
12
+ raise "must give a first and last name" unless (first and last)
13
+ p = EPerson.findByNetid(DSpace.context, netid)
14
+ raise "netid #{netid} already in use" unless p.nil?
15
+
16
+ @dso = EPerson.create(DSpace.context)
17
+ @dso.first_name = first;
18
+ @dso.last_name = last;
19
+ @dso.netid = netid;
20
+ @dso.email = email
21
+ @dso.canLogIn = true;
22
+ @dso.update;
23
+ puts "Created #{@dso}"
24
+ return @dso;
25
+ end
26
+
27
+ def self.find(netid_or_email)
28
+ java_import org.dspace.eperson.EPerson;
29
+ raise "must give a netid_or_email value" unless netid_or_email
30
+ return EPerson.findByNetid(DSpace.context, netid_or_email) || EPerson.findByEmail(DSpace.context, netid_or_email)
31
+ end
32
+
33
+ def groups
34
+ java_import org.dspace.eperson.Group;
35
+ return Group.allMemberGroups(DSpace.context, @obj);
36
+ end
37
+
38
+ def group_names
39
+ groups.collect { |g| g.getName}.sort
40
+ end
41
+
42
+ end
@@ -0,0 +1,67 @@
1
+ class DGroup
2
+ include DSO
3
+
4
+ ADMIN_ID = 1;
5
+ ANONYMOUS_ID = 0;
6
+
7
+ def self.all
8
+ java_import org.dspace.eperson.Group;
9
+ Group.findAll(DSpace.context, 1);
10
+ end
11
+
12
+ def self.find(name_or_id)
13
+ java_import org.dspace.eperson.Group;
14
+ if (name_or_id.class == String)
15
+ return Group.findByName(DSpace.context, name_or_id);
16
+ else
17
+ return Group.find(DSpace.context, name_or_id)
18
+ end
19
+ end
20
+
21
+ def self.find_or_create(name)
22
+ raise "must give a name " unless name
23
+ group = self.find(name);
24
+ if (group.nil?) then
25
+ group = Group.create(DSpace.context);
26
+ group.setName(name)
27
+ group.update();
28
+ puts "Created #{group.toString()}"
29
+ else
30
+ puts "Exists #{group.toString()}"
31
+ end
32
+ return group;
33
+ end
34
+
35
+ def members
36
+ list = [];
37
+ @dso.getMembers.each do |m|
38
+ list << m;
39
+ end
40
+ @dso.getMemberGroups.each do |m|
41
+ list << m;
42
+ end
43
+ return list;
44
+ end
45
+
46
+ def addMember(addGrouNameOrNetid)
47
+ add = DGroup.find(addGrouNameOrNetid)
48
+ if (add.nil?) then
49
+ add = DEperson.find(addGrouNameOrNetid);
50
+ end
51
+ raise "no such netid or group #{addGrouNameOrNetid}" if add.nil?
52
+ @dso.addMember(add);
53
+ @dso.update
54
+ return @dso;
55
+ end
56
+
57
+ def report
58
+ rpt = dso_report
59
+ @obj.getMemberGroups.each do |m|
60
+ rpt[m.toString] = DGroup.new(m).report
61
+ end
62
+ list = @obj.getMembers()
63
+ rpt['epersons'] = list.collect { |p| DEperson.new(p).report } unless list.empty?
64
+ return rpt;
65
+ end
66
+
67
+ end
@@ -0,0 +1,75 @@
1
+ class DItem
2
+ include DSO;
3
+
4
+ def self.iter
5
+ java_import org.dspace.content.Item;
6
+ Item.findAll(DSpace.context);
7
+ end
8
+
9
+ def self.all
10
+ java_import org.dspace.content.Item;
11
+ list = []
12
+ stp = iter
13
+ while (i = stp.next)
14
+ list << i
15
+ end
16
+ return list
17
+ end
18
+
19
+ def self.inside(restrict_to_dso)
20
+ java_import org.dspace.storage.rdbms.DatabaseManager
21
+ java_import org.dspace.storage.rdbms.TableRow
22
+
23
+ return [] if restrict_to_dso.nil?
24
+ return [restrict_to_dso] if restrict_to_dso.getType == DSpace::ITEM
25
+ return [] if restrict_to_dso.getType != DSpace::COLLECTION and restrict_to_dso.getType != DSpace::COMMUNITY
26
+
27
+ sql = "SELECT ITEM_ID FROM ";
28
+ if (restrict_to_dso.getType() == DSpace::COLLECTION) then
29
+ sql = sql + " Collection2Item CO WHERE CO.Collection_Id = #{restrict_to_dso.getID}"
30
+ else
31
+ # must be COMMUNITY
32
+ sql = sql + " Community2Item CO WHERE CO.Community_Id = #{restrict_to_dso.getID}"
33
+ end
34
+ puts sql;
35
+
36
+ tri = DatabaseManager.query(DSpace.context, sql)
37
+ dsos = [];
38
+ while (i = tri.next())
39
+ item = DSpace.find('ITEM', i.getIntColumn("item_id"))
40
+ dsos << item
41
+ end
42
+ tri.close
43
+ return dsos
44
+ end
45
+
46
+ def bitstreams(bundle = "ORIGINAL")
47
+ bundle = @obj.getBundles.select { |b| b.getName() == bundle }[0]
48
+ if (not bundle.nil?) then
49
+ return bundle.getBitstreams
50
+ end
51
+ return [];
52
+ end
53
+
54
+ def self.install(collection, metadata_hash)
55
+ java_import org.dspace.content.InstallItem;
56
+ java_import org.dspace.content.WorkspaceItem;
57
+ java_import org.dspace.content.Item;
58
+
59
+ wi = WorkspaceItem.create(DSpace.context, collection, false)
60
+ item = wi.getItem
61
+ metadata_hash.each do |key,value|
62
+ (schema, element,qualifier) = key.split('.')
63
+ if (value.class == Array ) then
64
+ value.each do |val|
65
+ item.addMetadata(schema, element, qualifier, nil, val);
66
+ end
67
+ else
68
+ item.addMetadata(schema, element, qualifier, nil, value);
69
+ end
70
+ end
71
+ InstallItem.installItem(DSpace.context, wi);
72
+ return item;
73
+ end
74
+
75
+ end
data/lib/dspace/dso.rb ADDED
@@ -0,0 +1,57 @@
1
+ require 'json'
2
+
3
+ module DSO
4
+
5
+ def initialize(dobj)
6
+ raise "must pass non null obj" unless dobj
7
+ type = DSpace.const_get self.class.name[1..-1].upcase
8
+ @obj = dobj
9
+ raise "#{dobj} is not a #{type} object" unless @obj.getType == type
10
+ end
11
+
12
+ def dso
13
+ return @obj
14
+ end
15
+
16
+ def parents
17
+ moms = [];
18
+ p = @obj.getParentObject()
19
+ while p do
20
+ moms << p;
21
+ p = p.getParentObject();
22
+ end
23
+ return moms;
24
+ end
25
+
26
+ def dso_report
27
+ rpt = {};
28
+ rpt[:name] = @obj.getName
29
+ rpt[:obj] = @obj.toString()
30
+ if (@obj.getHandle()) then
31
+ rpt[:handle] = @obj.getHandle()
32
+ end
33
+ if (@obj.getParentObject()) then
34
+ rpt[:parent] = @obj.getParentObject().to_s
35
+ end
36
+ return rpt;
37
+ end
38
+
39
+ def report
40
+ dso_report
41
+ end
42
+
43
+ def policies()
44
+ java_import org.dspace.authorize.AuthorizeManager
45
+ pols = AuthorizeManager.getPolicies(DSpace.context, @obj)
46
+ pols.collect do |p|
47
+ pp = p.getEPerson
48
+ pg = p.getGroup
49
+ hsh = { :action => p.getAction()}
50
+ hsh[:person] = pp.getName if pp
51
+ hsh[:group] = pg.getName if pg
52
+ hsh
53
+ end
54
+ end
55
+
56
+ end
57
+
@@ -0,0 +1,187 @@
1
+ module DSpace
2
+ ROOT = File.expand_path('../..', __FILE__)
3
+ @@config = nil;
4
+
5
+ BITSTREAM = 0;
6
+ BUNDLE = 1;
7
+ ITEM = 2;
8
+ COLLECTION = 3;
9
+ COMMUNITY = 4;
10
+ SITE = 5;
11
+ GROUP = 6;
12
+ EPERSON = 7;
13
+
14
+ def self.objTypeId(type_str_or_int)
15
+ obj_typ = Constants.typeText.find_index type_str_or_int
16
+ if obj_typ.nil? then
17
+ obj_typ = Integer(type_str_or_int)
18
+ raise "no such object typ #{type_str_or_int}" unless Constants.typeText[obj_typ]
19
+ end
20
+ return obj_typ;
21
+ end
22
+
23
+ def self.objTypeStr(type_str_or_int)
24
+ return type_str_or_int if Constants.typeText.find_index type_str_or_int
25
+ obj_typ_id = Integer(type_str_or_int)
26
+ raise "no such object type #{type_str_or_int}" unless Constants.typeText[obj_typ_id]
27
+ return Constants.typeText[obj_typ_id];
28
+ end
29
+
30
+ def self.load(dspace_dir = nil)
31
+ if (@@config.nil?) then
32
+ @@config = Config.new(dspace_dir || ENV['DSPACE_HOME'] || "/dspace")
33
+ self.context # initialize context now
34
+ java_import org.dspace.handle.HandleManager;
35
+ java_import org.dspace.core.Constants
36
+ java_import org.dspace.content.DSpaceObject
37
+ return true
38
+ else
39
+ puts "Already loaded #{@@config.dspace_cfg}"
40
+ end
41
+ return false
42
+ end
43
+
44
+ def self.context
45
+ raise "must call load to initialize" if @@config.nil?
46
+ raise "should never happen" if @@config.context.nil?
47
+ return @@config.context
48
+ end
49
+
50
+ def self.login(netid)
51
+ self.context.setCurrentUser(DEperson.find(netid))
52
+ return nil
53
+ end
54
+
55
+ def self.commit
56
+ self.context.commit
57
+ end
58
+
59
+ def self.create(dso)
60
+ raise "dso must not be nil" if dso.nil?
61
+ klass = Object.const_get "D" + dso.class.name.gsub(/.*::/,'')
62
+ klass.send :new, dso
63
+ end
64
+
65
+ def self.fromString(type_id_or_handle)
66
+ splits = type_id_or_handle.split('.')
67
+ if (2 == splits.length) then
68
+ self.find(splits[0], splits[1])
69
+ else
70
+ self.fromHandle(type_id_or_handle)
71
+ end
72
+ end
73
+
74
+ def self.fromHandle(handle)
75
+ return HandleManager.resolve_to_object(DSpace.context, handle);
76
+ end
77
+
78
+ def self.find(type_str_or_int, identifier)
79
+ type_str = DSpace.objTypeStr(type_str_or_int)
80
+ type_id = DSpace.objTypeId(type_str)
81
+ int_id = identifier.to_i
82
+ obj = DSpaceObject.find(DSpace.context, type_id, int_id)
83
+ if obj.nil? and klass.methods.include? :find
84
+ klass = Object.const_get "D" + type_str.capitalize
85
+ obj = klass.send :find, identifier
86
+ end
87
+ return obj
88
+ end
89
+
90
+ def self.findByMetadataValue(fully_qualified_metadata_field, value_or_nil, restrict_to_type)
91
+ java_import org.dspace.content.MetadataSchema
92
+ java_import org.dspace.content.MetadataField
93
+ java_import org.dspace.storage.rdbms.DatabaseManager
94
+ java_import org.dspace.storage.rdbms.TableRow
95
+
96
+ (schema, element, qualifier) = fully_qualified_metadata_field.split('.')
97
+ schm = MetadataSchema.find(DSpace.context, schema)
98
+ raise "no such metadata schema: #{schema}" if schm.nil?
99
+ field = MetadataField.find_by_element(DSpace.context, schm.getSchemaID, element, qualifier)
100
+ raise "no such metadata field #{fully_qualified_metadata_field}" if field.nil?
101
+
102
+ sql = "SELECT MV.resource_id, MV.resource_type_id FROM MetadataValue MV";
103
+ sql = sql + " where MV.metadata_field_id= #{field.getFieldID} "
104
+ if (not value_or_nil.nil?) then
105
+ sql = sql + " AND MV.text_value LIKE '#{value_or_nil}'"
106
+ end
107
+ if (restrict_to_type) then
108
+ sql = sql + " AND MV.resource_type_id = #{objTypeId(restrict_to_type)}"
109
+ end
110
+
111
+ tri = DatabaseManager.queryTable(DSpace.context, "MetadataValue", sql)
112
+ dsos = [];
113
+ while (iter = tri.next())
114
+ dsos << self.find(iter.getIntColumn("resource_type_id"), iter.getIntColumn("resource_id") )
115
+ end
116
+ tri.close
117
+ return dsos
118
+ end
119
+
120
+
121
+ def self.kernel
122
+ @@config.kernel;
123
+ end
124
+
125
+ def self.help( klasses = [ DSpace, DCommunity, DCollection, DItem, DGroup])
126
+ klasses.each do |klass|
127
+ klass.singleton_methods.sort.each do |mn|
128
+ m = klass.method(mn)
129
+ plist = m.parameters.collect { |p|
130
+ if (p[0] == :req) then
131
+ "#{p[1].to_s}"
132
+ else
133
+ "[ #{p[1].to_s} ]"
134
+ end
135
+ }
136
+ puts "#{klass.name}.#{mn.to_s} (#{plist.join(", ")})"
137
+ end
138
+ end
139
+ return nil
140
+ end
141
+
142
+ class Config
143
+ def initialize(dspace_home)
144
+ @dspace_dir = dspace_home
145
+ puts "Using #{@dspace_dir}"
146
+ @dspace_cfg = "#{@dspace_dir}/config/dspace.cfg";
147
+ @dspace_jars ||= Dir[File.join(@dspace_dir, 'lib/*.jar')]
148
+ @context = nil;
149
+ @kernel = nil;
150
+ end
151
+
152
+ def dspace_dir
153
+ @dspace_dir || raise('dspace_dir is undefined');
154
+ end
155
+
156
+ def dspace_cfg
157
+ @dspace_cfg || raise('dspace.cfg is undefined');
158
+ end
159
+
160
+ def context
161
+ init
162
+ return @context
163
+ end
164
+
165
+ def init
166
+ if @context.nil? then
167
+ puts "Loading jars"
168
+ @dspace_jars.each do |jar|
169
+ require jar
170
+ end
171
+ puts "Loading #{@dspace_cfg}"
172
+ org.dspace.core.ConfigurationManager.load_config(@dspace_cfg)
173
+
174
+ kernel_impl = org.dspace.servicemanager.DSpaceKernelInit.get_kernel(nil)
175
+ if not kernel_impl.is_running then
176
+ puts "Starting new DSpaceKernel"
177
+ kernel_impl.start(@dspace_dir)
178
+ end
179
+ @kernel = kernel_impl;
180
+
181
+ @context = org.dspace.core.Context.new()
182
+ end
183
+ end
184
+ end
185
+
186
+ end
187
+
@@ -0,0 +1,3 @@
1
+ module DSpace
2
+ VERSION = "0.0.5"
3
+ end
metadata ADDED
@@ -0,0 +1,118 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: jrdspace
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.5
5
+ platform: ruby
6
+ authors:
7
+ - Monika Mevenkamp
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-04-11 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: jar
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '>='
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: json
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: bundler
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: '1.10'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: '1.10'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rake
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: '10.0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ~>
67
+ - !ruby/object:Gem::Version
68
+ version: '10.0'
69
+ description: jrdspace enables scripting of the dspace-api Java objects in a DSpace
70
+ installation; it includes an interactive console
71
+ email:
72
+ - monikam@princeton.edu
73
+ executables:
74
+ - idspace
75
+ extensions: []
76
+ extra_rdoc_files: []
77
+ files:
78
+ - LICENSE.txt
79
+ - README.md
80
+ - Rakefile
81
+ - bin/idspace
82
+ - dspace.gemspec
83
+ - lib/dspace.rb
84
+ - lib/dspace/dbitstream.rb
85
+ - lib/dspace/dbundle.rb
86
+ - lib/dspace/dcollection.rb
87
+ - lib/dspace/dcommunity.rb
88
+ - lib/dspace/deperson.rb
89
+ - lib/dspace/dgroup.rb
90
+ - lib/dspace/ditem.rb
91
+ - lib/dspace/dso.rb
92
+ - lib/dspace/dspace.rb
93
+ - lib/dspace/version.rb
94
+ homepage: https://github.com/akinom/dspace-jruby
95
+ licenses:
96
+ - MIT
97
+ metadata: {}
98
+ post_install_message:
99
+ rdoc_options: []
100
+ require_paths:
101
+ - lib
102
+ required_ruby_version: !ruby/object:Gem::Requirement
103
+ requirements:
104
+ - - '>='
105
+ - !ruby/object:Gem::Version
106
+ version: '0'
107
+ required_rubygems_version: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - '>='
110
+ - !ruby/object:Gem::Version
111
+ version: '0'
112
+ requirements: []
113
+ rubyforge_project:
114
+ rubygems_version: 2.0.14
115
+ signing_key:
116
+ specification_version: 4
117
+ summary: Jruby classes that interact with the dspace-api Java classes - v5
118
+ test_files: []