cul_hydra 1.8.0 → 1.9.0

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.
Files changed (48) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/concerns/cul/hydra/application_id_behavior.rb +5 -6
  3. data/app/models/administrative_set.rb +0 -1
  4. data/app/models/concept.rb +0 -1
  5. data/app/models/concerns/cul/hydra/models.rb +1 -0
  6. data/app/models/concerns/cul/hydra/models/common.rb +8 -9
  7. data/app/models/concerns/cul/hydra/models/rels_int.rb +18 -0
  8. data/app/models/concerns/ore/proxy.rb +2 -3
  9. data/app/models/cul/hydra/datastreams/rels_int.rb +179 -0
  10. data/app/models/dc_document.rb +0 -1
  11. data/app/models/generic_aggregator.rb +0 -1
  12. data/app/models/generic_object.rb +0 -1
  13. data/app/models/generic_resource.rb +1 -3
  14. data/fixtures/spec/CUL_RELS_INT/rels_int_blank.xml +2 -0
  15. data/fixtures/spec/CUL_RELS_INT/rels_int_profile.xml +19 -0
  16. data/fixtures/spec/CUL_RELS_INT/rels_int_test.xml +12 -0
  17. data/fixtures/spec/FOXML/resource-thumb.xml +2 -1
  18. data/lib/cul_hydra.rb +1 -4
  19. data/lib/cul_hydra/rels_int.rb +9 -0
  20. data/lib/cul_hydra/rels_int/rdf_xml_writer.rb +33 -0
  21. data/lib/cul_hydra/version.rb +1 -1
  22. data/lib/tasks/cul_hydra_dev.rake +0 -28
  23. metadata +32 -58
  24. data/app/models/jp2_image_aggregator.rb +0 -34
  25. data/app/models/mets_structured_aggregator.rb +0 -18
  26. data/app/models/resource.rb +0 -78
  27. data/app/models/resource_aggregator.rb +0 -22
  28. data/app/models/static_audio_aggregator.rb +0 -12
  29. data/app/models/static_image_aggregator.rb +0 -32
  30. data/lib/cul_hydra/controllers.rb +0 -14
  31. data/lib/cul_hydra/controllers/aggregates.rb +0 -93
  32. data/lib/cul_hydra/controllers/aggregator_controller_helper.rb +0 -27
  33. data/lib/cul_hydra/controllers/catalog.rb +0 -12
  34. data/lib/cul_hydra/controllers/collections.rb +0 -81
  35. data/lib/cul_hydra/controllers/content_aggregators.rb +0 -81
  36. data/lib/cul_hydra/controllers/datastreams.rb +0 -145
  37. data/lib/cul_hydra/controllers/helpers.rb +0 -10
  38. data/lib/cul_hydra/controllers/helpers/active_fedora_helper_behavior.rb +0 -9
  39. data/lib/cul_hydra/controllers/helpers/application_helper_behavior.rb +0 -16
  40. data/lib/cul_hydra/controllers/helpers/dc_metadata_helper_behavior.rb +0 -9
  41. data/lib/cul_hydra/controllers/helpers/hydra_assets_helper_behavior.rb +0 -46
  42. data/lib/cul_hydra/controllers/helpers/hydra_autocomplete_helper_behavior.rb +0 -35
  43. data/lib/cul_hydra/controllers/helpers/hydra_uploader_helper_behavior.rb +0 -34
  44. data/lib/cul_hydra/controllers/helpers/resources_helper_behavior.rb +0 -159
  45. data/lib/cul_hydra/controllers/resources.rb +0 -161
  46. data/lib/cul_hydra/controllers/static_image_aggregators.rb +0 -105
  47. data/lib/cul_hydra/controllers/suggestions.rb +0 -126
  48. data/lib/cul_hydra/controllers/terms.rb +0 -205
@@ -1,105 +0,0 @@
1
- require 'cul_hydra/controllers/helpers/resources_helper_behavior'
2
- module Cul::Hydra::Controllers
3
- module StaticImageAggregators
4
- extend ActiveSupport::Concern
5
-
6
- included do
7
- include Hydra::AssetsControllerHelper
8
- include Cul::Hydra::Controllers::Helpers::ResourcesHelperBehavior
9
- include Hydra::RepositoryController
10
- include MediaShelf::ActiveFedoraHelper
11
- include Blacklight::SolrHelper
12
- before_filter :require_fedora
13
- prepend_before_filter :sanitize_update_params
14
- end
15
-
16
- def index
17
- if params[:layout] == "false"
18
- # action = "index_embedded"
19
- layout = false
20
- end
21
- if !params[:container_id].nil?
22
- container_uri = "info:fedora/#{params[:container_id]}"
23
- escaped_uri = container_uri.gsub(/(:)/, '\\:')
24
- extra_controller_params = {:q=>"cul_member_of_s:#{escaped_uri}"}
25
- @response, @document_list = get_search_results( extra_controller_params )
26
-
27
- # Including this line so permissions tests can be run against the container
28
- @container_response, @document = get_solr_response_for_doc_id(params[:container_id])
29
-
30
- # Including these lines for backwards compatibility (until we can use Rails3 callbacks)
31
- @container = ActiveFedora::Base.load_instance(params[:container_id])
32
- @solr_result = @container.file_objects(:response_format=>:solr)
33
- else
34
- # @solr_result = ActiveFedora::SolrService.instance.conn.query('has_model_field:info\:fedora/ldpd\:Resource', @search_params)
35
- @solr_result = Resource.find_by_solr(:all)
36
- end
37
- render :action=>params[:action], :layout=>layout
38
- end
39
-
40
- def new
41
- @asset = StaticImageAggregator.new
42
- apply_depositor_metadata(@asset)
43
- set_collection_type(@asset, params[:content_type])
44
- if !params[:container_id].nil?
45
- associate_resource_with_container(@asset, params[:container_id])
46
- end
47
- @asset.save
48
- @asset.refresh
49
- msg = "Created a Static Image Aggregator with pid #{@asset.pid}. Now it's ready to be edited."
50
- flash[:notice]= msg
51
-
52
- if params.has_key?(:Filedata)
53
- @file_asset = create_and_save_resource_from_params
54
- apply_depositor_metadata(@file_asset)
55
-
56
- flash[:notice] += " The file #{params[:Filename]} has been saved in <a href=\"#{asset_url(@file_asset.pid)}\">#{@file_asset.pid}</a>."
57
-
58
- if !params[:container_id].nil?
59
- associate_resource_with_container(@file_asset, @asset.pid)
60
- end
61
-
62
- ## Apply any posted file metadata
63
- unless params[:asset].nil?
64
- logger.debug("applying submitted file metadata: #{@sanitized_params.inspect}")
65
- @metadata_update_response = update_document(@file_asset, @sanitized_params)
66
- end
67
- @file_asset.save
68
- # If redirect_params has not been set, use {:action=>:index}
69
- logger.debug "Created #{@file_asset.pid}."
70
- end
71
- @asset.save
72
-
73
- session[:scripts] = params[:combined] == "true"
74
- redirect_to url_for(:action=>"edit", :id=>@asset.pid, :new_asset=>true, :controller=>'catalog')
75
-
76
- end
77
-
78
- # Common destroy method for all AssetsControllers
79
- def destroy
80
- # The correct implementation, with garbage collection:
81
- # if params.has_key?(:container_id)
82
- # container = ActiveFedora::Base.load_instance(params[:container_id])
83
- # container.file_objects_remove(params[:id])
84
- # FileAsset.garbage_collect(params[:id])
85
- # else
86
-
87
- # The dirty implementation (leaves relationship in container object, deletes regardless of whether the file object has other containers)
88
- ActiveFedora::Base.load_instance(params[:id]).delete
89
- render :text => "Deleted #{params[:id]} from #{params[:container_id]}."
90
- end
91
-
92
-
93
- def show
94
- @image_agg = StaticImageAggregator.find(params[:id])
95
- if (@image_agg.nil?)
96
- logger.warn("No such object: " + params[:id])
97
- flash[:notice]= "No such object."
98
- redirect_to(:action => 'index', :q => nil , :f => nil)
99
- else
100
- @id_array = @image_agg.containers(:response_format => :id_array)
101
- end
102
- render :action=>params[:action], :layout=>(params[:layout]=="false")
103
- end
104
- end
105
- end
@@ -1,126 +0,0 @@
1
- require 'cul_hydra'
2
- require 'json'
3
- module Cul::Hydra::Controllers
4
- module Suggestions
5
- extend ActiveSupport::Concern
6
- included do
7
- include Blacklight::SolrHelper
8
- include MediaShelf::ActiveFedoraHelper
9
- end
10
-
11
- def index
12
- stub = params[:term] || ""
13
- if params[:term_id].nil?
14
- raise "Cannot provide suggestions without a term name"
15
- end
16
- field_name = params[:term_id]
17
- field_key = field_key_from(field_name, Cul::Hydra::Om::ModsDocument.terminology)
18
- solr_name = get_solr_name(field_key, Cul::Hydra::Om::ModsDocument)
19
- solr_params = {}
20
- solr_params['wt'] = 'json'
21
- solr_params['terms'] = 'true'
22
- solr_params['terms.fl'] = solr_name
23
- solr_params['terms.lower'] = stub
24
- solr_params['terms.lower.incl'] = false
25
- solr_params['terms.prefix'] = stub
26
- solr_params['terms.sort'] = 'index'
27
- solr_response = Blacklight.solr.get 'terms', {:params => solr_params}
28
- result = []
29
- hash = {}
30
- (1...solr_response['terms'].length).step(2) { |ix|
31
- solr_response['terms'][ix].each { |val|
32
- result << val if val.is_a? String
33
- }
34
- }
35
- send_data result.to_json, :disposition => 'inline', :type => 'text/plain'
36
- return
37
- end
38
-
39
- ## field_key_from(field_name) to reverse this method from HydraFedoraMetadataHelper
40
- # def field_name_for(field_key)
41
- # if field_key.kind_of?(Array)
42
- # return OM::XML::Terminology.term_hierarchical_name(*field_key)
43
- # else
44
- # field_key.to_s
45
- # end
46
- # end
47
-
48
- def field_key_from(field_name, terminology)
49
- # this is a hack, but necessary until/unless OM generates names differently
50
- candidates = field_name.split('__')
51
- field_key = []
52
- candidates.each_with_index { |candidate, ix|
53
- if (candidates[ix + 1] and candidates[ix + 1].match(/\d+/))
54
- field_key << {OM.destringify(candidate) => Integer(candidates.delete_at(ix + 1))}
55
- else
56
- field_key << OM.destringify(candidate)
57
- end
58
- }
59
- logger.debug field_key.inspect
60
- field_key
61
- end
62
-
63
- # ** largely copied from ActiveFedora::NokogiriDatastream.get_values **
64
- def get_solr_name(term_pointer, dsClass)
65
- term = dsClass.terminology.retrieve_term(*OM.pointers_to_flat_array(term_pointer, false))
66
- names = []
67
- if is_hierarchical_term_pointer?(*term_pointer)
68
- bases = []
69
- #add first item in term_pointer as start of bases
70
- # then iterate through possible nodes that might exist
71
- term_pointer.first.kind_of?(Hash) ? bases << term_pointer.first.keys.first : bases << term_pointer.first
72
- for i in 1..(term_pointer.length-1)
73
- #iterate in reverse so that we can modify the bases array while iterating
74
- (bases.length-1).downto(0) do |j|
75
- current_last = (term_pointer[i].kind_of?(Hash) ? term_pointer[i].keys.first : term_pointer[i])
76
- if (term_pointer[i-1].kind_of?(Hash))
77
- #just use index supplied instead of trying possibilities
78
- index = term_pointer[i-1].values.first
79
- solr_name_base = OM::XML::Terminology.term_hierarchical_name({bases[j]=>index},current_last)
80
- solr_name = generate_solr_symbol(solr_name_base, term.data_type)
81
- bases.delete_at(j)
82
- #insert the new solr name base if found
83
- bases.insert(j,solr_name_base) if has_solr_name?(solr_name,solr_doc)
84
- else
85
- #detect how many nodes exist
86
- index = 0
87
- current_base = bases[j]
88
- bases.delete_at(j)
89
- solr_name_base = OM::XML::Terminology.term_hierarchical_name({current_base=>index},current_last)
90
- solr_name = generate_solr_symbol(solr_name_base, term.data_type)
91
- bases.insert(j,solr_name_base)
92
- end
93
- end
94
- end
95
- bases.each do |base|
96
- names << generate_solr_symbol(base.to_sym, term.data_type)
97
- end
98
- else
99
- #this is not hierarchical and we can simply look for the solr name created using the terms without any indexes
100
- generic_field_name_base = OM::XML::Terminology.term_generic_name(*term_pointer)
101
- names << generate_solr_symbol(generic_field_name_base, term.data_type)
102
- end
103
- names
104
- end
105
-
106
- # ** copied from ActiveFedora::NokogiriDatastream **
107
- #@return true if the term_pointer contains an index
108
- # ====Example:
109
- # [:image, {:title_set=>1}, :title] return true
110
- # [:image, :title_set, :title] return false
111
- def is_hierarchical_term_pointer?(*term_pointer)
112
- if term_pointer.length>1
113
- term_pointer.each do |pointer|
114
- if pointer.kind_of?(Hash)
115
- return true
116
- end
117
- end
118
- end
119
- return false
120
- end
121
- # ** copied from ActiveFedora::NokogiriDatastream **
122
- def generate_solr_symbol(base, data_type)
123
- Solrizer::XML::TerminologyBasedSolrizer.default_field_mapper.solr_name(base.to_sym, data_type)
124
- end
125
- end
126
- end
@@ -1,205 +0,0 @@
1
- require 'cul_hydra'
2
- require 'json'
3
- require 'blacklight'
4
- module Cul::Hydra::Controllers
5
- module Terms
6
- extend ActiveSupport::Concern
7
- included do
8
- include ::Blacklight::SearchHelper
9
- #include MediaShelf::ActiveFedoraHelper
10
- end
11
-
12
- def index
13
- if params[:layout] == "false"
14
- layout = false
15
- end
16
- if params[:term_id]
17
- @solr_name = solr_name(params[:term_id])
18
- else
19
- @solr_name = params[:solr_name]
20
- end
21
- @terms = term_values
22
- render :action=>params[:action], :layout=>layout
23
- end
24
-
25
- # this method should be overridden to use the appropriate terminology
26
- def solr_name(term_id)
27
- if term_id.nil?
28
- raise "Cannot provide suggestions without a term name"
29
- end
30
- field_key = field_key_from(term_id, Cul::Hydra::Om::ModsDocument.terminology)
31
- get_solr_name(field_key, Cul::Hydra::Om::ModsDocument)
32
- end
33
- def term_values
34
- if @solr_name.nil?
35
- logger.debug "no solr field name, return nil for term values"
36
- return nil
37
- end
38
- stub = params[:term_value]
39
- solr_params = {}
40
- solr_params['wt'] = 'json'
41
- solr_params['terms'] = 'true'
42
- solr_params['terms.fl'] = @solr_name
43
- if stub
44
- solr_params['terms.lower'] = stub
45
- solr_params['terms.lower.incl'] = false
46
- solr_params['terms.prefix'] = stub
47
- solr_params['terms.sort'] = 'index'
48
- else
49
- solr_params['terms.sort'] = params.fetch(:sort,'count')
50
- solr_params['terms.limit'] = -1
51
- end
52
- solr_response = Blacklight.solr.get 'terms', {:params => solr_params}
53
- result = []
54
- hash = {}
55
- (1...solr_response['terms'].length).step(2) { |ix|
56
- _t = solr_response['terms'][ix]
57
- (0..._t.length).step(2) { |jx|
58
- result << [_t[jx], _t[jx + 1]]
59
- }
60
- }
61
- return result
62
- end
63
-
64
- ## field_key_from(field_name) to reverse this method from HydraFedoraMetadataHelper
65
- # def field_name_for(field_key)
66
- # if field_key.kind_of?(Array)
67
- # return OM::XML::Terminology.term_hierarchical_name(*field_key)
68
- # else
69
- # field_key.to_s
70
- # end
71
- # end
72
-
73
- def field_key_from(hier_field_name, t)
74
- candidates = hier_field_name.split('_')
75
- field_key = []
76
- candidates.inject(field_key) { |ptrs, term|
77
- if term =~ /\d+/
78
- ptr = {ptrs.pop=>term.to_i}
79
- else
80
- ptr = (ptrs.empty? or ptrs.last.is_a? Hash) ? term.to_sym : (ptrs.pop.to_s + "_" + term).to_sym
81
- end
82
- ptrs.push ptr
83
- }
84
- return field_key if t.has_term? *field_key
85
- # pointers are probably from ambiguous underscores
86
- amb = field_key.dup
87
- field_key = []
88
- amb.each do |candidate|
89
- key = (candidate.is_a? Hash) ? candidate.keys.first : candidate # no indexes should be included
90
- parts = key.to_s.split('_')
91
- ptrs = parts_to_terms(parts, t, field_key)
92
- if ptrs.nil? or !t.has_term? *ptrs
93
- raise "Couldn't generate pointer from term name going forward for \"" + hier_field_name + "\" (no matched term sequence)"
94
- else
95
- if candidate.is_a? Hash
96
- ptr_key = ptrs.pop
97
- ptrs.push({ptr_key => candidate[candidate.keys.first] })
98
- end
99
- field_key = ptrs
100
- end
101
- end
102
- return field_key if t.has_term? *field_key
103
- raise "Couldn't generate pointer from term name going forward for \"" + hier_field_name + "\", tried " + field_key.inspect
104
- end
105
-
106
- def parts_to_terms(parts, t, prefix=[])
107
- return nil if parts.length == 0 # this should be short-circuited in the loop below rather than recurring
108
- if parts.length == 1
109
- new_term_ptr = prefix.dup.push parts[0].to_sym
110
- if t.has_term? *new_term_ptr
111
- return new_term_ptr
112
- else
113
- return nil
114
- end
115
- end
116
-
117
- results = []
118
- parts.each_index do |ix|
119
- term_ptr = prefix.dup.push parts[0...(parts.length - ix)].join('_').to_sym
120
-
121
- if t.has_term? *term_ptr
122
- case ix
123
- when 0
124
- results.push term_ptr
125
- when 1
126
- new_term_ptr = term_ptr.concat [parts.last.to_sym]
127
- results.push new_term_ptr if t.has_term? *new_term_ptr
128
- else
129
- new_term_ptr = parts_to_terms(parts[parts.length - ix, ix], t, term_ptr)
130
- results.push new_term_ptr if !new_term_ptr.nil?
131
- end
132
- end
133
- end
134
-
135
- if results.length == 1
136
- return results[0]
137
- else
138
- return nil
139
- end
140
- end
141
-
142
- # ** largely copied from ActiveFedora::NokogiriDatastream.get_values **
143
- def get_solr_name(term_pointer, dsClass)
144
- term = dsClass.terminology.retrieve_term(*OM.pointers_to_flat_array(term_pointer, false))
145
- names = []
146
- if is_hierarchical_term_pointer?(*term_pointer)
147
- bases = []
148
- #add first item in term_pointer as start of bases
149
- # then iterate through possible nodes that might exist
150
- term_pointer.first.kind_of?(Hash) ? bases << term_pointer.first.keys.first : bases << term_pointer.first
151
- for i in 1..(term_pointer.length-1)
152
- #iterate in reverse so that we can modify the bases array while iterating
153
- (bases.length-1).downto(0) do |j|
154
- current_last = (term_pointer[i].kind_of?(Hash) ? term_pointer[i].keys.first : term_pointer[i])
155
- if (term_pointer[i-1].kind_of?(Hash))
156
- #just use index supplied instead of trying possibilities
157
- index = term_pointer[i-1].values.first
158
- solr_name_base = OM::XML::Terminology.term_hierarchical_name({bases[j]=>index},current_last)
159
- solr_name = generate_solr_symbol(solr_name_base, term.data_type)
160
- bases.delete_at(j)
161
- #insert the new solr name base if found
162
- bases.insert(j,solr_name_base) if has_solr_name?(solr_name,solr_doc)
163
- else
164
- #detect how many nodes exist
165
- index = 0
166
- current_base = bases[j]
167
- bases.delete_at(j)
168
- solr_name_base = OM::XML::Terminology.term_hierarchical_name({current_base=>index},current_last)
169
- solr_name = generate_solr_symbol(solr_name_base, term.data_type)
170
- bases.insert(j,solr_name_base)
171
- end
172
- end
173
- end
174
- bases.each do |base|
175
- names << generate_solr_symbol(base.to_sym, term.data_type)
176
- end
177
- else
178
- #this is not hierarchical and we can simply look for the solr name created using the terms without any indexes
179
- generic_field_name_base = OM::XML::Terminology.term_generic_name(*term_pointer)
180
- names << generate_solr_symbol(generic_field_name_base, term.data_type)
181
- end
182
- names
183
- end
184
-
185
- # ** copied from ActiveFedora::NokogiriDatastream **
186
- #@return true if the term_pointer contains an index
187
- # ====Example:
188
- # [:image, {:title_set=>1}, :title] return true
189
- # [:image, :title_set, :title] return false
190
- def is_hierarchical_term_pointer?(*term_pointer)
191
- if term_pointer.length>1
192
- term_pointer.each do |pointer|
193
- if pointer.kind_of?(Hash)
194
- return true
195
- end
196
- end
197
- end
198
- return false
199
- end
200
- # ** copied from ActiveFedora::NokogiriDatastream **
201
- def generate_solr_symbol(base, data_type)
202
- Solrizer::XML::TerminologyBasedSolrizer.default_field_mapper.solr_name(base.to_sym, data_type)
203
- end
204
- end
205
- end