class CPEE::ModelManagement::PutItem

Public Instance Methods

response() click to toggle source
# File lib/cpee-model-management/implementation.rb, line 528
def response
  where = @a[0] == :main ? '' : Riddl::Protocols::Utils::unescape(@r[-2])
  conns = @a[1]
  models = @a[2]
  name  = File.basename(@r.last,'.xml')
  cont = @p[0].value.read
  dn = CPEE::ModelManagement::get_dn @h['DN']

  fname = File.join(models,where,name + '.xml')

  if File.exists?(fname)
    author = dn['GN'] + ' ' + dn['SN']
    attrs = {}
    XML::Smart.string(cont) do |doc|
      doc.register_namespace 'p', 'http://cpee.org/ns/properties/2.0'
      doc.find('/p:testset/p:attributes/p:author').each do |ele|
        ele.text = dn['GN'] + ' ' + dn['SN']
      end
      if doc.find('/p:testset/p:attributes/p:design_stage').empty?
        doc.find('/p:testset/p:attributes').first.add('p:design_stage','draft')
      else
        doc.find('/p:testset/p:attributes/p:design_stage').each do |ele|
          ele.text = 'draft' if ele.text.strip == ''
        end
      end
      attrs = doc.find('/p:testset/p:attributes/*').map do |e|
        [e.qname.name,e.text]
      end.to_h
      File.write(fname,doc.to_s)
    end
    File.write(fname + '.attrs',JSON::pretty_generate(attrs))
    CPEE::ModelManagement::op author, 'add', models, File.join('.', where, name + '.xml')
    CPEE::ModelManagement::notify conns, 'put', models, fname
  else
    @status = 400
  end
end