jrdspace 0.0.10 → 0.0.12
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/LICENSE.txt +1 -1
- data/README.md +20 -17
- data/lib/dspace.rb +3 -2
- data/lib/dspace/dbitstream.rb +9 -1
- data/lib/dspace/dbundle.rb +6 -0
- data/lib/dspace/dcollection.rb +26 -17
- data/lib/dspace/dcommunity.rb +15 -14
- data/lib/dspace/dconstants.rb +44 -0
- data/lib/dspace/deperson.rb +27 -9
- data/lib/dspace/dgroup.rb +31 -19
- data/lib/dspace/ditem.rb +30 -11
- data/lib/dspace/dmetadata.rb +35 -0
- data/lib/dspace/dso.rb +15 -19
- data/lib/dspace/dspace.rb +66 -49
- data/lib/dspace/dwork.rb +77 -0
- data/lib/dspace/version.rb +1 -1
- metadata +5 -4
- data/lib/dspace/dworkflowitem.rb +0 -27
- data/lib/dspace/dworkspaceitem.rb +0 -27
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c5db7f77a3d11787aba5287f24399b892124e5bb
|
4
|
+
data.tar.gz: bb17539e3e32642d8d8d2826fec7e496d638ba88
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c076098fdff1062aef6d13e7b04817d9f967c5e30390c5e8d151265c24893fffa1634ec1142c6e0d625c448589cb0211ea4670c02f08e375794d1475b2a678e0
|
7
|
+
data.tar.gz: 46f5ce896a3bc98ff427fb78cacc37c796dc2017be8cbe01947c6b174538e8be0bd68bb3d0644bdd8b7f54825b832bf6437ab58cf59f2eb16ad464e23a744d15
|
data/LICENSE.txt
CHANGED
data/README.md
CHANGED
@@ -8,6 +8,8 @@ jrdspace contains an interactive console and therefore enables quick experimenta
|
|
8
8
|
|
9
9
|
The companion project [cli-dspace](https://github.com/akinom/dspace-cli) contains utilities that make use of jrdspace.
|
10
10
|
|
11
|
+
Documentation is also available at [rubydoc.info](http://www.rubydoc.info/github/akinom/dspace-jruby)
|
12
|
+
|
11
13
|
## Installation
|
12
14
|
|
13
15
|
### Prerequisite
|
@@ -18,6 +20,7 @@ The companion project [cli-dspace](https://github.com/akinom/dspace-cli) contai
|
|
18
20
|
### Installation
|
19
21
|
|
20
22
|
Add the gem to your projects Gemfile:
|
23
|
+
|
21
24
|
```
|
22
25
|
gem 'jrdspace' # pull from rubygems
|
23
26
|
|
@@ -26,11 +29,14 @@ gem 'jrdspace', :git => 'https://github.com/akinom/dspace-jruby', :branch => 'ma
|
|
26
29
|
```
|
27
30
|
|
28
31
|
Install the gem:
|
32
|
+
|
29
33
|
```
|
30
34
|
bundle install
|
31
35
|
```
|
32
36
|
|
33
|
-
Please note that I am still updating this gem
|
37
|
+
Please note that I am still updating this gem frequently as I discover bugs.
|
38
|
+
So please update frequently with
|
39
|
+
|
34
40
|
```
|
35
41
|
bundle update
|
36
42
|
```
|
@@ -38,6 +44,7 @@ bundle update
|
|
38
44
|
## Usage
|
39
45
|
|
40
46
|
To use in scripts simply include the following
|
47
|
+
|
41
48
|
```
|
42
49
|
require 'dspace'
|
43
50
|
DSpace.load(dspace_install_dir)
|
@@ -66,13 +73,20 @@ DSpace.load("/home/you/installs/dspace") # load from /home/you/installs/dspa
|
|
66
73
|
```
|
67
74
|
|
68
75
|
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:
|
76
|
+
|
69
77
|
```
|
70
78
|
java_import org.dspace.content.Item;
|
71
79
|
```
|
72
|
-
The included classes DSpace, DCommunity, DCollection, ... from [lib/dspace](lib/dspace)
|
80
|
+
The included classes DSpace, DCommunity, DCollection, ... from [lib/dspace](lib/dspace)
|
81
|
+
provide convenience methods, such as retrieving all Communities finding individual objects:
|
82
|
+
|
73
83
|
```
|
74
84
|
DCommunity.all
|
75
|
-
DSpace.fromString('
|
85
|
+
DSpace.fromString ('some/handle')
|
86
|
+
DSpace.fromString ('ITEM.124')
|
87
|
+
DSpace.fromString ('EPERSON.a_netid')
|
88
|
+
DSpace.fromString ('GROUP.Anonymous')
|
89
|
+
DGroup.find('group_name')
|
76
90
|
```
|
77
91
|
|
78
92
|
If you want to make changes you can 'login'
|
@@ -88,26 +102,15 @@ Remember to call the commit method if you want to save changes
|
|
88
102
|
DSpace.commit
|
89
103
|
```
|
90
104
|
|
91
|
-
|
92
|
-
Find Dspace stuff:
|
93
|
-
|
94
|
-
```
|
95
|
-
DSpace.fromHandle ('xxxxx/yyy')
|
96
|
-
DSpace.fromString ('ITEM.124')
|
97
|
-
DSpace.fromString ('GROUP.Anonymous')
|
98
|
-
DSpace.fromString ('EPERSON.a_netid')
|
99
|
-
DCommunity.all
|
100
|
-
DGroup.find('group_name')
|
101
|
-
```
|
102
|
-
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.
|
103
|
-
|
104
105
|
The following prints a rudimentary community report:
|
106
|
+
|
105
107
|
```
|
106
108
|
DCommunity.all.each { |c| puts [c.getCollections.length, c.getHandle, c.getName].join("\t") }
|
107
109
|
```
|
108
110
|
|
109
111
|
Java objects can be converted to corresponding jrdspace objects, so that the additional functionality implemented by jrdspace classes becomes available.
|
110
|
-
For example all jrdspace objects implement the parents and policies method:
|
112
|
+
For example all jrdspace objects derived from DSpaceObjects implement the parents and policies method:
|
113
|
+
|
111
114
|
```
|
112
115
|
dso = DSpace.fromHandle('xxxxx/zzz')
|
113
116
|
DSpace.create(dso).parents
|
data/lib/dspace.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'dspace/dspace'
|
2
|
+
require 'dspace/dconstants'
|
2
3
|
require 'dspace/dso'
|
3
4
|
require 'dspace/deperson'
|
4
5
|
require 'dspace/dgroup'
|
@@ -7,5 +8,5 @@ require 'dspace/dcommunity'
|
|
7
8
|
require 'dspace/ditem'
|
8
9
|
require 'dspace/dbitstream'
|
9
10
|
require 'dspace/dbundle'
|
10
|
-
require 'dspace/
|
11
|
-
require 'dspace/
|
11
|
+
require 'dspace/dwork'
|
12
|
+
require 'dspace/dmetadata'
|
data/lib/dspace/dbitstream.rb
CHANGED
@@ -1,14 +1,22 @@
|
|
1
|
+
###
|
2
|
+
# This class wraps an org.dspace.content.Bitstream object
|
1
3
|
class DBitstream
|
2
4
|
include DSO
|
3
5
|
|
6
|
+
##
|
7
|
+
# return array of all org.dspace.content.Bitstream objects
|
4
8
|
def self.all()
|
5
9
|
java_import org.dspace.content.Bitstream;
|
6
10
|
return Bitstream.findAll(DSpace.context)
|
7
11
|
end
|
8
12
|
|
13
|
+
##
|
14
|
+
# returns nil or the org.dspace.content.Bitstream object with the given id
|
15
|
+
#
|
16
|
+
# id must be an integer
|
9
17
|
def self.find(id)
|
10
18
|
java_import org.dspace.content.Bitstream;
|
11
19
|
return Bitstream.find(DSpace.context, id)
|
12
20
|
end
|
13
21
|
|
14
|
-
end
|
22
|
+
end
|
data/lib/dspace/dbundle.rb
CHANGED
@@ -1,6 +1,12 @@
|
|
1
|
+
###
|
2
|
+
# This class wraps an org.dspace.content.Bitstream object
|
1
3
|
class DBundle
|
2
4
|
include DSO
|
3
5
|
|
6
|
+
##
|
7
|
+
# returns nil or the org.dspace.content.Bundle object with the given id
|
8
|
+
#
|
9
|
+
# id must be an integer
|
4
10
|
def self.find(id)
|
5
11
|
java_import org.dspace.content.Bundle;
|
6
12
|
return Bundle.find(DSpace.context, id)
|
data/lib/dspace/dcollection.rb
CHANGED
@@ -1,35 +1,44 @@
|
|
1
|
+
##
|
2
|
+
# This class wraps an org.dspace.content.Collection object
|
1
3
|
class DCollection
|
2
4
|
include DSO
|
3
5
|
|
6
|
+
##
|
7
|
+
# return array of all org.dspace.content.Collection objects
|
4
8
|
def self.all()
|
5
9
|
java_import org.dspace.content.Collection;
|
6
10
|
return Collection.findAll(DSpace.context)
|
7
11
|
end
|
8
12
|
|
13
|
+
##
|
14
|
+
# returns nil or the org.dspace.content.Collection object with the given id
|
15
|
+
#
|
16
|
+
# id must be an integer
|
9
17
|
def self.find(id)
|
10
18
|
java_import org.dspace.content.Collection;
|
11
19
|
return Collection.find(DSpace.context, id)
|
12
20
|
end
|
13
21
|
|
14
|
-
|
15
|
-
|
22
|
+
##
|
23
|
+
# create and return org.dspace.content.Collection with given name in the given community
|
24
|
+
#
|
25
|
+
# community must be a org.dspace.content.Communiy obj
|
26
|
+
def self.create(name, community)
|
16
27
|
java_import org.dspace.content.Collection;
|
17
|
-
|
18
|
-
|
19
|
-
|
28
|
+
new_col = Collection.create(DSpace.context)
|
29
|
+
new_col.setMetadata("name", name)
|
30
|
+
new_col.update
|
31
|
+
community.addCollection(new_col)
|
32
|
+
return new_col
|
20
33
|
end
|
21
34
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
group = @obj.getWorkflowGroup(i);
|
29
|
-
if (group) then
|
30
|
-
rpt["workflow_group_#{i}".to_sym] = DGroup.new(group).report;
|
31
|
-
end
|
35
|
+
##
|
36
|
+
# return all items listed by the dspace item iterator
|
37
|
+
def items
|
38
|
+
items, iter = [], @obj.items
|
39
|
+
while (i = iter.next) do
|
40
|
+
items << i
|
32
41
|
end
|
33
|
-
|
42
|
+
items
|
34
43
|
end
|
35
|
-
end
|
44
|
+
end
|
data/lib/dspace/dcommunity.rb
CHANGED
@@ -1,30 +1,31 @@
|
|
1
|
+
##
|
2
|
+
# This class wraps an org.dspace.content.Community object
|
1
3
|
class DCommunity
|
2
4
|
include DSO
|
3
5
|
|
6
|
+
##
|
7
|
+
# return array of all org.dspace.content.Community objects
|
4
8
|
def self.all()
|
5
9
|
java_import org.dspace.content.Community;
|
6
10
|
return Community.findAll(DSpace.context)
|
7
11
|
end
|
8
12
|
|
13
|
+
##
|
14
|
+
# returns nil or the org.dspace.content.Community object with the given id
|
15
|
+
#
|
16
|
+
# id must be an integer
|
9
17
|
def self.find(id)
|
10
18
|
java_import org.dspace.content.Community;
|
11
19
|
return Community.find(DSpace.context, id)
|
12
20
|
end
|
13
21
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
def report
|
22
|
-
rpt = dso_report
|
23
|
-
list = @obj.getSubcommunities.collect {|sc| DCommunity.new(sc).report }
|
24
|
-
rpt[:subcomunities] = list unless list.empty?
|
25
|
-
list = @obj.getCollections.collect {|sc| DCollection.new(sc).report }
|
26
|
-
rpt[:collections] = list unless list.empty?
|
27
|
-
return rpt;
|
22
|
+
##
|
23
|
+
# create and return top level org.dspace.content.Community with given name
|
24
|
+
def self.create(name)
|
25
|
+
comm = Community.create(nil, DSpace.context)
|
26
|
+
comm.setMetadata("name", name)
|
27
|
+
comm.update
|
28
|
+
return comm
|
28
29
|
end
|
29
30
|
|
30
31
|
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
##
|
2
|
+
# This class wraps an org.dspace.content.Community object
|
3
|
+
class DConstants
|
4
|
+
|
5
|
+
##
|
6
|
+
# constants corresponding to those defined in org.dspace.core.Constants
|
7
|
+
BITSTREAM = 0;
|
8
|
+
BUNDLE = 1;
|
9
|
+
ITEM = 2;
|
10
|
+
COLLECTION = 3;
|
11
|
+
COMMUNITY = 4;
|
12
|
+
SITE = 5;
|
13
|
+
GROUP = 6;
|
14
|
+
EPERSON = 7;
|
15
|
+
|
16
|
+
READ = 0;
|
17
|
+
WRITE = 1;
|
18
|
+
DELETE = 2;
|
19
|
+
ADD = 3;
|
20
|
+
REMOVE = 4;
|
21
|
+
WORKFLOW_STEP_1 = 5;
|
22
|
+
WORKFLOW_STEP_2 = 6;
|
23
|
+
WORKFLOW_STEP_3 = 7;
|
24
|
+
WORKFLOW_ABORT = 8;
|
25
|
+
DEFAULT_BITSTREAM_READ = 9;
|
26
|
+
DEFAULT_ITEM_READ = 10;
|
27
|
+
ADMIN = 11;
|
28
|
+
|
29
|
+
|
30
|
+
##
|
31
|
+
# returns nil or the org.dspace.content.Community object with the given id
|
32
|
+
#
|
33
|
+
# id must be an integer
|
34
|
+
def self.typeStr(obj_type_id)
|
35
|
+
return org.dspace.core.Constants.typeText[obj_type_id].capitalize
|
36
|
+
end
|
37
|
+
|
38
|
+
##
|
39
|
+
# return String for given action_id
|
40
|
+
def self.actionStr(action_id)
|
41
|
+
return org.dspace.core.Constants.actionText[action_id]
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
data/lib/dspace/deperson.rb
CHANGED
@@ -1,11 +1,31 @@
|
|
1
|
+
##
|
2
|
+
# This class wraps an org.dspace.eperson.EPerson object
|
1
3
|
class DEPerson
|
2
4
|
include DSO
|
3
5
|
|
6
|
+
##
|
7
|
+
# return array of all org.dspace.eperson.EPerson objects
|
4
8
|
def self.all()
|
5
9
|
java_import org.dspace.eperson.EPerson;
|
6
10
|
return EPerson.findAll(DSpace.context, 1)
|
7
11
|
end
|
8
12
|
|
13
|
+
##
|
14
|
+
# returns nil or the org.dspace.eperson.EPerson object with the given netid, email, or id
|
15
|
+
# netid_or_email: must be a string or integer
|
16
|
+
def self.find(netid_email_or_id)
|
17
|
+
java_import org.dspace.eperson.EPerson;
|
18
|
+
raise "must give a netid_or_email value" unless netid_email_or_id
|
19
|
+
if netid_email_or_id.is_a? String then
|
20
|
+
return EPerson.findByNetid(DSpace.context, netid_email_or_id) || EPerson.findByEmail(DSpace.context, netid_email_or_id)
|
21
|
+
end
|
22
|
+
return EPerson.find(DSpace.context, netid_email_or_id)
|
23
|
+
end
|
24
|
+
|
25
|
+
##
|
26
|
+
# create an org.dspace.eperson.EPerson with the given netid, name and email
|
27
|
+
#
|
28
|
+
# the EPerson is not committed to the database
|
9
29
|
def self.create(netid, first, last, email)
|
10
30
|
java_import org.dspace.eperson.EPerson;
|
11
31
|
raise "must give a netid value" unless netid
|
@@ -24,19 +44,17 @@ class DEPerson
|
|
24
44
|
return @dso;
|
25
45
|
end
|
26
46
|
|
27
|
-
|
28
|
-
|
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
|
-
|
47
|
+
##
|
48
|
+
# return all groups where this user is a member
|
33
49
|
def groups
|
34
50
|
java_import org.dspace.eperson.Group;
|
35
51
|
return Group.allMemberGroups(DSpace.context, @obj);
|
36
52
|
end
|
37
53
|
|
38
|
-
|
39
|
-
|
54
|
+
##
|
55
|
+
# convert to string
|
56
|
+
def inspect
|
57
|
+
describe = @obj.getNetid || @obj.getEmail || @obj.getID
|
58
|
+
return "EPERSON.#{describe}"
|
40
59
|
end
|
41
|
-
|
42
60
|
end
|
data/lib/dspace/dgroup.rb
CHANGED
@@ -1,14 +1,26 @@
|
|
1
|
+
##
|
2
|
+
# This class wraps an org.dspace.eperson.Group object
|
1
3
|
class DGroup
|
2
4
|
include DSO
|
3
5
|
|
4
|
-
|
5
|
-
|
6
|
+
##
|
7
|
+
# id of administrator group
|
8
|
+
ADMIN_ID = 1
|
6
9
|
|
10
|
+
##
|
11
|
+
# id of anonymous user group
|
12
|
+
ANONYMOUS_ID = 0
|
13
|
+
|
14
|
+
##
|
15
|
+
# return array of all org.dspace.eperson.Group objects
|
7
16
|
def self.all
|
8
17
|
java_import org.dspace.eperson.Group;
|
9
18
|
Group.findAll(DSpace.context, 1);
|
10
19
|
end
|
11
20
|
|
21
|
+
##
|
22
|
+
# returns nil or the org.dspace.eperson.Group object with the given name or id
|
23
|
+
# name_or_id: must be a string or integer
|
12
24
|
def self.find(name_or_id)
|
13
25
|
java_import org.dspace.eperson.Group;
|
14
26
|
if (name_or_id.class == String)
|
@@ -18,6 +30,10 @@ class DGroup
|
|
18
30
|
end
|
19
31
|
end
|
20
32
|
|
33
|
+
##
|
34
|
+
# find and return the existing group with the given name or create and return a new group with the given name
|
35
|
+
#
|
36
|
+
# name must be a string
|
21
37
|
def self.find_or_create(name)
|
22
38
|
raise "must give a name " unless name
|
23
39
|
group = self.find(name);
|
@@ -32,17 +48,18 @@ class DGroup
|
|
32
48
|
return group;
|
33
49
|
end
|
34
50
|
|
51
|
+
##
|
52
|
+
# return EPerson and Groups that are (direct) require 'faker;members of this DGroup
|
53
|
+
#
|
54
|
+
# name must be a string
|
35
55
|
def members
|
36
|
-
|
37
|
-
@obj.getMembers.each do |m|
|
38
|
-
list << m;
|
39
|
-
end
|
40
|
-
@obj.getMemberGroups.each do |m|
|
41
|
-
list << m;
|
42
|
-
end
|
43
|
-
return list;
|
56
|
+
return @obj.getMembers + @obj.getMemberGroups
|
44
57
|
end
|
45
58
|
|
59
|
+
##
|
60
|
+
# add a memeber to the group
|
61
|
+
#
|
62
|
+
# group_or_eperson must be a org.dspace.eperson.EPerson or Group object
|
46
63
|
def addMember(group_or_eperson)
|
47
64
|
raise "must give non nil group_or_eperson" if group_or_eperson.nil?
|
48
65
|
@obj.addMember(group_or_eperson);
|
@@ -50,14 +67,9 @@ class DGroup
|
|
50
67
|
return @obj;
|
51
68
|
end
|
52
69
|
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
end
|
58
|
-
list = @obj.getMembers()
|
59
|
-
rpt['epersons'] = list.collect { |p| DEerson.new(p).report } unless list.empty?
|
60
|
-
return rpt;
|
70
|
+
##
|
71
|
+
# convert to string
|
72
|
+
def inspect
|
73
|
+
return "GROUP.#{@obj.getName}"
|
61
74
|
end
|
62
|
-
|
63
75
|
end
|
data/lib/dspace/ditem.rb
CHANGED
@@ -1,37 +1,49 @@
|
|
1
|
+
##
|
2
|
+
# This class wraps an org.dspace.content.Item object
|
1
3
|
class DItem
|
2
4
|
include DSO;
|
3
5
|
|
6
|
+
##
|
7
|
+
# return org.dspace.content.ItemIterator for all Items
|
4
8
|
def self.iter
|
5
9
|
java_import org.dspace.content.Item;
|
6
10
|
Item.findAll(DSpace.context);
|
7
11
|
end
|
8
12
|
|
9
|
-
|
13
|
+
##
|
14
|
+
# return array of all org.dspace.content.Item objects
|
15
|
+
def self.all()
|
10
16
|
java_import org.dspace.content.Item;
|
11
|
-
list = []
|
12
|
-
stp = iter
|
17
|
+
list, stp = [], iter
|
13
18
|
while (i = stp.next)
|
14
19
|
list << i
|
15
20
|
end
|
16
21
|
return list
|
17
22
|
end
|
18
23
|
|
24
|
+
##
|
25
|
+
# returns nil or the org.dspace.content.Item object with the given id
|
26
|
+
#
|
27
|
+
# id must be an integer
|
19
28
|
def self.find(id)
|
20
29
|
java_import org.dspace.content.Item;
|
21
|
-
id = id.to_i if id.class == String
|
22
30
|
return Item.find(DSpace.context, id)
|
23
31
|
end
|
24
32
|
|
33
|
+
##
|
34
|
+
# returns [] if restrict_to_dso is nil or all items that are contained in the given restrict_to_dso
|
35
|
+
#
|
36
|
+
# restrict_to_dso must be nil, or an instance of org.dspace.content.Item, Collection, or Community
|
25
37
|
def self.inside(restrict_to_dso)
|
26
38
|
java_import org.dspace.storage.rdbms.DatabaseManager
|
27
39
|
java_import org.dspace.storage.rdbms.TableRow
|
28
40
|
|
29
41
|
return [] if restrict_to_dso.nil?
|
30
|
-
return [restrict_to_dso] if restrict_to_dso.getType ==
|
31
|
-
return [] if restrict_to_dso.getType !=
|
42
|
+
return [restrict_to_dso] if restrict_to_dso.getType == DConstants::ITEM
|
43
|
+
return [] if restrict_to_dso.getType != DConstants::COLLECTION and restrict_to_dso.getType != DConstants::COMMUNITY
|
32
44
|
|
33
45
|
sql = "SELECT ITEM_ID FROM ";
|
34
|
-
if (restrict_to_dso.getType() ==
|
46
|
+
if (restrict_to_dso.getType() == DConstants::COLLECTION) then
|
35
47
|
sql = sql + " Collection2Item CO WHERE CO.Collection_Id = #{restrict_to_dso.getID}"
|
36
48
|
else
|
37
49
|
# must be COMMUNITY
|
@@ -49,14 +61,21 @@ class DItem
|
|
49
61
|
return dsos
|
50
62
|
end
|
51
63
|
|
64
|
+
##
|
65
|
+
# returns the bitstreams in the given bundle
|
52
66
|
def bitstreams(bundle = "ORIGINAL")
|
53
|
-
|
54
|
-
|
55
|
-
|
67
|
+
bundles = bundle.nil? ? @obj.getBundles : @obj.getBundles(bundle)
|
68
|
+
bits = []
|
69
|
+
bundles.each do |b|
|
70
|
+
bits += b.getBitstreams
|
56
71
|
end
|
57
|
-
|
72
|
+
bits
|
58
73
|
end
|
59
74
|
|
75
|
+
##
|
76
|
+
# creata a org.dspace.content.Item with the given metadata in the given collection
|
77
|
+
#
|
78
|
+
# metadata_hash use keys like dc.contributir.author and single string or arrays of values
|
60
79
|
def self.install(collection, metadata_hash)
|
61
80
|
java_import org.dspace.content.InstallItem;
|
62
81
|
java_import org.dspace.content.WorkspaceItem;
|
@@ -0,0 +1,35 @@
|
|
1
|
+
class DMetadataField
|
2
|
+
|
3
|
+
##
|
4
|
+
# instantiate a wrapper for the given org.dspace.content.MetadataField
|
5
|
+
def initialize(dobj)
|
6
|
+
raise "must pass non null obj" unless dobj
|
7
|
+
raise "must pass org.dspace.content.MetadataField obj" unless dobj.instance_of? org.dspace.content.MetadataField
|
8
|
+
@obj = dobj
|
9
|
+
end
|
10
|
+
|
11
|
+
##
|
12
|
+
# returns nil or the org.dspace.content.MetadataField object with the given field_name
|
13
|
+
#
|
14
|
+
# field_name must be a formmatted string: schema.element[.qualifier]
|
15
|
+
def self.find(fully_qualified_metadata_field)
|
16
|
+
java_import org.dspace.content.MetadataSchema
|
17
|
+
java_import org.dspace.content.MetadataField
|
18
|
+
java_import org.dspace.storage.rdbms.DatabaseManager
|
19
|
+
java_import org.dspace.storage.rdbms.TableRow
|
20
|
+
|
21
|
+
(schema, element, qualifier) = fully_qualified_metadata_field.split('.')
|
22
|
+
schm = MetadataSchema.find(DSpace.context, schema)
|
23
|
+
raise "no such metadata schema: #{schema}" if schm.nil?
|
24
|
+
return MetadataField.find_by_element(DSpace.context, schm.getSchemaID, element, qualifier)
|
25
|
+
end
|
26
|
+
|
27
|
+
def inspect
|
28
|
+
java_import org.dspace.content.MetadataSchema
|
29
|
+
schema = MetadataSchema.find(DSpace.context, @obj.schemaID)
|
30
|
+
str = "#{schema.getName}.#{@obj.element}"
|
31
|
+
str += ".#{@obj.qualifier}" if @obj.qualifier
|
32
|
+
return str
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
data/lib/dspace/dso.rb
CHANGED
@@ -1,10 +1,17 @@
|
|
1
|
+
##
|
2
|
+
# This module contains methods to be included by classes that wrap objects
|
3
|
+
# that derive from org.dspace.content.DSpaceObject
|
1
4
|
require 'json'
|
2
5
|
|
3
6
|
module DSO
|
4
7
|
|
8
|
+
##
|
9
|
+
# instanciates a wrapper object for the given dobj, which must derive from org.dspace.content.DSpaceObject
|
10
|
+
#
|
11
|
+
# the wrapper object's class must be compatible with the type of the given dobj
|
5
12
|
def initialize(dobj)
|
6
13
|
raise "must pass non null obj" unless dobj
|
7
|
-
type =
|
14
|
+
type = DConstants.const_get self.class.name[1..-1].upcase
|
8
15
|
@obj = dobj
|
9
16
|
raise "#{dobj} is not a #{type} object" unless @obj.getType == type
|
10
17
|
end
|
@@ -23,23 +30,6 @@ module DSO
|
|
23
30
|
return moms;
|
24
31
|
end
|
25
32
|
|
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
33
|
def policies()
|
44
34
|
java_import org.dspace.authorize.AuthorizeManager
|
45
35
|
pols = AuthorizeManager.getPolicies(DSpace.context, @obj)
|
@@ -65,10 +55,16 @@ module DSO
|
|
65
55
|
mvs = [];
|
66
56
|
while (iter = tri.next())
|
67
57
|
field = MetadataField.find(DSpace.context, iter.getIntColumn("metadata_field_id"))
|
68
|
-
mvs << [
|
58
|
+
mvs << [ DMetadataField.new(field), iter.getStringColumn("text_value") ]
|
69
59
|
end
|
70
60
|
tri.close
|
71
61
|
return mvs
|
72
62
|
end
|
63
|
+
|
64
|
+
def inspect
|
65
|
+
return "nil" if @obj.nil?
|
66
|
+
return "#{@obj.getTypeText}.#{@obj.getID}"
|
67
|
+
end
|
68
|
+
|
73
69
|
end
|
74
70
|
|
data/lib/dspace/dspace.rb
CHANGED
@@ -2,29 +2,35 @@ module DSpace
|
|
2
2
|
ROOT = File.expand_path('../..', __FILE__)
|
3
3
|
@@config = nil;
|
4
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
5
|
|
6
|
+
##
|
7
|
+
# return the name of the wrapper klass that corresponds to the give parameter
|
8
|
+
#
|
9
|
+
# type_str_or_int must be oe of the integer values: BITTREAM .. EPERSON, or the corresponding string
|
14
10
|
def self.objTypeStr(type_str_or_int)
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
11
|
+
if type_str_or_int.class == String and Constants.typeText.find_index type_str_or_int.upcase then
|
12
|
+
klassName = type_str_or_int.capitalize
|
13
|
+
else
|
14
|
+
begin
|
15
|
+
id = Integer(type_str_or_int)
|
16
|
+
rescue
|
17
|
+
raise "no such object type #{type_str_or_int}"
|
18
|
+
end
|
19
|
+
klassName = DConstants.typeStr(id)
|
20
20
|
end
|
21
|
-
return
|
21
|
+
return "EPerson" if klassName == "Eperson"
|
22
|
+
return klassName
|
22
23
|
end
|
23
24
|
|
25
|
+
##
|
26
|
+
# convert string to corresponding constant: BITSTREAM, BUNDLE, ...
|
24
27
|
def self.objTypeId(type_str_or_int)
|
25
28
|
obj_typ = Constants.typeText.find_index objTypeStr(type_str_or_int).upcase
|
26
29
|
end
|
27
30
|
|
31
|
+
##
|
32
|
+
# load DSpace configurations and jar files from the dspace_dir directory;
|
33
|
+
# if dspace_dir is nil use the value of the environment variable 'DSPACE_HOME' or if undefined as well default to '/dspace'
|
28
34
|
def self.load(dspace_dir = nil)
|
29
35
|
if (@@config.nil?) then
|
30
36
|
@@config = Config.new(dspace_dir || ENV['DSPACE_HOME'] || "/dspace")
|
@@ -37,37 +43,58 @@ module DSpace
|
|
37
43
|
return @@config != nil
|
38
44
|
end
|
39
45
|
|
46
|
+
##
|
47
|
+
# return the current org.dspace.core.Context
|
48
|
+
#
|
49
|
+
# this method fails unless it is preceded by a successfull DSPace.load call
|
40
50
|
def self.context
|
41
51
|
raise "must call load to initialize" if @@config.nil?
|
42
52
|
raise "should never happen" if @@config.context.nil?
|
43
53
|
return @@config.context
|
44
54
|
end
|
45
55
|
|
56
|
+
##
|
57
|
+
# renew the current org.dspace.core.Context; this abandons any uncommited database changes
|
46
58
|
def self.context_renew
|
47
59
|
raise "must call load to initialize" if @@config.nil?
|
48
60
|
raise "should never happen" if @@config.context.nil?
|
49
61
|
return @@config.context_renew
|
50
62
|
end
|
51
63
|
|
64
|
+
##
|
65
|
+
# set the current dspace user to the one with the given netid
|
52
66
|
def self.login(netid)
|
53
67
|
self.context.setCurrentUser(DEPerson.find(netid))
|
54
68
|
return nil
|
55
69
|
end
|
56
70
|
|
71
|
+
##
|
72
|
+
# commit changes to the database
|
57
73
|
def self.commit
|
58
74
|
self.context.commit
|
59
75
|
end
|
60
76
|
|
77
|
+
##
|
78
|
+
# commit a wrapper object for the given java object;
|
79
|
+
# the type of the warpper is determined by the class of the given java object
|
80
|
+
#
|
61
81
|
def self.create(dso)
|
62
82
|
raise "dso must not be nil" if dso.nil?
|
63
83
|
klass = Object.const_get "D" + dso.class.name.gsub(/.*::/, '')
|
64
84
|
klass.send :new, dso
|
65
85
|
end
|
66
86
|
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
87
|
+
##
|
88
|
+
# return the DSpace object that is identified by the given type and identifier
|
89
|
+
#
|
90
|
+
# type_str_or_int must be oe of the integer values: BITTREAM .. EPERSON, or the corresponding string
|
91
|
+
#
|
92
|
+
# identifier must be an integer or string value uniquely identifying the object
|
93
|
+
#
|
94
|
+
# DSpace.find(DSpace::COLLECTION, 106)
|
95
|
+
# DSpace.find("ITEM", 10)
|
96
|
+
# DSpace.find("GROUP", "Anonymous")
|
97
|
+
# DSpace.find("EPERSON", "her@there.com")
|
71
98
|
def self.find(type_str_or_int, identifier)
|
72
99
|
type_str = DSpace.objTypeStr(type_str_or_int)
|
73
100
|
type_id = DSpace.objTypeId(type_str)
|
@@ -82,49 +109,40 @@ module DSpace
|
|
82
109
|
|
83
110
|
def self.fromString(type_id_or_handle)
|
84
111
|
#TODO handle MetadataField string
|
85
|
-
splits = type_id_or_handle.split('.')
|
112
|
+
splits = type_id_or_handle.split('.', 2)
|
86
113
|
if (2 == splits.length) then
|
87
114
|
self.find(splits[0].upcase, splits[1])
|
88
115
|
else
|
89
|
-
|
90
|
-
end
|
91
|
-
end
|
92
|
-
|
93
|
-
def self.toString(java_obj)
|
94
|
-
return "nil" unless java_obj
|
95
|
-
klass = java_obj.getClass.getName
|
96
|
-
if (klass == "org.dspace.content.MetadataField") then
|
97
|
-
java_import org.dspace.content.MetadataField
|
98
|
-
java_import org.dspace.content.MetadataSchema
|
99
|
-
|
100
|
-
schema = MetadataSchema.find(DSpace.context, java_obj.schemaID)
|
101
|
-
str = "#{schema.getName}.#{java_obj.element}"
|
102
|
-
str += ".#{java_obj.qualifier}" if java_obj.qualifier
|
103
|
-
str
|
104
|
-
else
|
105
|
-
java_obj.toString
|
116
|
+
return HandleManager.resolve_to_object(DSpace.context, type_id_or_handle);
|
106
117
|
end
|
107
118
|
end
|
108
119
|
|
120
|
+
##
|
121
|
+
# get a dspace service by name
|
109
122
|
def self.getService(service_name, java_klass)
|
110
123
|
org.dspace.utils.DSpace.new().getServiceManager().getServiceByName(service_name,java_klass)
|
111
124
|
end
|
112
125
|
|
126
|
+
##
|
127
|
+
# get the SoltServiveImpl
|
113
128
|
def self.getIndexService()
|
114
129
|
java_import org.dspace.discovery.SolrServiceImpl;
|
115
130
|
self.getService("org.dspace.discovery.IndexingService", SolrServiceImpl)
|
116
131
|
end
|
117
132
|
|
133
|
+
##
|
134
|
+
# if value_or_nil is nil and restrict_to_type is nil return all DSpaceObjects have a value for the
|
135
|
+
# given metadata field
|
136
|
+
#
|
137
|
+
# if value_or_nil is not nil restrict to those whose value is equal to the given paramter
|
138
|
+
#
|
139
|
+
# if restrict_to_typ is not nil, restrict to results of the given type
|
140
|
+
#
|
141
|
+
# restrict_to_type must be one of BITSTREAM, .., EPERSON
|
142
|
+
|
118
143
|
def self.findByMetadataValue(fully_qualified_metadata_field, value_or_nil, restrict_to_type)
|
119
|
-
java_import org.dspace.content.MetadataSchema
|
120
|
-
java_import org.dspace.content.MetadataField
|
121
144
|
java_import org.dspace.storage.rdbms.DatabaseManager
|
122
|
-
|
123
|
-
|
124
|
-
(schema, element, qualifier) = fully_qualified_metadata_field.split('.')
|
125
|
-
schm = MetadataSchema.find(DSpace.context, schema)
|
126
|
-
raise "no such metadata schema: #{schema}" if schm.nil?
|
127
|
-
field = MetadataField.find_by_element(DSpace.context, schm.getSchemaID, element, qualifier)
|
145
|
+
field = DMetadataField.find(fully_qualified_metadata_field)
|
128
146
|
raise "no such metadata field #{fully_qualified_metadata_field}" if field.nil?
|
129
147
|
|
130
148
|
sql = "SELECT MV.resource_id, MV.resource_type_id FROM MetadataValue MV";
|
@@ -145,11 +163,10 @@ module DSpace
|
|
145
163
|
return dsos
|
146
164
|
end
|
147
165
|
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
def self.help(klasses = [DSpace, DCommunity, DCollection, DItem, DGroup])
|
166
|
+
##
|
167
|
+
# print available static methods for the give classes
|
168
|
+
def self.help(klasses = [DCommunity, DCollection, DItem, DBundle, DBitstream, DEPerson,
|
169
|
+
DWorkflowItem, DWorkspaceItem, DMetadataField, DConstants, DSpace])
|
153
170
|
klasses.each do |klass|
|
154
171
|
klass.singleton_methods.sort.each do |mn|
|
155
172
|
m = klass.method(mn)
|
data/lib/dspace/dwork.rb
ADDED
@@ -0,0 +1,77 @@
|
|
1
|
+
##
|
2
|
+
# Helper module for DWorkflow and DWorkSpace
|
3
|
+
module DWork
|
4
|
+
|
5
|
+
##
|
6
|
+
# returns all instances of klass if the obj parameter is nil, otherwise
|
7
|
+
# all instances of klass associated with the the given obj
|
8
|
+
#
|
9
|
+
# klass:: must be org.dspace.workflow.WorkflowItem and org.dspace.workflow.WorkspaceItem
|
10
|
+
# obj:: nil or instances of org.dspace.content.Item, Collection, or Community
|
11
|
+
def self.findAll(obj, klass)
|
12
|
+
if (obj.nil?) then
|
13
|
+
return klass.findAll(DSpace.context)
|
14
|
+
end
|
15
|
+
if (obj.getType == DConstants::COLLECTION)
|
16
|
+
return klass.findByCollection(DSpace.context, obj)
|
17
|
+
elsif (obj.getType == DConstants::COMMUNITY) then
|
18
|
+
wsis = []
|
19
|
+
obj.getAllCollections.each do |col|
|
20
|
+
wsis += findAll(col)
|
21
|
+
end
|
22
|
+
return wsis
|
23
|
+
elsif (obj.getType == DConstants::ITEM) then
|
24
|
+
wi = klass.findByItem(DSpace.context, obj)
|
25
|
+
# to be consistent return array with the unqiue wokflow item
|
26
|
+
return [wi] if wi
|
27
|
+
elsif (obj.getType == DConstants::EPERSON) then
|
28
|
+
wi = klass.findByEPerson(DSpace.context, obj)
|
29
|
+
end
|
30
|
+
# return empty array if no matching workspace items
|
31
|
+
return []
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
|
36
|
+
class DWorkflowItem
|
37
|
+
|
38
|
+
##
|
39
|
+
# find org.dspace.workflow.WorkflowItem
|
40
|
+
#
|
41
|
+
# id must be an integer
|
42
|
+
def self.find(id)
|
43
|
+
java_import org.dspace.workflow.WorkflowItem
|
44
|
+
return WorkflowItem.find(DSpace.context, id)
|
45
|
+
end
|
46
|
+
|
47
|
+
|
48
|
+
##
|
49
|
+
# returns all instances of org.dspace.workflow.WorkflowItem if the obj parameter is nil, otherwise
|
50
|
+
# all instances of org.dspace.workflow.WorkflowItem associated with the the given obj
|
51
|
+
def self.findAll(obj)
|
52
|
+
java_import org.dspace.workflow.WorkflowItem
|
53
|
+
return DWork.findAll(obj, WorkflowItem)
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
57
|
+
|
58
|
+
class DWorkspaceItem
|
59
|
+
|
60
|
+
##
|
61
|
+
# find org.dspace.workflow.WorkspaceItem
|
62
|
+
#
|
63
|
+
# id must be an integer
|
64
|
+
def self.find(id)
|
65
|
+
java_import org.dspace.content.WorkspaceItem
|
66
|
+
return WorkspaceItem.find(DSpace.context, id)
|
67
|
+
end
|
68
|
+
|
69
|
+
##
|
70
|
+
# returns all instances of org.dspace.workflow.WorkspaceItem if the obj parameter is nil, otherwise
|
71
|
+
# all instances of org.dspace.workflow.WorkspaceItem associated with the the given obj
|
72
|
+
def self.findAll(obj)
|
73
|
+
java_import org.dspace.content.WorkspaceItem
|
74
|
+
return DWork.findAll(obj, WorkspaceItem)
|
75
|
+
end
|
76
|
+
|
77
|
+
end
|
data/lib/dspace/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jrdspace
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.12
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Monika Mevenkamp
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-06-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: jar
|
@@ -84,13 +84,14 @@ files:
|
|
84
84
|
- lib/dspace/dbundle.rb
|
85
85
|
- lib/dspace/dcollection.rb
|
86
86
|
- lib/dspace/dcommunity.rb
|
87
|
+
- lib/dspace/dconstants.rb
|
87
88
|
- lib/dspace/deperson.rb
|
88
89
|
- lib/dspace/dgroup.rb
|
89
90
|
- lib/dspace/ditem.rb
|
91
|
+
- lib/dspace/dmetadata.rb
|
90
92
|
- lib/dspace/dso.rb
|
91
93
|
- lib/dspace/dspace.rb
|
92
|
-
- lib/dspace/
|
93
|
-
- lib/dspace/dworkspaceitem.rb
|
94
|
+
- lib/dspace/dwork.rb
|
94
95
|
- lib/dspace/version.rb
|
95
96
|
homepage: https://github.com/akinom/dspace-jruby
|
96
97
|
licenses:
|
data/lib/dspace/dworkflowitem.rb
DELETED
@@ -1,27 +0,0 @@
|
|
1
|
-
#!/usr/bin/env jruby
|
2
|
-
require 'dspace'
|
3
|
-
|
4
|
-
class DWorkflowItem
|
5
|
-
def self.findAll(obj)
|
6
|
-
java_import org.dspace.workflow.WorkflowItem
|
7
|
-
if (obj.nil?) then
|
8
|
-
return WorkflowItem.findAll(DSpace.context)
|
9
|
-
end
|
10
|
-
if (obj.getType == DSpace::COLLECTION)
|
11
|
-
return WorkflowItem.findByCollection(DSpace.context, obj)
|
12
|
-
elsif (obj.getType == DSpace::COMMUNITY) then
|
13
|
-
flows = []
|
14
|
-
obj.getAllCollections.each do |col|
|
15
|
-
flows += findAll(col)
|
16
|
-
end
|
17
|
-
return flows
|
18
|
-
elsif (obj.getType == DSpace::ITEM) then
|
19
|
-
wi = WorkflowItem.findByItem(DSpace.context, obj)
|
20
|
-
# to be consistent return array with the unqiue wokflow item
|
21
|
-
return [wi] if wi
|
22
|
-
end
|
23
|
-
# return empty array if no matching workflow items
|
24
|
-
return []
|
25
|
-
end
|
26
|
-
|
27
|
-
end
|
@@ -1,27 +0,0 @@
|
|
1
|
-
#!/usr/bin/env jruby
|
2
|
-
require 'dspace'
|
3
|
-
|
4
|
-
class DWorkspaceItem
|
5
|
-
def self.findAll(obj)
|
6
|
-
java_import org.dspace.content.WorkspaceItem
|
7
|
-
if (obj.nil?) then
|
8
|
-
return WorkspaceItem.findAll(DSpace.context)
|
9
|
-
end
|
10
|
-
if (obj.getType == DSpace::COLLECTION)
|
11
|
-
return WorkspaceItem.findByCollection(DSpace.context, obj)
|
12
|
-
elsif (obj.getType == DSpace::COMMUNITY) then
|
13
|
-
wsis = []
|
14
|
-
obj.getAllCollections.each do |col|
|
15
|
-
wsis += findAll(col)
|
16
|
-
end
|
17
|
-
return wsis
|
18
|
-
elsif (obj.getType == DSpace::ITEM) then
|
19
|
-
wi = WorkspaceItem.findByItem(DSpace.context, obj)
|
20
|
-
# to be consistent return array with the unqiue wokflow item
|
21
|
-
return [wi] if wi
|
22
|
-
end
|
23
|
-
# return empty array if no matching workspace items
|
24
|
-
return []
|
25
|
-
end
|
26
|
-
|
27
|
-
end
|