fcrepo_admin 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (96) hide show
  1. checksums.yaml +15 -0
  2. data/.gitignore +9 -0
  3. data/.rspec +1 -0
  4. data/Gemfile +5 -0
  5. data/LICENSE +27 -0
  6. data/README.rdoc +75 -0
  7. data/Rakefile +22 -0
  8. data/app/controllers/fcrepo_admin/audit_trail_controller.rb +17 -0
  9. data/app/controllers/fcrepo_admin/datastreams_controller.rb +29 -0
  10. data/app/controllers/fcrepo_admin/objects_controller.rb +14 -0
  11. data/app/helpers/application_helper.rb +2 -0
  12. data/app/mailers/.gitkeep +0 -0
  13. data/app/models/.gitkeep +0 -0
  14. data/app/views/fcrepo_admin/audit_trail/index.html.erb +34 -0
  15. data/app/views/fcrepo_admin/catalog/_datastreams.html.erb +19 -0
  16. data/app/views/fcrepo_admin/catalog/_show.html.erb +2 -0
  17. data/app/views/fcrepo_admin/datastreams/_content.html.erb +12 -0
  18. data/app/views/fcrepo_admin/datastreams/_datastreams.html +18 -0
  19. data/app/views/fcrepo_admin/datastreams/_profile.html.erb +10 -0
  20. data/app/views/fcrepo_admin/datastreams/index.html.erb +4 -0
  21. data/app/views/fcrepo_admin/datastreams/show.html.erb +22 -0
  22. data/app/views/fcrepo_admin/objects/_more_info.html.erb +6 -0
  23. data/app/views/fcrepo_admin/objects/_properties.html.erb +8 -0
  24. data/app/views/fcrepo_admin/objects/show.html.erb +18 -0
  25. data/config/locales/fcrepo_admin.en.yml +55 -0
  26. data/config/routes.rb +14 -0
  27. data/doc/README_FOR_APP +2 -0
  28. data/fcrepo_admin.gemspec +42 -0
  29. data/lib/assets/.gitkeep +0 -0
  30. data/lib/assets/stylesheets/fcrepo_admin/fcrepo_admin.css +4 -0
  31. data/lib/fcrepo_admin.rb +8 -0
  32. data/lib/fcrepo_admin/controller_behavior.rb +10 -0
  33. data/lib/fcrepo_admin/engine.rb +12 -0
  34. data/lib/fcrepo_admin/solr_document_extension.rb +49 -0
  35. data/lib/fcrepo_admin/version.rb +3 -0
  36. data/lib/tasks/.gitkeep +0 -0
  37. data/lib/tasks/fcrepo_admin.rake +24 -0
  38. data/script/rails +6 -0
  39. data/spec/controllers/audit_trail_controller_spec.rb +20 -0
  40. data/spec/controllers/datastreams_controller_spec.rb +21 -0
  41. data/spec/factories/fcrepo_admin_factories.rb +20 -0
  42. data/spec/factories/user_factories.rb +8 -0
  43. data/spec/features/audit_trail/index.html.erb_spec.rb +11 -0
  44. data/spec/features/catalog/show.html.erb_spec.rb +21 -0
  45. data/spec/features/datastreams/show.html.erb_spec.rb +31 -0
  46. data/spec/features/objects/show.html.erb_spec.rb +29 -0
  47. data/spec/fixtures/auditable.foxml.xml +110 -0
  48. data/spec/internal/README.rdoc +261 -0
  49. data/spec/internal/Rakefile +7 -0
  50. data/spec/internal/app/assets/javascripts/application.js +16 -0
  51. data/spec/internal/app/assets/stylesheets/application.css +13 -0
  52. data/spec/internal/app/assets/stylesheets/blacklight.css.scss +3 -0
  53. data/spec/internal/app/controllers/application_controller.rb +11 -0
  54. data/spec/internal/app/controllers/catalog_controller.rb +169 -0
  55. data/spec/internal/app/helpers/application_helper.rb +2 -0
  56. data/spec/internal/app/mailers/.gitkeep +0 -0
  57. data/spec/internal/app/models/.gitkeep +0 -0
  58. data/spec/internal/app/models/ability.rb +4 -0
  59. data/spec/internal/app/models/content_model.rb +12 -0
  60. data/spec/internal/app/models/solr_document.rb +36 -0
  61. data/spec/internal/app/models/user.rb +26 -0
  62. data/spec/internal/app/views/catalog/_show_default.html.erb +12 -0
  63. data/spec/internal/app/views/layouts/application.html.erb +14 -0
  64. data/spec/internal/config.ru +4 -0
  65. data/spec/internal/config/application.rb +59 -0
  66. data/spec/internal/config/boot.rb +10 -0
  67. data/spec/internal/config/database.yml +25 -0
  68. data/spec/internal/config/environment.rb +5 -0
  69. data/spec/internal/config/environments/development.rb +37 -0
  70. data/spec/internal/config/environments/production.rb +67 -0
  71. data/spec/internal/config/environments/test.rb +37 -0
  72. data/spec/internal/config/fedora.yml +12 -0
  73. data/spec/internal/config/initializers/backtrace_silencers.rb +7 -0
  74. data/spec/internal/config/initializers/devise.rb +240 -0
  75. data/spec/internal/config/initializers/hydra_config.rb +34 -0
  76. data/spec/internal/config/initializers/inflections.rb +15 -0
  77. data/spec/internal/config/initializers/mime_types.rb +12 -0
  78. data/spec/internal/config/initializers/secret_token.rb +7 -0
  79. data/spec/internal/config/initializers/session_store.rb +8 -0
  80. data/spec/internal/config/initializers/wrap_parameters.rb +14 -0
  81. data/spec/internal/config/locales/devise.en.yml +59 -0
  82. data/spec/internal/config/locales/en.yml +5 -0
  83. data/spec/internal/config/role_map_development.yml +6 -0
  84. data/spec/internal/config/role_map_test.yml +6 -0
  85. data/spec/internal/config/routes.rb +6 -0
  86. data/spec/internal/config/solr.yml +6 -0
  87. data/spec/internal/db/schema.rb +57 -0
  88. data/spec/internal/lib/assets/.gitkeep +0 -0
  89. data/spec/internal/log/.gitkeep +0 -0
  90. data/spec/internal/public/404.html +26 -0
  91. data/spec/internal/public/422.html +26 -0
  92. data/spec/internal/public/500.html +25 -0
  93. data/spec/internal/public/favicon.ico +0 -0
  94. data/spec/internal/script/rails +6 -0
  95. data/spec/spec_helper.rb +45 -0
  96. metadata +397 -0
data/config/routes.rb ADDED
@@ -0,0 +1,14 @@
1
+ FcrepoAdmin::Engine.routes.draw do
2
+
3
+ scope :module => "fcrepo_admin" do
4
+ resources :objects, :only => :show do
5
+ resources :datastreams, :only => [:index, :show] do
6
+ member do
7
+ get 'download'
8
+ end
9
+ end
10
+ resources :audit_trail, :only => :index
11
+ end
12
+ end
13
+
14
+ end
@@ -0,0 +1,2 @@
1
+ Use this README file to introduce your application and point to useful places in the API for learning more.
2
+ Run "rake doc:app" to generate API documentation for your models, controllers, helpers, and libraries.
@@ -0,0 +1,42 @@
1
+ $:.push File.expand_path("../lib", __FILE__)
2
+
3
+ # Maintain your gem's version:
4
+ require "fcrepo_admin/version"
5
+
6
+ # Describe your gem and declare its dependencies:
7
+ Gem::Specification.new do |s|
8
+ s.name = "fcrepo_admin"
9
+ s.version = FcrepoAdmin::VERSION
10
+ s.platform = Gem::Platform::RUBY
11
+ s.authors = ["David Chandek-Stark", "Jim Coble", "Chris Beer", "Justin Coyne"]
12
+ s.email = ["hydra-tech@googlegroups.com"]
13
+ s.homepage = "http://projecthydra.org"
14
+ s.summary = "Hydra-based Fedora Commons repository admin tool."
15
+ s.description = "A Rails engine for administrative access to a Fedora Commons repository based on the Hydra Project repository application framework."
16
+ s.license = "BSD Simplified"
17
+
18
+ s.required_ruby_version = '>= 1.9.3'
19
+
20
+ s.files = `git ls-files`.split("\n")
21
+ s.test_files = `git ls-files -- spec/*`.split("\n")
22
+
23
+ s.extra_rdoc_files = ["LICENSE", "README.rdoc"]
24
+
25
+ s.require_paths = ["lib"]
26
+
27
+ s.add_dependency "hydra-head", "6.0.0"
28
+ s.add_dependency "blacklight"
29
+ s.add_dependency "rails", "~> 3.2"
30
+ s.add_dependency "mime-types", '~> 1.19'
31
+
32
+ s.add_development_dependency "devise"
33
+ s.add_development_dependency "rspec"
34
+ s.add_development_dependency "rspec-rails"
35
+ s.add_development_dependency "capybara"
36
+ s.add_development_dependency "sqlite3"
37
+ s.add_development_dependency "factory_girl_rails"
38
+ s.add_development_dependency "jettywrapper"
39
+ s.add_development_dependency "jquery-rails"
40
+ s.add_development_dependency "sass-rails"
41
+ s.add_development_dependency "bootstrap-sass"
42
+ end
File without changes
@@ -0,0 +1,4 @@
1
+ #fcrepo-admin-dsprofile {
2
+ /* datastream profile table */
3
+ width: 40em;
4
+ }
@@ -0,0 +1,8 @@
1
+ require 'fcrepo_admin/engine'
2
+ require 'blacklight'
3
+ require 'hydra/head'
4
+
5
+ module FcrepoAdmin
6
+ autoload :SolrDocumentExtension, 'fcrepo_admin/solr_document_extension'
7
+ autoload :ControllerBehavior, 'fcrepo_admin/controller_behavior'
8
+ end
@@ -0,0 +1,10 @@
1
+ module FcrepoAdmin
2
+ module ControllerBehavior
3
+
4
+ def load_and_authz_object
5
+ @object = ActiveFedora::Base.find(params[:object_id], :cast => true)
6
+ authorize! :read, @object
7
+ end
8
+
9
+ end
10
+ end
@@ -0,0 +1,12 @@
1
+ module FcrepoAdmin
2
+ class Engine < ::Rails::Engine
3
+
4
+ config.generators do |g|
5
+ g.test_framework :rspec, :fixture => false
6
+ g.fixture_replacement :factory_girl, :dir => 'spec/factories'
7
+ g.assets false
8
+ g.helper false
9
+ end
10
+
11
+ end
12
+ end
@@ -0,0 +1,49 @@
1
+ require 'json'
2
+
3
+ module FcrepoAdmin
4
+ module SolrDocumentExtension
5
+
6
+ def object_profile
7
+ @object_profile ||= JSON.parse(self[ActiveFedora::Base.profile_solr_name].first)
8
+ end
9
+
10
+ def datastreams
11
+ object_profile["datastreams"]
12
+ end
13
+
14
+ def has_datastream?(dsID)
15
+ !datastreams[dsID].blank?
16
+ end
17
+
18
+ def has_admin_policy?
19
+ !admin_policy_uri.blank?
20
+ end
21
+
22
+ def admin_policy_uri
23
+ get ActiveFedora::SolrService.solr_name('is_governed_by', :symbol)
24
+ end
25
+
26
+ def admin_policy_pid
27
+ uri = admin_policy_uri
28
+ uri &&= ActiveFedora::Base.pids_from_uris(uri)
29
+ end
30
+
31
+ def has_parent?
32
+ !parent_uri
33
+ end
34
+
35
+ def parent_uri
36
+ get(ActiveFedora::SolrService.solr_name('is_part_of', :symbol)) || get(ActiveFedora::SolrService.solr_name('is_member_of', :symbol)) || get(ActiveFedora::SolrService.solr_name('is_member_of_collection', :symbol))
37
+ end
38
+
39
+ def parent_pid
40
+ uri = parent_uri
41
+ uri &&= ActiveFedora::Base.pids_from_uris(uri)
42
+ end
43
+
44
+ def active_fedora_model
45
+ get(ActiveFedora::SolrService.solr_name('active_fedora_model', :symbol))
46
+ end
47
+
48
+ end
49
+ end
@@ -0,0 +1,3 @@
1
+ module FcrepoAdmin
2
+ VERSION = "0.1.0"
3
+ end
File without changes
@@ -0,0 +1,24 @@
1
+ namespace :fcrepo_admin do
2
+ namespace :solr do
3
+ desc "Deletes everything from the Solr index"
4
+ task :clean => :environment do
5
+ Blacklight.solr.delete_by_query("*:*")
6
+ Blacklight.solr.commit
7
+ end
8
+ desc "Index a single object in solr specified by PID="
9
+ task :index => :environment do
10
+ raise "Must specify a pid. Ex: PID=changeme:12" unless ENV['PID']
11
+ ActiveFedora::Base.connection_for_pid('foo:1') # Loads Rubydora connection with fake object
12
+ ActiveFedora::Base.find(ENV['PID'], cast: true).update_index
13
+ end
14
+ desc 'Index all objects in the repository (except fedora-system: objects).'
15
+ task :index_all => :environment do
16
+ ActiveFedora::Base.connection_for_pid('foo:1') # Loads Rubydora connection with fake object
17
+ ActiveFedora::Base.fedora_connection[0].connection.search(nil) do |object|
18
+ if !object.pid.starts_with?('fedora-system:')
19
+ ActiveFedora::Base.find(object.pid, cast: true).update_index
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
data/script/rails ADDED
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+ # This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
3
+
4
+ APP_PATH = File.expand_path('../../config/application', __FILE__)
5
+ require File.expand_path('../../config/boot', __FILE__)
6
+ require 'rails/commands'
@@ -0,0 +1,20 @@
1
+ require 'spec_helper'
2
+
3
+ describe FcrepoAdmin::AuditTrailController do
4
+ context "#index" do
5
+ let(:object) { FactoryGirl.create(:content_model) }
6
+ after { object.delete }
7
+ it "should render the index template" do
8
+ get :index, :object_id => object, :use_route => 'fcrepo_admin'
9
+ response.should render_template(:index)
10
+ end
11
+ end
12
+ context "#index?download=true" do
13
+ context "object does not respond to audit_trail" do
14
+ subject { get :index, :object_id => object, :download => 'true', :use_route => 'fcrepo_admin' }
15
+ let(:object) { FactoryGirl.create(:content_model) }
16
+ after { object.delete }
17
+ its(:response_code) { should eq(200) }
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,21 @@
1
+ require 'spec_helper'
2
+
3
+ shared_examples "a datastream profile view" do
4
+ it { should render_template(:show) }
5
+ end
6
+
7
+ describe FcrepoAdmin::DatastreamsController do
8
+ after { object.delete }
9
+ context "#show" do
10
+ let(:object) { FactoryGirl.create(:content_model) }
11
+ let(:dsid) { "DC" }
12
+ context "profile information" do
13
+ subject { get :show, :object_id => object, :id => dsid, :use_route => 'fcrepo_admin' }
14
+ it { should render_template(:show) }
15
+ end
16
+ context "download content" do
17
+ subject { get :show, :object_id => object, :id => dsid, :download => 'true', :use_route => 'fcrepo_admin' }
18
+ it { should be_successful }
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,20 @@
1
+ FactoryGirl.define do
2
+
3
+ factory :admin_policy do
4
+ title "Test APO"
5
+ permissions [{type: 'group', name: 'public', access: 'read'}]
6
+ default_permissions [{type: 'group', name: 'public', access: 'read'}]
7
+ end
8
+
9
+ factory :content_model do
10
+ title "Test Object"
11
+ permissions [{type: 'group', name: 'public', access: 'read'}]
12
+
13
+ trait :has_apo do
14
+ admin_policy
15
+ end
16
+
17
+ factory :content_model_has_apo, :traits => [:has_apo]
18
+ end
19
+
20
+ end
@@ -0,0 +1,8 @@
1
+ FactoryGirl.define do
2
+
3
+ factory :user do
4
+ sequence(:email) { |n| "person#{n}@example.com" }
5
+ password 'b1gSecret'
6
+ end
7
+
8
+ end
@@ -0,0 +1,11 @@
1
+ require 'spec_helper'
2
+
3
+ describe "audit_trail/index.html.erb" do
4
+ let(:object) { FactoryGirl.create(:content_model) }
5
+ after { object.delete }
6
+ it "should display the audit trail" do
7
+ visit fcrepo_admin.object_audit_trail_index_path(object)
8
+ page.should have_content(object.pid)
9
+ page.should have_link(I18n.t("fcrepo_admin.audit_trail.download"), :href => "#{fcrepo_admin.object_audit_trail_index_path(object)}?download=true")
10
+ end
11
+ end
@@ -0,0 +1,21 @@
1
+ require 'spec_helper'
2
+
3
+ describe "catalog/show.html.erb" do
4
+ after { object.delete }
5
+ context "basic object" do
6
+ let(:object) { FactoryGirl.create(:content_model) }
7
+ it "should link to all datastreams" do
8
+ visit catalog_path(object)
9
+ object.datastreams.reject { |dsid, ds| ds.profile.empty? }.each_key do |dsid|
10
+ page.should have_link(dsid, :href => fcrepo_admin.object_datastream_path(object, dsid))
11
+ end
12
+ end
13
+ it "should link to its audit trail" do
14
+ visit catalog_path(object)
15
+ page.should have_link(I18n.t("fcrepo_admin.audit_trail.title"))
16
+ end
17
+ end
18
+ context "object has admin policy" do
19
+ it "should link to the APO"
20
+ end
21
+ end
@@ -0,0 +1,31 @@
1
+ require 'spec_helper'
2
+
3
+ shared_examples "a datastream show page" do
4
+ it "should display all attributes of the datastream profile" do
5
+ object.datastreams[dsid].profile.each do |key, value|
6
+ expect(subject).to have_content(I18n.t("fcrepo_admin.datastream.profile.#{key}"))
7
+ expect(subject).to have_content(value)
8
+ end
9
+ end
10
+ it "should have a link to download the datastream content" do
11
+ expect(subject).to have_link(I18n.t("fcrepo_admin.datastream.download"), :href => fcrepo_admin.download_object_datastream_path(object, dsid))
12
+ end
13
+ end
14
+
15
+ shared_examples "an object having datastream show pages" do
16
+ it_behaves_like "a datastream show page" do
17
+ let(:dsid) { "DC" }
18
+ end
19
+ it_behaves_like "a datastream show page" do
20
+ let(:dsid) { "RELS-EXT" }
21
+ end
22
+ end
23
+
24
+ describe "datastreams/show.html.erb" do
25
+ subject { page }
26
+ before { visit fcrepo_admin.object_datastream_path(object, dsid) }
27
+ after { object.delete }
28
+ it_behaves_like "an object having datastream show pages" do
29
+ let(:object) { FactoryGirl.create(:content_model) }
30
+ end
31
+ end
@@ -0,0 +1,29 @@
1
+ require 'spec_helper'
2
+
3
+ describe "objects/show.html.erb" do
4
+ after { object.delete }
5
+ context "basic object" do
6
+ let(:object) { FactoryGirl.create(:content_model) }
7
+ it "should display the object's properties" do
8
+ visit fcrepo_admin.object_path(object)
9
+ page.should have_content(I18n.t("fcrepo_admin.object.properties.keys.state"))
10
+ page.should have_content(I18n.t("fcrepo_admin.object.properties.keys.create_date"))
11
+ page.should have_content(I18n.t("fcrepo_admin.object.properties.keys.modified_date"))
12
+ page.should have_content(I18n.t("fcrepo_admin.object.properties.keys.owner_id"))
13
+ page.should have_content(I18n.t("fcrepo_admin.object.properties.keys.label"))
14
+ end
15
+ it "should link to all datastreams" do
16
+ visit fcrepo_admin.object_path(object)
17
+ object.datastreams.reject { |dsid, ds| ds.profile.empty? }.each_key do |dsid|
18
+ page.should have_link(dsid, :href => fcrepo_admin.object_datastream_path(object, dsid))
19
+ end
20
+ end
21
+ it "should link to its audit trail" do
22
+ visit fcrepo_admin.object_path(object)
23
+ page.should have_link(I18n.t("fcrepo_admin.audit_trail.title"), :href => fcrepo_admin.object_audit_trail_index_path(object))
24
+ end
25
+ context "object governed by an admin policy" do
26
+ it "should link to the APO"
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,110 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <foxml:digitalObject VERSION="1.1" PID="changeme:242"
3
+ xmlns:foxml="info:fedora/fedora-system:def/foxml#"
4
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5
+ xsi:schemaLocation="info:fedora/fedora-system:def/foxml# http://www.fedora.info/definitions/1/0/foxml1-1.xsd">
6
+ <foxml:objectProperties>
7
+ <foxml:property NAME="info:fedora/fedora-system:def/model#state" VALUE="Active"/>
8
+ <foxml:property NAME="info:fedora/fedora-system:def/model#label" VALUE=""/>
9
+ <foxml:property NAME="info:fedora/fedora-system:def/model#ownerId" VALUE="fedoraAdmin"/>
10
+ <foxml:property NAME="info:fedora/fedora-system:def/model#createdDate" VALUE="2013-02-25T16:43:05.802Z"/>
11
+ <foxml:property NAME="info:fedora/fedora-system:def/view#lastModifiedDate" VALUE="2013-02-25T16:43:06.379Z"/>
12
+ </foxml:objectProperties>
13
+ <foxml:datastream ID="AUDIT" STATE="A" CONTROL_GROUP="X" VERSIONABLE="false">
14
+ <foxml:datastreamVersion ID="AUDIT.0" LABEL="Audit Trail for this object" CREATED="2013-02-25T16:43:05.802Z" MIMETYPE="text/xml" FORMAT_URI="info:fedora/fedora-system:format/xml.fedora.audit">
15
+ <foxml:xmlContent>
16
+ <audit:auditTrail xmlns:audit="info:fedora/fedora-system:def/audit#">
17
+ <audit:record ID="AUDREC1">
18
+ <audit:process type="Fedora API-M"/>
19
+ <audit:action>addDatastream</audit:action>
20
+ <audit:componentID>RELS-EXT</audit:componentID>
21
+ <audit:responsibility>fedoraAdmin</audit:responsibility>
22
+ <audit:date>2013-02-25T16:43:06.219Z</audit:date>
23
+ <audit:justification></audit:justification>
24
+ </audit:record>
25
+ <audit:record ID="AUDREC2">
26
+ <audit:process type="Fedora API-M"/>
27
+ <audit:action>addDatastream</audit:action>
28
+ <audit:componentID>descMetadata</audit:componentID>
29
+ <audit:responsibility>fedoraAdmin</audit:responsibility>
30
+ <audit:date>2013-02-25T16:43:06.315Z</audit:date>
31
+ <audit:justification></audit:justification>
32
+ </audit:record>
33
+ <audit:record ID="AUDREC3">
34
+ <audit:process type="Fedora API-M"/>
35
+ <audit:action>addDatastream</audit:action>
36
+ <audit:componentID>rightsMetadata</audit:componentID>
37
+ <audit:responsibility>fedoraAdmin</audit:responsibility>
38
+ <audit:date>2013-02-25T16:43:06.379Z</audit:date>
39
+ <audit:justification></audit:justification>
40
+ </audit:record>
41
+ </audit:auditTrail>
42
+ </foxml:xmlContent>
43
+ </foxml:datastreamVersion>
44
+ </foxml:datastream>
45
+ <foxml:datastream ID="DC" STATE="A" CONTROL_GROUP="X" VERSIONABLE="true">
46
+ <foxml:datastreamVersion ID="DC1.0" LABEL="Dublin Core Record for this object" CREATED="2013-02-25T16:43:05.802Z" MIMETYPE="text/xml" FORMAT_URI="http://www.openarchives.org/OAI/2.0/oai_dc/" SIZE="341">
47
+ <foxml:contentDigest TYPE="SHA-256" DIGEST="eb075bf6da5903e54464631dc998f66f95bffde9f4137132796457d31de5cd44"/>
48
+ <foxml:xmlContent>
49
+ <oai_dc:dc xmlns:oai_dc="http://www.openarchives.org/OAI/2.0/oai_dc/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/oai_dc/ http://www.openarchives.org/OAI/2.0/oai_dc.xsd">
50
+ <dc:identifier>changeme:242</dc:identifier>
51
+ </oai_dc:dc>
52
+ </foxml:xmlContent>
53
+ </foxml:datastreamVersion>
54
+ </foxml:datastream>
55
+ <foxml:datastream ID="RELS-EXT" STATE="A" CONTROL_GROUP="X" VERSIONABLE="true">
56
+ <foxml:datastreamVersion ID="RELS-EXT.0" LABEL="Fedora Object-to-Object Relationship Metadata" CREATED="2013-02-25T16:43:06.219Z" MIMETYPE="application/rdf+xml" SIZE="284">
57
+ <foxml:contentDigest TYPE="SHA-256" DIGEST="013d2229de7bd91c61256563eff1b475cd1e8f7e45a2f15de5a36f2d20ec2852"/>
58
+ <foxml:xmlContent>
59
+ <rdf:RDF xmlns:ns0="info:fedora/fedora-system:def/model#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
60
+ <rdf:Description rdf:about="info:fedora/changeme:242">
61
+ <ns0:hasModel rdf:resource="info:fedora/afmodel:TestModel"></ns0:hasModel>
62
+ </rdf:Description>
63
+ </rdf:RDF>
64
+ </foxml:xmlContent>
65
+ </foxml:datastreamVersion>
66
+ </foxml:datastream>
67
+ <foxml:datastream ID="descMetadata" STATE="A" CONTROL_GROUP="X" VERSIONABLE="true">
68
+ <foxml:datastreamVersion ID="descMetadata.0" LABEL="" CREATED="2013-02-25T16:43:06.315Z" MIMETYPE="text/xml" SIZE="215">
69
+ <foxml:contentDigest TYPE="SHA-256" DIGEST="3f588eca58dea77b31c9ed0b90e4560288a419856c4bb744fab9c7fe8749ad19"/>
70
+ <foxml:xmlContent>
71
+ <dc xmlns:dcterms="http://purl.org/dc/terms/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
72
+ <dcterms:title>Fcrepo Test Object</dcterms:title>
73
+ <dcterms:identifier>test00001</dcterms:identifier>
74
+ </dc>
75
+ </foxml:xmlContent>
76
+ </foxml:datastreamVersion>
77
+ </foxml:datastream>
78
+ <foxml:datastream ID="rightsMetadata" STATE="A" CONTROL_GROUP="X" VERSIONABLE="true">
79
+ <foxml:datastreamVersion ID="rightsMetadata.0" LABEL="" CREATED="2013-02-25T16:43:06.379Z" MIMETYPE="text/xml" SIZE="596">
80
+ <foxml:contentDigest TYPE="SHA-256" DIGEST="472f8634b31bd425dadd9206531ab02a70c08c22e4250bb2b0d3dd0314cfb240"/>
81
+ <foxml:xmlContent>
82
+ <rightsMetadata xmlns="http://hydra-collab.stanford.edu/schemas/rightsMetadata/v1" version="0.1">
83
+ <copyright>
84
+ <human type="title"></human>
85
+ <human type="description"></human>
86
+ <machine type="uri"></machine>
87
+ </copyright>
88
+ <access type="discover">
89
+ <human></human>
90
+ <machine></machine>
91
+ </access>
92
+ <access type="read">
93
+ <human></human>
94
+ <machine>
95
+ <group>public</group>
96
+ </machine>
97
+ </access>
98
+ <access type="edit">
99
+ <human></human>
100
+ <machine></machine>
101
+ </access>
102
+ <embargo>
103
+ <human></human>
104
+ <machine></machine>
105
+ </embargo>
106
+ </rightsMetadata>
107
+ </foxml:xmlContent>
108
+ </foxml:datastreamVersion>
109
+ </foxml:datastream>
110
+ </foxml:digitalObject>