dor-services 2.2.4 → 4.4.10
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +15 -0
- data/bin/dor-indexer +108 -0
- data/bin/dor-indexerd +73 -0
- data/bin/nokogiri +19 -0
- data/bin/rake +19 -0
- data/bin/ruby_noexec_wrapper +14 -0
- data/bin/solrizer +19 -0
- data/bin/solrizerd +19 -0
- data/config/certs/README +1 -0
- data/config/config_defaults.yml +62 -0
- data/config/dev_console_env.rb.example +67 -0
- data/config/predicate_mappings.yml +55 -0
- data/lib/dor-services.rb +152 -19
- data/lib/dor/config.rb +133 -35
- data/lib/dor/datastreams/administrative_metadata_ds.rb +84 -0
- data/lib/dor/datastreams/content_metadata_ds.rb +337 -0
- data/lib/dor/datastreams/datastream_spec_solrizer.rb +18 -0
- data/lib/dor/datastreams/default_object_rights_ds.rb +52 -0
- data/lib/dor/datastreams/desc_metadata_ds.rb +39 -0
- data/lib/{datastreams → dor/datastreams}/embargo_metadata_ds.rb +25 -20
- data/lib/{datastreams → dor/datastreams}/events_ds.rb +14 -9
- data/lib/dor/datastreams/identity.xsl +8 -0
- data/lib/dor/datastreams/identity_metadata_ds.rb +112 -0
- data/lib/dor/datastreams/role_metadata_ds.rb +51 -0
- data/lib/dor/datastreams/simple_dublin_core_ds.rb +45 -0
- data/lib/dor/datastreams/version_metadata_ds.rb +214 -0
- data/lib/dor/datastreams/workflow_definition_ds.rb +113 -0
- data/lib/dor/datastreams/workflow_ds.rb +103 -0
- data/lib/dor/exceptions.rb +0 -1
- data/lib/dor/migrations/content_metadata_ds/change_content_type.rb +7 -0
- data/lib/dor/migrations/identifiable/assert_adminPolicy.rb +9 -0
- data/lib/dor/migrations/identifiable/fix_model_assertions.rb +13 -0
- data/lib/dor/migrations/identifiable/record_remediation.rb +18 -0
- data/lib/dor/migrations/identifiable/uriify_augmented_contentlocation_refs.rb +18 -0
- data/lib/dor/migrations/identifiable/uriify_contentlocation_refs.rb +18 -0
- data/lib/dor/migrations/processable/unify_workflows.rb +17 -0
- data/lib/dor/migrations/versionable/add_missing_version_md.rb +9 -0
- data/lib/dor/models/admin_policy_object.rb +16 -0
- data/lib/dor/models/assembleable.rb +14 -0
- data/lib/dor/models/collection.rb +14 -0
- data/lib/dor/models/contentable.rb +227 -0
- data/lib/dor/models/describable.rb +194 -0
- data/lib/dor/models/discoverable.rb +66 -0
- data/lib/dor/models/editable.rb +267 -0
- data/lib/dor/models/embargoable.rb +97 -0
- data/lib/dor/models/eventable.rb +12 -0
- data/lib/dor/models/governable.rb +162 -0
- data/lib/dor/models/identifiable.rb +211 -0
- data/lib/dor/models/item.rb +44 -0
- data/lib/dor/models/itemizable.rb +66 -0
- data/lib/dor/{mods2dc.xslt → models/mods2dc.xslt} +39 -12
- data/lib/dor/models/preservable.rb +50 -0
- data/lib/dor/models/processable.rb +229 -0
- data/lib/dor/models/publishable.rb +74 -0
- data/lib/dor/models/set.rb +12 -0
- data/lib/dor/models/shelvable.rb +27 -0
- data/lib/dor/models/upgradable.rb +74 -0
- data/lib/dor/models/versionable.rb +94 -0
- data/lib/dor/models/workflow_object.rb +54 -0
- data/lib/dor/services/cleanup_service.rb +47 -0
- data/lib/dor/services/digital_stacks_service.rb +55 -0
- data/lib/dor/services/merge_service.rb +96 -0
- data/lib/dor/{metadata_handlers → services/metadata_handlers}/catalog_handler.rb +0 -2
- data/lib/dor/{metadata_handlers → services/metadata_handlers}/mdtoolkit_handler.rb +0 -2
- data/lib/dor/{metadata_service.rb → services/metadata_service.rb} +1 -3
- data/lib/dor/services/registration_service.rb +181 -0
- data/lib/dor/services/sdr_ingest_service.rb +181 -0
- data/lib/dor/services/search_service.rb +131 -0
- data/lib/dor/services/suri_service.rb +32 -0
- data/lib/dor/services/technical_metadata_service.rb +226 -0
- data/lib/dor/{tei2dc.xslt → services/tei2dc.xslt} +0 -0
- data/lib/dor/utils/ng_tidy.rb +37 -0
- data/lib/dor/utils/predicate_patch.rb +23 -0
- data/lib/dor/utils/solr_doc_helper.rb +9 -0
- data/lib/dor/utils/utc_date_field_mapper.rb +7 -0
- data/lib/dor/version.rb +3 -0
- data/lib/dor/workflow/document.rb +131 -0
- data/lib/dor/workflow/graph.rb +166 -0
- data/lib/dor/workflow/process.rb +99 -0
- data/lib/gsearch/demoFoxmlToSolr.xslt +340 -122
- data/lib/tasks/dor.rake +39 -0
- metadata +494 -384
- data/lib/datastreams/content_metadata_ds.rb +0 -12
- data/lib/datastreams/identity_metadata_ds.rb +0 -28
- data/lib/datastreams/ng_tidy.rb +0 -19
- data/lib/datastreams/simple_dublin_core_ds.rb +0 -23
- data/lib/datastreams/workflow_definition_ds.rb +0 -105
- data/lib/datastreams/workflow_ds.rb +0 -16
- data/lib/dor/admin_policy_object.rb +0 -11
- data/lib/dor/base.rb +0 -81
- data/lib/dor/cleanup_service.rb +0 -32
- data/lib/dor/digital_stacks_service.rb +0 -82
- data/lib/dor/druid_utils.rb +0 -41
- data/lib/dor/embargo.rb +0 -41
- data/lib/dor/item.rb +0 -141
- data/lib/dor/provenance_metadata_service.rb +0 -65
- data/lib/dor/registration_service.rb +0 -87
- data/lib/dor/rsolr.rb +0 -27
- data/lib/dor/sdr_ingest_service.rb +0 -117
- data/lib/dor/search_service.rb +0 -86
- data/lib/dor/suri_service.rb +0 -37
- data/lib/dor/workflow_object.rb +0 -13
- data/lib/dor/workflow_service.rb +0 -111
- data/lib/xml_models/foxml.rb +0 -261
- data/lib/xml_models/identity_metadata/dublin_core.rb +0 -119
- data/lib/xml_models/identity_metadata/identity_metadata.rb +0 -288
@@ -0,0 +1,18 @@
|
|
1
|
+
module DatastreamSpecSolrizer
|
2
|
+
extend ActiveSupport::Concern
|
3
|
+
include SolrDocHelper
|
4
|
+
|
5
|
+
def datastream_spec_string
|
6
|
+
s = begin
|
7
|
+
controlGroup == 'E' ? content.to_s.length : size
|
8
|
+
rescue
|
9
|
+
0
|
10
|
+
end
|
11
|
+
v = versionID.nil? ? '0' : versionID.to_s.split(/\./).last
|
12
|
+
[dsid,controlGroup,mimeType,v,s,label].join("|")
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
class ActiveFedora::Datastream
|
17
|
+
include DatastreamSpecSolrizer
|
18
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
module Dor
|
2
|
+
class DefaultObjectRightsDS < ActiveFedora::OmDatastream
|
3
|
+
|
4
|
+
set_terminology do |t|
|
5
|
+
t.root :path => 'rightsMetadata', :index_as => [:not_searchable]
|
6
|
+
t.copyright :path => 'copyright/human', :index_as => [:facetable]
|
7
|
+
t.use_statement :path => '/use/human[@type=\'useAndReproduction\']', :index_as => [:facetable]
|
8
|
+
|
9
|
+
t.use do
|
10
|
+
t.machine
|
11
|
+
t.human
|
12
|
+
end
|
13
|
+
|
14
|
+
t.creative_commons :path => '/use/machine', :type => 'creativeCommons'
|
15
|
+
t.creative_commons_human :path => '/use/human[@type=\'creativeCommons\']'
|
16
|
+
|
17
|
+
|
18
|
+
end
|
19
|
+
|
20
|
+
define_template :creative_commons do |xml|
|
21
|
+
xml.use {
|
22
|
+
xml.human(:type => "creativeCommons")
|
23
|
+
xml.machine(:type => "creativeCommons")
|
24
|
+
}
|
25
|
+
end
|
26
|
+
def self.xml_template
|
27
|
+
Nokogiri::XML::Builder.new do |xml|
|
28
|
+
xml.rightsMetadata{
|
29
|
+
xml.access(:type => 'discover'){
|
30
|
+
xml.machine{
|
31
|
+
xml.world
|
32
|
+
}
|
33
|
+
}
|
34
|
+
xml.access(:type => 'read'){
|
35
|
+
xml.machine{
|
36
|
+
xml.world
|
37
|
+
}
|
38
|
+
}
|
39
|
+
xml.use{
|
40
|
+
xml.human(:type => 'useAndReproduction')
|
41
|
+
xml.human(:type => "creativeCommons")
|
42
|
+
xml.machine(:type => "creativeCommons")
|
43
|
+
}
|
44
|
+
xml.copyright{
|
45
|
+
xml.human
|
46
|
+
}
|
47
|
+
|
48
|
+
}
|
49
|
+
end.doc
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module Dor
|
2
|
+
class DescMetadataDS < ActiveFedora::OmDatastream
|
3
|
+
include SolrDocHelper
|
4
|
+
|
5
|
+
MODS_NS = 'http://www.loc.gov/mods/v3'
|
6
|
+
set_terminology do |t|
|
7
|
+
t.root :path => 'mods', :xmlns => MODS_NS, :index_as => [:not_searchable]
|
8
|
+
t.originInfo :index_as => [:not_searchable] do
|
9
|
+
t.publisher :index_as => [:searchable, :displayable]
|
10
|
+
t.place :index_as => [:not_searchable] do
|
11
|
+
t.placeTerm :attributes => {:type => 'text'}, :index_as => [:searchable, :displayable]
|
12
|
+
end
|
13
|
+
end
|
14
|
+
t.title_info(:path=>"titleInfo") {
|
15
|
+
t.main_title(:index_as=>[:facetable],:path=>"title", :label=>"title") {
|
16
|
+
t.main_title_lang(:path=>{:attribute=> "xml:lang"})
|
17
|
+
}
|
18
|
+
}
|
19
|
+
t.coordinates :index_as => [:searchable]
|
20
|
+
t.extent :index_as => [:searchable]
|
21
|
+
t.scale :index_as => [:searchable]
|
22
|
+
t.topic :index_as => [:searchable]
|
23
|
+
t.abstract :index_as=>[:displayable]
|
24
|
+
end
|
25
|
+
|
26
|
+
def self.xml_template
|
27
|
+
Nokogiri::XML::Builder.new do |xml|
|
28
|
+
xml.mods( 'xmlns' => 'http://www.loc.gov/mods/v3', 'xmlns:xsi' => 'http://www.w3.org/2001/XMLSchema-instance',:version => '3.3', "xsi:schemaLocation" => 'http://www.loc.gov/mods/v3 http://www.loc.gov/standards/mods/v3/mods-3-3.xsd'){
|
29
|
+
xml.titleInfo{
|
30
|
+
xml.title
|
31
|
+
}
|
32
|
+
}
|
33
|
+
end.doc
|
34
|
+
end
|
35
|
+
|
36
|
+
|
37
|
+
|
38
|
+
end
|
39
|
+
end
|
@@ -1,17 +1,16 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
1
|
+
module Dor
|
2
|
+
class EmbargoMetadataDS < ActiveFedora::OmDatastream
|
3
|
+
include SolrDocHelper
|
4
4
|
|
5
|
-
|
5
|
+
before_create :ensure_non_versionable
|
6
6
|
|
7
7
|
set_terminology do |t|
|
8
|
-
t.root(:path => "embargoMetadata"
|
9
|
-
t.status(:
|
10
|
-
t.release_date(:path => "releaseDate"
|
11
|
-
t.
|
12
|
-
t.
|
13
|
-
|
14
|
-
t.release_access(:path => "releaseAccess", :namespace_prefix => nil)
|
8
|
+
t.root(:path => "embargoMetadata")
|
9
|
+
t.status(:index_as => [:searchable, :facetable])
|
10
|
+
t.release_date(:path => "releaseDate")
|
11
|
+
t.release_access(:path => "releaseAccess")
|
12
|
+
t.twenty_pct_status( :path => "twentyPctVisibilityStatus", :index_as => [:searchable, :facetable])
|
13
|
+
t.twenty_pct_release_date(:path => "twentyPctVisibilityReleaseDate")
|
15
14
|
end
|
16
15
|
|
17
16
|
# Default EmbargoMetadataDS xml
|
@@ -28,9 +27,16 @@ class EmbargoMetadataDS < ActiveFedora::NokogiriDatastream
|
|
28
27
|
return builder.doc
|
29
28
|
end
|
30
29
|
|
31
|
-
def
|
30
|
+
def to_solr solr_doc = {}, *args
|
32
31
|
super
|
33
|
-
|
32
|
+
add_solr_value(solr_doc, 'embargo_release_date', self.release_date.utc.strftime('%FT%TZ') , :date, [:searchable]) rescue nil
|
33
|
+
add_solr_value(solr_doc, 'twenty_pct_visibility_release_date', self.twenty_pct_release_date.utc.strftime('%FT%TZ') , :date, [:searchable]) rescue nil
|
34
|
+
|
35
|
+
solr_doc
|
36
|
+
end
|
37
|
+
|
38
|
+
def ensure_non_versionable
|
39
|
+
self.versionable = "false"
|
34
40
|
end
|
35
41
|
|
36
42
|
#################################################################################
|
@@ -40,7 +46,6 @@ class EmbargoMetadataDS < ActiveFedora::NokogiriDatastream
|
|
40
46
|
|
41
47
|
def status=(new_status)
|
42
48
|
update_values([:status] => new_status)
|
43
|
-
self.dirty = true
|
44
49
|
end
|
45
50
|
|
46
51
|
def status
|
@@ -50,8 +55,8 @@ class EmbargoMetadataDS < ActiveFedora::NokogiriDatastream
|
|
50
55
|
# Sets the release date. Converts the date to beginning-of-day, UTC to help with Solr indexing
|
51
56
|
# @param [Time] rd A Time object represeting the release date. By default, it is set to now
|
52
57
|
def release_date=(rd=Time.now)
|
53
|
-
|
54
|
-
self.
|
58
|
+
update_values([:release_date] => rd.beginning_of_day.utc.xmlschema)
|
59
|
+
self.content=self.ng_xml.to_s
|
55
60
|
end
|
56
61
|
|
57
62
|
# Current releaseDate value
|
@@ -62,7 +67,7 @@ class EmbargoMetadataDS < ActiveFedora::NokogiriDatastream
|
|
62
67
|
|
63
68
|
def twenty_pct_status=(new_status)
|
64
69
|
update_values([:twenty_pct_status] => new_status)
|
65
|
-
|
70
|
+
content_will_change!
|
66
71
|
end
|
67
72
|
|
68
73
|
def twenty_pct_status
|
@@ -73,7 +78,7 @@ class EmbargoMetadataDS < ActiveFedora::NokogiriDatastream
|
|
73
78
|
# @param [Time] rd A Time object represeting the release date. By default, it is set to now
|
74
79
|
def twenty_pct_release_date=(rd=Time.now)
|
75
80
|
update_values([:twenty_pct_release_date] => rd.beginning_of_day.utc.xmlschema)
|
76
|
-
|
81
|
+
content_will_change!
|
77
82
|
end
|
78
83
|
|
79
84
|
# Current twentyPctVisibilityReleaseDate value
|
@@ -93,7 +98,7 @@ class EmbargoMetadataDS < ActiveFedora::NokogiriDatastream
|
|
93
98
|
end
|
94
99
|
|
95
100
|
# Sets the embargaAccess node
|
96
|
-
# @param [Nokogiri::XML::Document]
|
101
|
+
# @param [Nokogiri::XML::Document] new_doc Document that will replace the existing releaseAccess node
|
97
102
|
def release_access_node=(new_doc)
|
98
103
|
if(new_doc.root.name != 'releaseAccess')
|
99
104
|
raise "Trying to replace releaseAccess with a non-releaseAccess document"
|
@@ -101,7 +106,7 @@ class EmbargoMetadataDS < ActiveFedora::NokogiriDatastream
|
|
101
106
|
|
102
107
|
term_value_delete(:select => '//embargoMetadata/releaseAccess')
|
103
108
|
ng_xml.root.add_child(new_doc.root.clone)
|
104
|
-
self.dirty = true
|
105
109
|
end
|
106
110
|
|
107
111
|
end
|
112
|
+
end
|
@@ -1,10 +1,15 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
1
|
+
module Dor
|
2
|
+
class EventsDS < ActiveFedora::OmDatastream
|
3
|
+
before_create :ensure_non_versionable
|
4
4
|
|
5
5
|
set_terminology do |t|
|
6
|
-
t.root(:path => "events"
|
7
|
-
t.event
|
6
|
+
t.root(:path => "events")
|
7
|
+
t.event do
|
8
|
+
t.who :path => { :attribute => "who" }, :index_as => [:displayable, :not_searchable]
|
9
|
+
t.type_ :path => { :attribute => "type" }, :index_as => [:displayable, :not_searchable]
|
10
|
+
t.when :path => { :attribute => "when" }, :index_as => [:displayable, :not_searchable], :data_type => :date
|
11
|
+
t.message :path => "text()", :index_as => [:displayable, :not_searchable]
|
12
|
+
end
|
8
13
|
end
|
9
14
|
|
10
15
|
# Default EventsDS xml
|
@@ -15,9 +20,8 @@ class EventsDS < ActiveFedora::NokogiriDatastream
|
|
15
20
|
return builder.doc
|
16
21
|
end
|
17
22
|
|
18
|
-
def
|
19
|
-
|
20
|
-
@attributes[:versionable] = false
|
23
|
+
def ensure_non_versionable
|
24
|
+
self.versionable = "false"
|
21
25
|
end
|
22
26
|
|
23
27
|
# Adds an event to the datastream
|
@@ -28,7 +32,7 @@ class EventsDS < ActiveFedora::NokogiriDatastream
|
|
28
32
|
ev = ng_xml.create_element "event", message,
|
29
33
|
:type => type, :who => who, :when => Time.now.xmlschema
|
30
34
|
ng_xml.root.add_child(ev)
|
31
|
-
|
35
|
+
content_will_change!
|
32
36
|
end
|
33
37
|
|
34
38
|
# Finds events with the desired type attribute
|
@@ -55,4 +59,5 @@ class EventsDS < ActiveFedora::NokogiriDatastream
|
|
55
59
|
end
|
56
60
|
end
|
57
61
|
|
62
|
+
end
|
58
63
|
end
|
@@ -0,0 +1,8 @@
|
|
1
|
+
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
|
2
|
+
<xsl:output omit-xml-declaration="yes" indent="yes"/>
|
3
|
+
<xsl:template match="node()|@*">
|
4
|
+
<xsl:copy>
|
5
|
+
<xsl:apply-templates select="node()|@*"/>
|
6
|
+
</xsl:copy>
|
7
|
+
</xsl:template>
|
8
|
+
</xsl:stylesheet>
|
@@ -0,0 +1,112 @@
|
|
1
|
+
module Dor
|
2
|
+
class IdentityMetadataDS < ActiveFedora::OmDatastream
|
3
|
+
include SolrDocHelper
|
4
|
+
|
5
|
+
set_terminology do |t|
|
6
|
+
t.root(:path=>"identityMetadata")
|
7
|
+
t.objectId :index_as => [:searchable]
|
8
|
+
t.objectType :index_as => [:searchable, :facetable]
|
9
|
+
t.objectLabel
|
10
|
+
t.citationCreator
|
11
|
+
t.sourceId
|
12
|
+
t.otherId(:path => 'otherId') do
|
13
|
+
t.name_(:path => { :attribute => 'name' })
|
14
|
+
end
|
15
|
+
t.agreementId :index_as => [:searchable, :facetable]
|
16
|
+
t.tag :index_as => [:searchable, :facetable]
|
17
|
+
t.citationTitle
|
18
|
+
t.objectCreator :index_as => [:searchable, :facetable]
|
19
|
+
t.adminPolicy :index_as => [:not_searchable]
|
20
|
+
end
|
21
|
+
|
22
|
+
define_template :value do |builder,name,value,attrs|
|
23
|
+
builder.send(name.to_sym, value, attrs)
|
24
|
+
end
|
25
|
+
|
26
|
+
def self.xml_template
|
27
|
+
Nokogiri::XML('<identityMetadata/>')
|
28
|
+
end #self.xml_template
|
29
|
+
|
30
|
+
def add_value(name, value, attrs={})
|
31
|
+
add_child_node(ng_xml.root, :value, name, value, attrs)
|
32
|
+
end
|
33
|
+
|
34
|
+
def objectId
|
35
|
+
self.find_by_terms(:objectId).text
|
36
|
+
end
|
37
|
+
|
38
|
+
def sourceId
|
39
|
+
node = self.find_by_terms(:sourceId).first
|
40
|
+
node ? [node['source'],node.text].join(':') : nil
|
41
|
+
end
|
42
|
+
|
43
|
+
def sourceId=(value)
|
44
|
+
node = self.find_by_terms(:sourceId).first
|
45
|
+
unless value.present?
|
46
|
+
node.remove unless node.nil?
|
47
|
+
nil
|
48
|
+
else
|
49
|
+
(source,val) = value.split(/:/,2)
|
50
|
+
unless source.present? and value.present?
|
51
|
+
raise ArgumentError, "Source ID must follow the format namespace:value"
|
52
|
+
end
|
53
|
+
node = ng_xml.root.add_child('<sourceId/>').first if node.nil?
|
54
|
+
node['source'] = source
|
55
|
+
node.content = val
|
56
|
+
node
|
57
|
+
end
|
58
|
+
end
|
59
|
+
def tags()
|
60
|
+
result=[]
|
61
|
+
self.ng_xml.search('//tag').each do |node|
|
62
|
+
result << node.content
|
63
|
+
end
|
64
|
+
result
|
65
|
+
end
|
66
|
+
def otherId(type = nil)
|
67
|
+
result = self.find_by_terms(:otherId).to_a
|
68
|
+
if type.nil?
|
69
|
+
result.collect { |n| [n['name'],n.text].join(':') }
|
70
|
+
else
|
71
|
+
result.select { |n| n['name'] == type }.collect { |n| n.text }
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
def add_otherId(other_id)
|
76
|
+
(name,val) = other_id.split(/:/,2)
|
77
|
+
node = ng_xml.root.add_child('<otherId/>').first
|
78
|
+
node['name'] = name
|
79
|
+
node.content = val
|
80
|
+
node
|
81
|
+
end
|
82
|
+
|
83
|
+
def to_solr(solr_doc=Hash.new, *args)
|
84
|
+
super(solr_doc, *args)
|
85
|
+
if digital_object.respond_to?(:profile)
|
86
|
+
digital_object.profile.each_pair do |property,value|
|
87
|
+
add_solr_value(solr_doc, property.underscore, value, property =~ /Date/ ? :date : :string, [:searchable])
|
88
|
+
end
|
89
|
+
end
|
90
|
+
if sourceId.present?
|
91
|
+
(name,id) = sourceId.split(/:/,2)
|
92
|
+
add_solr_value(solr_doc, "dor_id", id, :string, [:searchable])
|
93
|
+
add_solr_value(solr_doc, "identifier", sourceId, :string, [:searchable])
|
94
|
+
add_solr_value(solr_doc, "source_id", sourceId, :string, [:searchable])
|
95
|
+
end
|
96
|
+
otherId.compact.each { |qid|
|
97
|
+
(name,id) = qid.split(/:/,2)
|
98
|
+
add_solr_value(solr_doc, "dor_id", id, :string, [:searchable])
|
99
|
+
add_solr_value(solr_doc, "identifier", qid, :string, [:searchable])
|
100
|
+
add_solr_value(solr_doc, "#{name}_id", id, :string, [:searchable])
|
101
|
+
}
|
102
|
+
|
103
|
+
self.find_by_terms(:tag).each { |tag|
|
104
|
+
(top,rest) = tag.text.split(/:/,2)
|
105
|
+
unless rest.nil?
|
106
|
+
add_solr_value(solr_doc, "#{top.downcase.strip.gsub(/\s/,'_')}_tag", rest.strip, :string, [:searchable, :facetable])
|
107
|
+
end
|
108
|
+
}
|
109
|
+
solr_doc
|
110
|
+
end
|
111
|
+
end #class
|
112
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
module Dor
|
2
|
+
class RoleMetadataDS < ActiveFedora::OmDatastream
|
3
|
+
include SolrDocHelper
|
4
|
+
|
5
|
+
set_terminology do |t|
|
6
|
+
t.root :path => 'roleMetadata'
|
7
|
+
|
8
|
+
t.actor do
|
9
|
+
t.identifier do
|
10
|
+
t.type_ :path => {:attribute => 'type'}
|
11
|
+
end
|
12
|
+
t.name
|
13
|
+
end
|
14
|
+
t.person :ref => [:actor], :path => 'person'
|
15
|
+
t.group :ref => [:actor], :path => 'group'
|
16
|
+
|
17
|
+
t.role do
|
18
|
+
t.type_ :path => {:attribute => 'type'}
|
19
|
+
t.person :ref => [:person]
|
20
|
+
t.group :ref => [:group]
|
21
|
+
end
|
22
|
+
|
23
|
+
t.manager :ref => [:role], :attributes => {:type => 'manager'}
|
24
|
+
t.depositor :ref => [:role], :attributes => {:type => 'depositor'}
|
25
|
+
t.reviewer :ref => [:role], :attributes => {:type => 'reviewer'}
|
26
|
+
t.viewer :ref => [:role], :attributes => {:type => 'viewer'}
|
27
|
+
end
|
28
|
+
|
29
|
+
def self.xml_template
|
30
|
+
Nokogiri::XML::Builder.new do |xml|
|
31
|
+
xml.roleMetadata{
|
32
|
+
}
|
33
|
+
end.doc
|
34
|
+
end
|
35
|
+
|
36
|
+
|
37
|
+
def to_solr(solr_doc=Hash.new, *args)
|
38
|
+
self.find_by_xpath('/roleMetadata/role/*').each do |actor|
|
39
|
+
role_type = actor.parent['type']
|
40
|
+
val = [actor.at_xpath('identifier/@type'),actor.at_xpath('identifier/text()')].join ':'
|
41
|
+
add_solr_value(solr_doc, "apo_role_#{actor.name}_#{role_type}", val, :string, [:searchable, :facetable])
|
42
|
+
add_solr_value(solr_doc, "apo_role_#{role_type}", val, :string, [:searchable, :facetable])
|
43
|
+
if ['dor-apo-manager','dor-apo-depositor'].include? role_type
|
44
|
+
add_solr_value(solr_doc, "apo_register_permissions", val, :string, [:searchable, :facetable])
|
45
|
+
end
|
46
|
+
end
|
47
|
+
solr_doc
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
class SimpleDublinCoreDs < ActiveFedora::OmDatastream
|
2
|
+
|
3
|
+
set_terminology do |t|
|
4
|
+
t.root(:path=>"dc", :xmlns=>"http://www.openarchives.org/OAI/2.0/oai_dc/", :schema=>"http://cosimo.stanford.edu/standards/oai_dc/v2/oai_dc.xsd", :namespace_prefix => 'oai_dc', :index_as => [:not_searchable])
|
5
|
+
t.title(:index_as=>[:searchable, :displayable, :facetable], :xmlns => "http://purl.org/dc/elements/1.1/", :namespace_prefix => 'dc')
|
6
|
+
t.creator(:index_as=>[:searchable, :displayable, :facetable], :xmlns => "http://purl.org/dc/elements/1.1/", :namespace_prefix => 'dc')
|
7
|
+
t.identifier(:index_as=>[:searchable, :displayable], :xmlns => "http://purl.org/dc/elements/1.1/", :namespace_prefix => 'dc')
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.xml_template
|
11
|
+
builder = Nokogiri::XML::Builder.new do |xml|
|
12
|
+
xml.dc(:xmlns=>"http://www.openarchives.org/OAI/2.0/oai_dc/",
|
13
|
+
'xmlns:dc'=>'http://purl.org/dc/elements/1.1/') {
|
14
|
+
xml['dc'].title
|
15
|
+
xml['dc'].creator
|
16
|
+
xml['dc'].identifier
|
17
|
+
}
|
18
|
+
end
|
19
|
+
|
20
|
+
return builder.doc
|
21
|
+
end
|
22
|
+
|
23
|
+
def to_solr(solr_doc=Hash.new, *args)
|
24
|
+
# There are a whole bunch of namespace-related things that can go
|
25
|
+
# wrong with this terminology. Until it's fixed in OM, ignore them all.
|
26
|
+
begin
|
27
|
+
doc = super solr_doc, *args
|
28
|
+
|
29
|
+
add_solr_value(doc, 'dc_title', self.title.first, :string, [:sortable])
|
30
|
+
add_solr_value(doc, 'dc_creator', self.creator.first, :string, [:sortable])
|
31
|
+
|
32
|
+
identifiers = {}
|
33
|
+
|
34
|
+
self.identifier.each { |i| ns, val = i.split(":"); identifiers[ns] ||= val }
|
35
|
+
|
36
|
+
identifiers.each do |ns, val|
|
37
|
+
add_solr_value(doc, "dc_identifier_#{ns}", val, :string, [:sortable])
|
38
|
+
end
|
39
|
+
|
40
|
+
return doc
|
41
|
+
rescue
|
42
|
+
solr_doc
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|