1 / 21

Scripting DSpace in JRuby with the jrdspace gem

Learn how to extend DSpace, a digital repository system, using JRuby scripting language with the jrdspace gem. Explore features such as database, Solr, index, filesystem, and web UI integration, as well as API and CLI configurations. Discover the benefits of using JRuby for DSpace development, including faster development cycles and easy integration with Java. Plus, get practical examples and tips for setting passwords, handling submitters, setting default class year, and tracking submissions over time.

amauldin
Download Presentation

Scripting DSpace in JRuby with the jrdspace gem

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Scripting DSpace in JRuby with the jrdspace gem monikam@princeton.edu Monika Mevenkamp

  2. DSpace Hierarchy Communities Collections Items Bitstreams Web UI APIs oai, rest, … Accounts & Rights Stats/Reporting Administration Web UI & CLI PR2016 Dublin – Developer Track Monika Mevenkamp

  3. DSpace @ Princeton DataSpace 60,000 Senior Thesis in ~50 departmental collections ~ 70 library collections with close to 5000 articles various midsize and smaller collections some research data - but mostly pdf Soon new instance with faculty articles PR2016 Dublin – Developer Track Monika Mevenkamp

  4. At Princeton Princeton Senior Theses • who are submitters for department • new default value for class year • set metadata this way iff access permissions are these • bitstream downloads over time Library Content • create a new collection such that …. PR2016 Dublin – Developer Track Monika Mevenkamp

  5. Extending DSpace REST database solr index filesystem WEB-UI DSPACE – API CLI configs ~200K lines PR2016 Dublin – Developer Track Monika Mevenkamp

  6. Extending DSpace REST database solr index filesystem WEB-UI DSPACE – API CLI + Java Extension configs ~200K lines PR2016 Dublin – Developer Track Monika Mevenkamp

  7. Extending DSpace REST database solr index filesystem WEB-UI DSPACE – API CLI JRuby configs ~200K lines PR2016 Dublin – Developer Track Monika Mevenkamp

  8. Extending DSpace Java Development Cycle - code - mvn package 90 sec - ant update - test/run JRuby Development Cycle - start interactive interpreter - load dspace-api jars 12 sec - load Ruby gems - code, test/run code PR2016 Dublin – Developer Track Monika Mevenkamp

  9. Extending with JRuby Ruby interpreter written in Java Ruby load compiled Java call Java methods Java execute Ruby from Java PU OIT UnConference 06/2015 Jruby Monika Mevenkamp 333C

  10. JRuby – not Jython interfaces with Java interpreted not compiled widely used many packages I know Ruby better PR2016 Dublin – Developer Track Monika Mevenkamp

  11. Time For Examples PR2016 Dublin – Developer Track Monika Mevenkamp

  12. Set Password Stick it in a file – make it executable #!/usr/bin/env jruby require ‘dspace’ netid, pwd = ARGV # or from somewhere else DSpace.loadDSpace.login(ENV['USER'])p = DEPerson.find(netid)raise "no such eperson" if p.nil?p.setPassword(pwd)p.updateDSpace.commit PR2016 Dublin – Developer Track Monika Mevenkamp

  13. Collection Submitters handle = '123456789/5858'DSpace.load DSpace.fromString(handle).getCollections.eachdo |col| subs = col.getSubmitters.getMembers members = subs.collect {|p| p.getFullName } puts col.getName + "\t\t" + members.join"\t"end PR2016 Dublin – Developer Track Monika Mevenkamp

  14. Collection Submitters handle = '123456789/5858'DSpace.load DSpace.fromString(handle).getCollections.each do |col| subs = col.getSubmitters.getMembers members = subs.collect {|p| p.getFullName } puts col.getName + "\t\t" + members.join "\t"end Anthropology Bergstrom McLaughlin Kuhlman Nicolas Architecture School Schamberger Cremin Art and Archaeology Koepp Dach …. Output PR2016 Dublin – Developer Track Monika Mevenkamp

  15. Set Default Class Year year = '2016'schema, element, qualifier = ['pu', 'date', 'classyear']handle = '123456789/5858'DSpace.loadDSpace.login(ENV['USER']) DSpace.fromString(handle).getCollections.each do |col|template = col.getTemplateItemif (template) thentemplate.setMetadataSingleValue(schema, element, qualifier, nil, year)template.updateMetadatatemplate.updateendendDSpace.commit PR2016 Dublin – Developer Track Monika Mevenkamp

  16. Submissions Over Time date_field = ’dc.date.accessioned'iter, submissions = DItem.iter, {}while (i = iter.next())begindate = i.getMetadata(date_field)year, month = date.split('-')submissions[year] ||= []submissions[year][month.to_i] ||= 0submissions[year][month.to_i] += 1rescue $stderr.puts "Item#{i}can' t parse #{date}" endend puts "Year\t" + (1..12).collect{|m| m.to_s}.join("\t")submissions.keys.sort.each { |y|counts = (1..12).collect { |m| submissions[y][m] || 0 } puts y + "\t" + counts.join("\t")} PR2016 Dublin – Developer Track Monika Mevenkamp

  17. Submissions Over Time date_field = 'dc.date.issued’ iter, submissions DItem.iter, {}while (i = iter.next()) dodate = i.getMetadata(date_field)beginyear, month = date.split('-')submissions[year] ||= []submissions[year][month.to_i] ||= 0submissions[year][month.to_i] += 1rescue$stderr.puts "Item#{i}can't parse#{date}" endend Year 1 2 3 4 5 6 7 8 9 10 11 12 2010 12 11 5 5 9 11 7 5 11 6 10 7 2011 8 6 4 8 5 10 1 9 8 8 8 6 2012 11 3 5 8 5 4 12 7 7 14 4 6 PR2016 Dublin – Developer Track Monika Mevenkamp

  18. Strict Policies -> MetaData year , group_name = 2016, "SrTheses_Bitstream_Read_Mudd"set_value = 'Walk-in Access. ...';items = DSpace.findByMetadataValue('pu.date.classyear', year, nil)items.each do |i|DSpace.create(i).bitstreams.each do |bit|DSpace.create(bit).policies.each do |hsh| if (0 ==hsh[:action] and group_name == hsh[:group]) theni.setMetadataSingleValue('dc', 'right', 'accessRights', nil, set_value) puts "ITEM#{i.getHandle}settingdc.rights.accessRights"i.updateend end end end PR2016 Dublin – Developer Track Monika Mevenkamp

  19. Create Collection require 'dspace' class DCollectiondef copy(name, parent) … endend DSpace.load() DSpace.login "monikam”template_coll = DSpace.fromString('123456789/6625')parent, name = prompt_and_collect_answers dcol = DSpace.create(template_coll) dcol.copy(name, parent) DSpace.commit PR2016 Dublin – Developer Track Monika Mevenkamp

  20. Create Collection class DCollectiondef copy(name, parent)new_col = DCollection.create(name, parent)group = @obj.getSubmitters();if (group) thennew_group = new_col.createSubmitters copy_group(group, new_group)end[1, 2, 3].each do |i|group = @obj.getWorkflowGroup(i);if (group) thennew_group = new_col.createWorkflowGroup(i) copy_group(group, new_group)end endnew_col.update()return new_colend privatedef copy_group(from, to)from.getMemberGroups().each do |g|to.addMember(g);endfrom.getMembers().each do |g|to.addMember(g);endto.updateendend PR2016 Dublin – Developer Track Monika Mevenkamp

  21. @ GitHub https://github.com/akinom/dspace-jruby https://rubygems.org/gems/jrdspace @rubydoc.info @RubyGems.org PR2016 Dublin – Developer Track Monika Mevenkamp

More Related