Class: METSModel

Inherits:
ASpaceExport::ExportModel show all
Includes:
JSONModel
Defined in:
backend/app/exporters/models/mets.rb

Constant Summary

@@logical_div =
Struct.new(:label,
:dmdid, 
:file_versions, 
:children) do

Instance Attribute Summary (collapse)

Class Method Summary (collapse)

Instance Method Summary (collapse)

Methods included from JSONModel

JSONModel, #JSONModel, add_error_handler, all, allow_unmapped_enum_value, backend_url, client_mode?, custom_validations, destroy_model, enum_default_value, enum_values, handle_error, init, load_schema, #models, models, parse_jsonmodel_ref, parse_reference, repository, repository_for, schema_src, set_repository, strict_mode, strict_mode?, with_repository

Methods inherited from ASpaceExport::ExportModel

#apply_map, inherited, model_for, model_for?

Methods included from ASpaceExport::ExportModelHelpers

#extract_date_string, #extract_note_content, #get_subnotes_by_type

Constructor Details

- (METSModel) initialize(obj)

Returns a new instance of METSModel



105
106
107
108
109
110
111
112
113
# File 'backend/app/exporters/models/mets.rb', line 105

def initialize(obj)
  @json = obj
  @wrapped_dmd = []    
  @extents = []
  @notes = []
  @subjects = []
  @names = []
  @parts = []
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

- (Object) method_missing(meth)



179
180
181
182
183
184
185
# File 'backend/app/exporters/models/mets.rb', line 179

def method_missing(meth)
  if @json.respond_to?(meth)
    @json.send(meth)
  else
    nil
  end
end

Instance Attribute Details

- (Object) dmd_id

Returns the value of attribute dmd_id



20
21
22
# File 'backend/app/exporters/models/mets.rb', line 20

def dmd_id
  @dmd_id
end

- (Object) extents

Returns the value of attribute extents



14
15
16
# File 'backend/app/exporters/models/mets.rb', line 14

def extents
  @extents
end

- (Object) header_agent_name

Returns the value of attribute header_agent_name



6
7
8
# File 'backend/app/exporters/models/mets.rb', line 6

def header_agent_name
  @header_agent_name
end

- (Object) header_agent_notes

Returns the value of attribute header_agent_notes



7
8
9
# File 'backend/app/exporters/models/mets.rb', line 7

def header_agent_notes
  @header_agent_notes
end

- (Object) header_agent_role

Returns the value of attribute header_agent_role



8
9
10
# File 'backend/app/exporters/models/mets.rb', line 8

def header_agent_role
  @header_agent_role
end

- (Object) header_agent_type

Returns the value of attribute header_agent_type



9
10
11
# File 'backend/app/exporters/models/mets.rb', line 9

def header_agent_type
  @header_agent_type
end

- (Object) mods_model

Returns the value of attribute mods_model



11
12
13
# File 'backend/app/exporters/models/mets.rb', line 11

def mods_model
  @mods_model
end

- (Object) names

Returns the value of attribute names



17
18
19
# File 'backend/app/exporters/models/mets.rb', line 17

def names
  @names
end

- (Object) notes

Returns the value of attribute notes



15
16
17
# File 'backend/app/exporters/models/mets.rb', line 15

def notes
  @notes
end

- (Object) parts

Returns the value of attribute parts



19
20
21
# File 'backend/app/exporters/models/mets.rb', line 19

def parts
  @parts
end

- (Object) subjects

Returns the value of attribute subjects



16
17
18
# File 'backend/app/exporters/models/mets.rb', line 16

def subjects
  @subjects
end

- (Object) type_of_resource

Returns the value of attribute type_of_resource



18
19
20
# File 'backend/app/exporters/models/mets.rb', line 18

def type_of_resource
  @type_of_resource
end

- (Object) wrapped_dmd

Returns the value of attribute wrapped_dmd



12
13
14
# File 'backend/app/exporters/models/mets.rb', line 12

def wrapped_dmd
  @wrapped_dmd
end

Class Method Details

+ (Object) from_archival_object(obj)



138
139
140
141
142
143
# File 'backend/app/exporters/models/mets.rb', line 138

def self.from_archival_object(obj)

  mets = self.from_aspace_object(obj)
  mets.apply_map(obj, @archival_object_map)
  mets
end

+ (Object) from_aspace_object(obj)



121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
# File 'backend/app/exporters/models/mets.rb', line 121

def self.from_aspace_object(obj)

  mets = self.new(obj)
  
  if obj.respond_to?(:repo_id)
    repo_id = RequestContext.get(:repo_id)
    mets.apply_map(Repository.get_or_die(repo_id), @repository_map)
    mets.header_agent_role = "CREATOR"
    mets.header_agent_type = "ORGANIZATION"
  end

  mets.add_agent_note("Produced by ArchivesSpace")

  mets
end

+ (Object) from_digital_object(obj)



146
147
148
149
150
151
152
153
154
155
# File 'backend/app/exporters/models/mets.rb', line 146

def self.from_digital_object(obj)

  mets = self.from_archival_object(obj)
  mets.type_of_resource = obj.digital_object_type
  mets.apply_map(obj, @digital_object_map)

  # wrapped DMD
  mets.mods_model = ASpaceExport.model(:mods).from_digital_object(obj, :ignore => [:tree])
  mets
end

+ (Object) get_file_group(*args)



116
117
118
# File 'backend/app/exporters/models/mets.rb', line 116

def self.get_file_group(*args)
  @file_group.new(*args)
end

+ (Object) name_part_type_map



163
164
165
# File 'backend/app/exporters/models/mets.rb', line 163

def self.name_part_type_map
  @name_part_type_map
end

+ (Object) name_type_map



158
159
160
# File 'backend/app/exporters/models/mets.rb', line 158

def self.name_type_map
  @name_type_map
end

Instance Method Details

- (Object) add_agent_note(val)



168
169
170
171
# File 'backend/app/exporters/models/mets.rb', line 168

def add_agent_note(val)
  @header_agent_notes ||= []
  @header_agent_notes << val
end

- (Object) children



188
189
190
191
192
193
194
195
196
# File 'backend/app/exporters/models/mets.rb', line 188

def children
  return nil unless @json.tree['_resolved']['children']
  
  ao_class = self.class.instance_variable_get(:@doc)
  
  children = @json.tree['_resolved']['children'].map { |subtree| ao_class.new(subtree) }
  
  children
end

- (Object) dmd_wrap(mdtype, callback, data)



174
175
176
# File 'backend/app/exporters/models/mets.rb', line 174

def dmd_wrap(mdtype, callback, data)
  self.wrapped_dmd << {'type' => mdtype,'callback' => callback, 'data' => data}
end

- (Object) extract_file_versions(children)



276
277
278
279
280
281
282
283
284
285
286
287
288
289
# File 'backend/app/exporters/models/mets.rb', line 276

def extract_file_versions(children)
  file_versions = []

  children.each do |child|
    if child['file_versions']
      file_versions += child['file_versions']
    end
    if child['children']
      file_versions += extract_file_versions(child['children'])
    end
  end

  file_versions
end

- (Object) root_logical_div



256
257
258
259
260
261
262
263
# File 'backend/app/exporters/models/mets.rb', line 256

def root_logical_div
  @@logical_div.init
  @@logical_div.new(@json.title,
                    @json.id, 
                    @json.file_versions,
                    @json.tree['_resolved']['children'])

end

- (Object) root_physical_div



266
267
268
269
270
271
272
273
# File 'backend/app/exporters/models/mets.rb', line 266

def root_physical_div
  @@logical_div.init
  @@logical_div.new(@json.title,
                    @json.id, 
                    @json.file_versions,
                    @json.tree['_resolved']['children'])

end

- (Object) with_file_groups



199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
# File 'backend/app/exporters/models/mets.rb', line 199

def with_file_groups
  file_versions = @json.file_versions
  file_versions.each do |fv|
    fv['digital_object_id'] = @json.id
  end
  file_versions += extract_file_versions(@json.tree['_resolved']['children'])
  file_versions.compact!

  while file_versions.length > 0
    use_statement = file_versions[0]['use_statement']
    use_group = file_versions.select {|fv| fv['use_statement'] == use_statement }
    yield self.class.get_file_group(use_statement, use_group)

    file_versions.reject! {|fv| fv['use_statement'] == use_statement }
  end
end