class Libis::Ingester::AcpCollector

Constants

HEADERS

Protected Instance Methods

process(item) click to toggle source

@param [Libis::Ingester::Run] item

# File lib/libis/ingester/tasks/acp_collector.rb, line 52
def process(item)
  unless File.exist?(parameter(:xls_file))
    raise Libis::WorkflowAbort,
          "Excel file '#{parameter(:xls_file)}' cannot be found."
  end

  unless Dir.exist?(parameter(:acp_dir))
    raise Libis::WorkflowAbort,
          "ACP directory '#{parameter(:acp_dir)}' cannot be found."
  end

  Libis::Tools::Spreadsheet.foreach("#{parameter(:xls_file)}|Rosetta",
                                    required: HEADERS,
                                    extension: :xls) do |row|
    next if row[HEADERS.first.first] == HEADERS.first.last
    process_row(row)
  end
end

Private Instance Methods

create_file(source, size, target, created, modified, checksum = nil) click to toggle source
# File lib/libis/ingester/tasks/acp_collector.rb, line 73
def create_file(source, size, target, created, modified, checksum = nil)

  return nil unless source

  file_name = File.join(parameter(:acp_dir), source)
  unless File.exist?(file_name)
    error "Could not find file '#{source}' in the ACP directory"
    return nil
  end

  File.utime(modified.to_time, modified.to_time, file_name)
  file_item = Libis::Ingester::FileItem.new
  file_item.filename = file_name

  unless file_item.properties['size'] == size
    error "File #{source} size does not match metadata info [#{file_item.properties['size']} vs #{size}]"
    return nil
  end

  unless file_item.properties['checksum_md5'] == checksum
    error "File #{source} checksum does not match metadata info [#{file_item.properties['checksum_md5']} vs #{checksum}]"
    return nil
  end if checksum

  file_item.properties['access_time'] = modified
  file_item.properties['modification_time'] = modified
  file_item.properties['creation_time'] = created
  file_item.properties['original_path'] = target

  file_item.save!
  file_item

end
process_row(row) click to toggle source
# File lib/libis/ingester/tasks/acp_collector.rb, line 107
def process_row(row)
  # create IE
  ie = Libis::Ingester::IntellectualEntity.new
  ie.name = row[:name]
  ie.label = row[:name]
  ie.parent = workitem
  ie.properties['scope_id'] = row[:scope_id].to_i
  debug "Created IE for '#{row[:scope_id].to_i}' - '#{row[:name]}'"
  ie.save!

  created = DateTime.iso8601(row[:created])
  modified = DateTime.iso8601(row[:modified])

  if (original = create_file(row[:file], row[:size].to_i, row[:name], created, modified, row[:checksum]))
    original.properties['rep_type'] = 'original'
    original.save!
    ie << original
    ie.save!
    debug "Added original file to IE", ie
  end


  if (derived = create_file(row[:dc_file], row[:dc_size].to_i, (row[:dc_name] || row[:name]), created, modified))
    derived.properties['rep_type'] = 'derived'
    derived.save!
    ie << derived
    ie.save!
    debug "Added derived file to IE", ie
  end

  fname = "#{File.basename row[:name]}#{File.extname row[:th_file]}"
  if (thumbnail = create_file(row[:th_file], row[:th_size].to_i, fname, created, modified))
    thumbnail.properties['rep_type'] = 'thumbnail'
    thumbnail.save!
    ie << thumbnail
    ie.save!
    debug "Added thumbnail file to IE", ie
  end if row[:th_file]

end