-
Notifications
You must be signed in to change notification settings - Fork 0
/
bitstream.rb
60 lines (45 loc) · 2.08 KB
/
bitstream.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
unless DB.table_exists?(:bitstreams)
DB.create_table :bitstreams do
String :id, :size=>100, :primary_key=>true, :null=>false
Integer :size
foreign_key :datafile_id, :datafiles, :type=>'varchar(100)', :null=>false, :on_update=>:cascade, :on_delete=>:cascade
index :datafile_id, :name=>:index_bitstreams_datafile
end
end
class Bitstream < Sequel::Model(:bitstreams)
include Pobject
many_to_one :datafile # a bitstream is belong to a datafile
one_to_many :documents #:constraint => :destroy
one_to_many :texts # :constraint => :destroy
one_to_many :audios # :constraint => :destroy
one_to_many :images # :constraint => :destroy
one_to_many :object_formats # :constraint => :destroy # a bitstream may have 0-n formats
def check_errors
unless self.valid?
bigmessage = self.errors.full_messages.join "\n"
raise bigmessage unless bigmessage.empty?
end
documents.each {|obj| obj.check_errors }
invalids = (texts).reject {|obj| obj.valid? }
bigmessage = invalids.map { |obj| obj.errors.full_messages.join "\n" }.join "\n"
raise bigmessage unless bigmessage.empty?
invalids = (audios ).reject {|obj| obj.valid? }
bigmessage = invalids.map { |obj| obj.errors.full_messages.join "\n" }.join "\n"
raise bigmessage unless bigmessage.empty?
invalids = (images ).reject {|obj| obj.valid? }
bigmessage = invalids.map { |obj| obj.errors.full_messages.join "\n" }.join "\n"
raise bigmessage unless bigmessage.empty?
object_formats.each {|obj| obj.check_errors }
end
def fromPremis(premis, formats)
self.id = premis.find_first("premis:objectIdentifier/premis:objectIdentifierValue", NAMESPACES).content
# process premis ObjectCharacteristicExtension
node = premis.find_first("premis:objectCharacteristics/premis:objectCharacteristicsExtension", NAMESPACES)
if (node)
processObjectCharacteristicExtension(self, node)
@object.datafile_id = nil
end
# process format information
processFormats(self, premis, formats)
end
end