Class: Libis::Tools::MetsFile::File

Inherits:
Object
  • Object
show all
Includes:
MetsObject
Defined in:
lib/libis/tools/mets_objects.rb

Overview

Container class for creating a file in the METS.

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from MetsObject

#id, #initialize, #set_from_hash, #set_id, #to_s

Instance Attribute Details

#applicationsObject

The currently allowed attributes on this class. The attributes will typically be used in DnxSections.



234
235
236
# File 'lib/libis/tools/mets_objects.rb', line 234

def applications
  @applications
end

#checksum_MD5Object

The currently allowed attributes on this class. The attributes will typically be used in DnxSections.



234
235
236
# File 'lib/libis/tools/mets_objects.rb', line 234

def checksum_MD5
  @checksum_MD5
end

#checksum_SHA1Object

The currently allowed attributes on this class. The attributes will typically be used in DnxSections.



234
235
236
# File 'lib/libis/tools/mets_objects.rb', line 234

def checksum_SHA1
  @checksum_SHA1
end

#checksum_SHA256Object

The currently allowed attributes on this class. The attributes will typically be used in DnxSections.



234
235
236
# File 'lib/libis/tools/mets_objects.rb', line 234

def checksum_SHA256
  @checksum_SHA256
end

#checksum_SHA384Object

The currently allowed attributes on this class. The attributes will typically be used in DnxSections.



234
235
236
# File 'lib/libis/tools/mets_objects.rb', line 234

def checksum_SHA384
  @checksum_SHA384
end

#checksum_SHA512Object

The currently allowed attributes on this class. The attributes will typically be used in DnxSections.



234
235
236
# File 'lib/libis/tools/mets_objects.rb', line 234

def checksum_SHA512
  @checksum_SHA512
end

#composition_levelObject

The currently allowed attributes on this class. The attributes will typically be used in DnxSections.



234
235
236
# File 'lib/libis/tools/mets_objects.rb', line 234

def composition_level
  @composition_level
end

#creation_dateObject

The currently allowed attributes on this class. The attributes will typically be used in DnxSections.



234
235
236
# File 'lib/libis/tools/mets_objects.rb', line 234

def creation_date
  @creation_date
end

#dc_recordObject

The currently allowed attributes on this class. The attributes will typically be used in DnxSections.



234
235
236
# File 'lib/libis/tools/mets_objects.rb', line 234

def dc_record
  @dc_record
end

#entity_typeObject

The currently allowed attributes on this class. The attributes will typically be used in DnxSections.



234
235
236
# File 'lib/libis/tools/mets_objects.rb', line 234

def entity_type
  @entity_type
end

#env_dependenciesObject

The currently allowed attributes on this class. The attributes will typically be used in DnxSections.



234
235
236
# File 'lib/libis/tools/mets_objects.rb', line 234

def env_dependencies
  @env_dependencies
end

#environmentsObject

The currently allowed attributes on this class. The attributes will typically be used in DnxSections.



234
235
236
# File 'lib/libis/tools/mets_objects.rb', line 234

def environments
  @environments
end

#fixity_typeObject

The currently allowed attributes on this class. The attributes will typically be used in DnxSections.



234
235
236
# File 'lib/libis/tools/mets_objects.rb', line 234

def fixity_type
  @fixity_type
end

#fixity_valueObject

The currently allowed attributes on this class. The attributes will typically be used in DnxSections.



234
235
236
# File 'lib/libis/tools/mets_objects.rb', line 234

def fixity_value
  @fixity_value
end

#group_idObject

The currently allowed attributes on this class. The attributes will typically be used in DnxSections.



234
235
236
# File 'lib/libis/tools/mets_objects.rb', line 234

def group_id
  @group_id
end

#hardware_idsObject

The currently allowed attributes on this class. The attributes will typically be used in DnxSections.



234
235
236
# File 'lib/libis/tools/mets_objects.rb', line 234

def hardware_ids
  @hardware_ids
end

#hardware_infosObject

The currently allowed attributes on this class. The attributes will typically be used in DnxSections.



234
235
236
# File 'lib/libis/tools/mets_objects.rb', line 234

def hardware_infos
  @hardware_infos
end

#inhibitorsObject

The currently allowed attributes on this class. The attributes will typically be used in DnxSections.



234
235
236
# File 'lib/libis/tools/mets_objects.rb', line 234

def inhibitors
  @inhibitors
end

#labelObject

The currently allowed attributes on this class. The attributes will typically be used in DnxSections.



234
235
236
# File 'lib/libis/tools/mets_objects.rb', line 234

def label
  @label
end

#locationObject

The currently allowed attributes on this class. The attributes will typically be used in DnxSections.



234
235
236
# File 'lib/libis/tools/mets_objects.rb', line 234

def location
  @location
end

#mimetypeObject

The currently allowed attributes on this class. The attributes will typically be used in DnxSections.



234
235
236
# File 'lib/libis/tools/mets_objects.rb', line 234

def mimetype
  @mimetype
end

#modification_dateObject

The currently allowed attributes on this class. The attributes will typically be used in DnxSections.



234
235
236
# File 'lib/libis/tools/mets_objects.rb', line 234

def modification_date
  @modification_date
end

#noteObject

The currently allowed attributes on this class. The attributes will typically be used in DnxSections.



234
235
236
# File 'lib/libis/tools/mets_objects.rb', line 234

def note
  @note
end

#originalObject

The currently allowed attributes on this class. The attributes will typically be used in DnxSections.



234
235
236
# File 'lib/libis/tools/mets_objects.rb', line 234

def original
  @original
end

#preservation_levelsObject

The currently allowed attributes on this class. The attributes will typically be used in DnxSections.



234
235
236
# File 'lib/libis/tools/mets_objects.rb', line 234

def preservation_levels
  @preservation_levels
end

#puidObject

The currently allowed attributes on this class. The attributes will typically be used in DnxSections.



234
235
236
# File 'lib/libis/tools/mets_objects.rb', line 234

def puid
  @puid
end

#relationship_infosObject

The currently allowed attributes on this class. The attributes will typically be used in DnxSections.



234
235
236
# File 'lib/libis/tools/mets_objects.rb', line 234

def relationship_infos
  @relationship_infos
end

#representationObject

The currently allowed attributes on this class. The attributes will typically be used in DnxSections.



234
235
236
# File 'lib/libis/tools/mets_objects.rb', line 234

def representation
  @representation
end

#signaturesObject

The currently allowed attributes on this class. The attributes will typically be used in DnxSections.



234
235
236
# File 'lib/libis/tools/mets_objects.rb', line 234

def signatures
  @signatures
end

#sizeObject

The currently allowed attributes on this class. The attributes will typically be used in DnxSections.



234
235
236
# File 'lib/libis/tools/mets_objects.rb', line 234

def size
  @size
end

#software_idsObject

The currently allowed attributes on this class. The attributes will typically be used in DnxSections.



234
235
236
# File 'lib/libis/tools/mets_objects.rb', line 234

def software_ids
  @software_ids
end

#software_infosObject

The currently allowed attributes on this class. The attributes will typically be used in DnxSections.



234
235
236
# File 'lib/libis/tools/mets_objects.rb', line 234

def software_infos
  @software_infos
end

#source_metadataObject

The currently allowed attributes on this class. The attributes will typically be used in DnxSections.



234
235
236
# File 'lib/libis/tools/mets_objects.rb', line 234

def 
  @source_metadata
end

#target_locationObject

The currently allowed attributes on this class. The attributes will typically be used in DnxSections.



234
235
236
# File 'lib/libis/tools/mets_objects.rb', line 234

def target_location
  @target_location
end

Instance Method Details

#amdObject

This method creates the appropriate DnxSections based on what attributes are filled in.



279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
# File 'lib/libis/tools/mets_objects.rb', line 279

def amd
  dnx = {}
  tech_data = []
  # General File charateristics
  data = {
      label: label,
      note: note,
      fileCreationDate: creation_date,
      fileModificationDate: modification_date,
      FileEntityType: entity_type,
      compositionLevel: composition_level,
      # fileLocationType: 'FILE',
      fileLocation: location,
      fileOriginalName: CGI.escape(original || target_name).gsub('+', '%20'),
      fileOriginalPath: target_path,
      # fileOriginalID: URI.encode(location),
      # fileExtension: ::File.extname(orig_name),
      fileMIMEType: mimetype,
      fileSizeBytes: size,
      # formatLibraryId: puid
  }.cleanup
  tech_data << GeneralFileCharacteristics.new(data) unless data.empty?
  # Fixity
  %w'MD5 SHA1 SHA256 SHA384 SHA512'.each do |checksum_type|
    if (checksum = self.send("checksum_#{checksum_type}"))
      data = {
          fixityType: checksum_type,
          fixityValue: checksum,
      }.cleanup
      tech_data << FileFixity.new(data) unless data.empty?
    end
  end
  # Object characteristics
  data = {
      groupID: make_group_id
  }.cleanup
  tech_data << ObjectCharacteristics.new(data) unless data.empty?
  # Preservation level
  if preservation_levels
    data_list = []
    preservation_levels.each do |preservation_level|
      data = {
          preservationLevelValue: preservation_level[:value],
          preservationLevelRole: preservation_level[:role],
          preservationLevelRationale: preservation_level[:rationale],
          preservationLevelDateAssigned: preservation_level[:date],
      }.cleanup
      data_list << OpenStruct.new(data) unless data.empty?
    end
    tech_data << PreservationLevel.new(array: data_list) unless data_list.empty?
  end
  # Inhibitor
  if inhibitors
    data_list = []
    inhibitors.each do |inhibitor|
      data = {
          inhibitorType: inhibitor[:type],
          inhibitorTarget: inhibitor[:target],
          inhibitorKey: inhibitor[:key],
      }.cleanup
      data_list << OpenStruct.new(data) unless data.empty?
    end
    tech_data << Inhibitors.new(array: data_list) unless data_list.empty?
  end
  # Dependencies
  if env_dependencies
    data_list = []
    env_dependencies.each do |dependency|
      data = {
          dependencyName: dependency[:name],
          dependencyIdentifierType1: dependency[:type1],
          dependencyIdentifierValue1: dependency[:value1],
          dependencyIdentifierType2: dependency[:type2],
          dependencyIdentifierValue2: dependency[:value2],
          dependencyIdentifierType3: dependency[:type3],
          dependencyIdentifierValue3: dependency[:value3],
      }.cleanup
      data_list << OpenStruct.new(data) unless data.empty?
    end
    tech_data << EnvironmentDependencies.new(array: data_list) unless data_list.empty?
  end
  # Hardware registry id
  if hardware_ids
    data_list = []
    hardware_ids.each do |id|
      data = {
          registryId: id
      }.cleanup
      data_list << OpenStruct.new(data) unless data.empty?
    end
    tech_data << EnvHardwareRegistry.new(array: data_list) unless data_list.empty?
  end
  # Software registry id
  if software_ids
    data_list = []
    software_ids.each do |id|
      data = {
          registryId: id
      }.cleanup
      data_list << OpenStruct.new(data) unless data.empty?
    end
    tech_data << EnvSoftwareRegistry.new(array: data_list) unless data_list.empty?
  end
  # Singatures
  if signatures
    data_list = []
    signatures.each do |signature|
      data = {
          signatureInformationEncoding: signature[:encoding],
          signer: signature[:signer],
          signatureMethod: signature[:method],
          signatureValue: signature[:value],
          signatureValidationRules: signature[:rules],
          signatureProperties: signature[:properties],
      }.cleanup
      data_list << OpenStruct.new(data) unless data.empty?
    end
    tech_data << SignatureInformation.new(array: data_list) unless data_list.empty?
  end
  # Hardware
  if hardware_infos
    data_list = []
    hardware_infos.each do |hardware|
      data = {
          hardwareName: hardware[:name],
          hardwareType: hardware[:type],
          hardwareOtherInformation: hardware[:info],
      }.cleanup
      data_list << OpenStruct.new(data) unless data.empty?
    end
    tech_data << EnvironmentHardware.new(array: data_list) unless data_list.empty?
  end
  # Software
  if software_infos
    data_list = []
    software_infos.each do |software|
      data = {
          softwareName: software[:name],
          softwareVersion: software[:version],
          softwareType: software[:type],
          softwareOtherInformation: software[:info],
          softwareDependancy: software[:dependency],
      }.cleanup
      data_list << OpenStruct.new(data) unless data.empty?
    end
    tech_data << EnvironmentSoftware.new(array: data_list) unless data_list.empty?
  end
  # Relationship
  if relationship_infos
    data_list = []
    relationship_infos.each do |relationship|
      data = {
          relationshipType: relationship[:type],
          relationshipSubType: relationship[:subtype],
          relatedObjectIdentifierType1: relationship[:type1],
          relatedObjectIdentifierValue1: relationship[:id1],
          relatedObjectSequence1: relationship[:seq1],
          relatedObjectIdentifierType2: relationship[:type2],
          relatedObjectIdentifierValue2: relationship[:id2],
          relatedObjectSequence2: relationship[:seq2],
          relatedObjectIdentifierType3: relationship[:type3],
          relatedObjectIdentifierValue3: relationship[:id3],
          relatedObjectSequence3: relationship[:seq3],
      }.cleanup
      data_list << OpenStruct.new(data) unless data.empty?
    end
    tech_data << RelationShip.new(array: data_list) unless data_list.empty?
  end
  # Environment
  if environments
    data_list = []
    environments.each do |environment|
      data = {
          environmentCharacteristic: environment[:characteristic],
          environmentPurpose: environment[:purpose],
          environmentNote: environment[:note],
      }.cleanup
      data_list << OpenStruct.new(data) unless data.empty?
    end
    tech_data << Environment.new(array: data_list) unless data_list.empty?
  end
  # Application
  if applications
    data_list = []
    applications.each do |application|
      data = {
          creatingApplicationName: application[:name],
          creatingApplicationVersion: application[:version],
          dateCreatedByApplication: application[:date],
      }.cleanup
      data_list << OpenStruct.new(data) unless data.empty?
    end
    tech_data << CreatingApplication.new(array: data_list) unless data_list.empty?
  end
  # Finally assemble technical section
  dnx[:tech] = tech_data unless tech_data.empty?
  dnx
end

#make_group_idObject

The id that will be used for the group in the XML file.



248
249
250
# File 'lib/libis/tools/mets_objects.rb', line 248

def make_group_id
  "grp#{group_id rescue @id}"
end

#orig_nameObject

The file’s name as it was originally.



253
254
255
# File 'lib/libis/tools/mets_objects.rb', line 253

def orig_name
  ::File.basename(location)
end

#orig_pathObject

The file’s original directory.



258
259
260
# File 'lib/libis/tools/mets_objects.rb', line 258

def orig_path
  ::File.dirname(location)
end

#targetObject

The full path where the file is copied



263
264
265
266
267
268
# File 'lib/libis/tools/mets_objects.rb', line 263

def target
  if target_location.nil?
    return "#{xml_id}#{::File.extname(location)}"
  end
  target_location
end

#target_nameObject



270
271
272
# File 'lib/libis/tools/mets_objects.rb', line 270

def target_name
  ::File.basename(target)
end

#target_pathObject



274
275
276
# File 'lib/libis/tools/mets_objects.rb', line 274

def target_path
  ::File.dirname(target)
end

#xml_idObject

The id that will be used in the XML file to reference this file.



243
244
245
# File 'lib/libis/tools/mets_objects.rb', line 243

def xml_id
  "fid#{@id}"
end