Class: Libis::Services::Digitool::MetaDataManager

Inherits:
Object
  • Object
show all
Includes:
SoapClient, Singleton
Defined in:
lib/libis/services/digitool/meta_data_manager.rb

Overview

noinspection RubyStringKeysInHashInspection

Instance Attribute Summary

Attributes included from SoapClient

#client

Instance Method Summary collapse

Methods included from SoapClient

#configure, #operations, #request

Constructor Details

#initializeMetaDataManager

Returns a new instance of MetaDataManager.



17
18
19
# File 'lib/libis/services/digitool/meta_data_manager.rb', line 17

def initialize
  setup 'MetaDataManager'
end

Instance Method Details

#add_acl_condition(doc, expressions, negate = false) ⇒ Object



141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
# File 'lib/libis/services/digitool/meta_data_manager.rb', line 141

def add_acl_condition(doc, expressions, negate = false)
  root = doc.root
  top = root.xpath('ar_conditions')
  if top.empty?
    top = doc.create_node('ar_conditions')
    root << top
  else
    top = top[0]
  end
  top << (cond_node = doc.create_node('ar_condition'))
  cond_node['negate'] = negate.to_s if negate
  cond_node << (exprs_node = doc.create_node('ar_expressions'))
  expressions.each do |e|
    exprs_node << (expr_node = doc.create_node('ar_expression'))
    expr_node['negate'] = e[:negate].to_s if e[:negate]
    expr_node['ar_operation'] = e[:operation].to_s if e[:operation]
    expr_node << doc.create_text_node('key', e[:key].to_s)
    expr_node << doc.create_text_node('val1', e[:val1].to_s)
    expr_node << doc.create_text_node('val2', e[:val2].to_s) if e[:val2]
  end
  doc
end


98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
# File 'lib/libis/services/digitool/meta_data_manager.rb', line 98

def add_acl_copyright(doc, text_file, required = true)
  root = doc.root
  top = root.xpath('ar_copyrigths')
  if top.empty?
    top = doc.create_node('ar_copyrights')
    root << top
  else
    top = top[0]
  end
  top['required'] = required.to_s if required
  child = top.xpath('text_file')
  child = child.empty? ? doc.create_node('text_file') : top[0]
  child.content = text_file
  top << child
  doc
end

#add_acl_group(doc, group, negate = false) ⇒ Object



129
130
131
132
133
# File 'lib/libis/services/digitool/meta_data_manager.rb', line 129

def add_acl_group(doc, group, negate = false)
  expressions = Array.new
  group.split.each { |g| expressions << create_acl_expression_group(g, negate) }
  add_acl_condition doc, expressions
end

#add_acl_iprange(doc, iprange, negate = false) ⇒ Object



135
136
137
138
139
# File 'lib/libis/services/digitool/meta_data_manager.rb', line 135

def add_acl_iprange(doc, iprange, negate = false)
  expressions = Array.new
  iprange.split.each { |i| expressions << create_acl_expression_iprange(i, negate) }
  add_acl_condition doc, expressions
end

#add_acl_user(doc, user, negate = false) ⇒ Object



123
124
125
126
127
# File 'lib/libis/services/digitool/meta_data_manager.rb', line 123

def add_acl_user(doc, user, negate = false)
  expressions = Array.new
  user.split.each { |u| expressions << create_acl_expression_user(u, negate) }
  add_acl_condition doc, expressions
end

#add_acl_user_group_ip(doc, user, group, iprange, negate = false) ⇒ Object



115
116
117
118
119
120
121
# File 'lib/libis/services/digitool/meta_data_manager.rb', line 115

def add_acl_user_group_ip(doc, user, group, iprange, negate = false)
  expressions = []
  user.split.each { |u| expressions << create_acl_expression_user(u) } if user
  group.split.each { |g| expressions << create_acl_expression_group(g) } if group
  iprange.split.each { |i| expressions << create_acl_expression_iprange(i) } if iprange
  add_acl_condition doc, expressions, negate
end

#create_acl(acl) ⇒ Object



40
41
42
# File 'lib/libis/services/digitool/meta_data_manager.rb', line 40

def create_acl(acl)
  request :create_meta_data_entry, :general => general.to_s, :description => nil, :name => 'accessrights', :type => 'rights_md', :value => acl.to_s
end

#create_acl_expression_group(group, negate = false) ⇒ Object



172
173
174
175
176
177
178
# File 'lib/libis/services/digitool/meta_data_manager.rb', line 172

def create_acl_expression_group(group, negate = false)
  {:operation => 'eq',
   :negate => negate.to_s,
   :key => 'group_id',
   :val1 => group.to_s
  }
end

#create_acl_expression_iprange(iprange, negate = false) ⇒ Object



180
181
182
183
184
185
186
187
188
# File 'lib/libis/services/digitool/meta_data_manager.rb', line 180

def create_acl_expression_iprange(iprange, negate = false)
  return nil unless iprange =~ /(\d+\.\d+\.\d+\.\d+)-(\d+\.\d+\.\d+\.\d+)/
  {:operation => 'within',
   :negate => negate.to_s,
   :key => 'ip_range',
   :val1 => $1,
   :val2 => $2
  }
end

#create_acl_expression_user(user, negate = false) ⇒ Object



164
165
166
167
168
169
170
# File 'lib/libis/services/digitool/meta_data_manager.rb', line 164

def create_acl_expression_user(user, negate = false)
  {:operation => 'eq',
   :negate => negate.to_s,
   :key => 'user_id',
   :val1 => user.to_s
  }
end

#create_acl_record(acl_info = nil) ⇒ Object



78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
# File 'lib/libis/services/digitool/meta_data_manager.rb', line 78

def create_acl_record(acl_info = nil)
  doc = Libis::Tools::XmlDocument.new
  doc.root = doc.create_node('access_right_md',
                             :namespaces => {:node_ns => 'ar',
                                             'ar' => 'http://com/exlibris/digitool/repository/api/xmlbeans',
                                             'xs' => 'http://www.w3.org/2001/XMLSchema'})
  root = doc.root
  root['enabled'] = 'true'
  return doc unless acl_info
  c = acl_info[:copyright]
  add_acl_copyright(doc, c[:text_file], c[:required]) if c
  e = acl_info[:conditions]
  if e
    e.each do |x|
      add_acl_condition(doc, x[:expressions], x[:negate])
    end
  end
  doc
end

#create_dc(dc) ⇒ Object



21
22
23
24
25
26
27
28
29
30
# File 'lib/libis/services/digitool/meta_data_manager.rb', line 21

def create_dc(dc)
  dc_string = dc.to_s
  dc_string.force_encoding('UTF-8')
  dc_string.gsub!(/<\?xml[^\?]*\?>(\n)*/x, '')
  dc_string = '<?xml version="1.0" encoding="UTF-8"?>' + dc_string
#    dc_string.gsub!('&','&amp;')
#    dc_string.gsub!('<', '&lt;')
#    dc_string = HTMLEntities.new.encode(dc_string, :named)
  request :create_meta_data_entry, :general => general.to_s, :description => nil, :name => 'descriptive', :type => 'dc', :value => dc_string
end

#create_dc_from_xml(xml_doc) ⇒ Object



32
33
34
# File 'lib/libis/services/digitool/meta_data_manager.rb', line 32

def create_dc_from_xml(xml_doc)
  create_dc_record_from_xml xml_doc
end

#create_dc_record(dc_info) ⇒ Object



63
64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/libis/services/digitool/meta_data_manager.rb', line 63

def create_dc_record(dc_info)
  doc = Libis::Tools::XmlDocument.new
  doc.root = doc.create_node('record',
                             :namespaces => {'dc' => 'http://purl.org/dc/elements/1.1',
                                             'dcterms' => 'http://purl.org/dc/terms',
                                             'xsi' => 'http://www.w3.org/2001/XMLSchema-instance'})
  if dc_info
    dc_info.each do |k, v|
      doc.root << (n = doc.create_text_node(k.to_s, v.to_s))
      n['xsi:type'] = 'dcterms:URI' if v =~ /^http:\/\//
    end
  end
  doc
end

#create_dc_record_from_xml(xml_doc) ⇒ Object



56
57
58
59
60
61
# File 'lib/libis/services/digitool/meta_data_manager.rb', line 56

def create_dc_record_from_xml(xml_doc)
  doc = Libis::Tools::XmlDocument.open xml_doc
  records = doc.xpath('/records/record')
  return nil unless records.size > 0
  create_dc(records[0])
end

#delete(mid) ⇒ Object



48
49
50
# File 'lib/libis/services/digitool/meta_data_manager.rb', line 48

def delete(mid)
  request :delete_meta_data_entry, :mid => mid.to_s, :general => general.to_s
end

#retrieve(mid) ⇒ Object



52
53
54
# File 'lib/libis/services/digitool/meta_data_manager.rb', line 52

def retrieve(mid)
  request :retrieve_meta_data_entry, :mid => mid.to_s, :general => general.to_s
end

#update_acl(mid, acl) ⇒ Object



44
45
46
# File 'lib/libis/services/digitool/meta_data_manager.rb', line 44

def update_acl(mid, acl)
  request :update_meta_data_entry, :mid => mid.to_s, :general => general.to_s, :description => nil, :name => 'accessrights', :type => 'rights_md', :value => acl.to_s
end

#update_dc(mid, dc) ⇒ Object



36
37
38
# File 'lib/libis/services/digitool/meta_data_manager.rb', line 36

def update_dc(mid, dc)
  request :update_meta_data_entry, :mid => mid.to_s, :general => general.to_s, :description => nil, :name => 'descriptive', :type => 'dc', :value => dc.to_s
end