class PkmLevel2Converter::Converter

Public Class Methods

new(file_name) click to toggle source
# File lib/pkm_level2_converter.rb, line 8
def initialize(file_name)
  @filename = file_name
end

Public Instance Methods

check_xsd(xsd, xml) click to toggle source
# File lib/pkm_level2_converter.rb, line 39
def check_xsd(xsd, xml)
  puts "Check XML-Schema..."
  xsd = Nokogiri::XML::Schema(xsd)
  error = xsd.validate(xml)
  if error.empty? 
    puts "XML-Schema is valid."
    return true
  else
    puts "XML-Schema is invalid."
    error.each do |e|
      puts e.message
    end
    return false
  end
end
convertFileName() click to toggle source
# File lib/pkm_level2_converter.rb, line 16
def convertFileName()
  file_name = @filename
  #puts file_name
  f = file_name.split('_')
  #puts f
  org_id_l3 = f[1].to_i
  #puts org_id_l3
  org_id_l2 = org_id_l3 + 0x8000 
  #puts org_id_l2
  f[1] = org_id_l2.to_s
  #puts f.join("_")
  return f.join("_")
end
convert_ids() click to toggle source
# File lib/pkm_level2_converter.rb, line 81
def convert_ids
  #Organisations-ID des DL:
  #dl-km/organisation/id
  convert_xpath_l3_id(@xml_doc, 'xmlns:dl-km/xmlns:organisation/xmlns:id')
  puts "Converted following IDs:"
  puts "/dl-km/organisation/id = " + @xml_doc.xpath('/xmlns:dl-km/xmlns:organisation/xmlns:id').text
  
  @xml_doc.xpath('/xmlns:dl-km/xmlns:kontrollmodul-pool/xmlns:item').each do |node|
  
    #Organisations-ID des PV:
    #dl-km/kontrollmodul-pool/item/moduldaten/organisation/id
    convert_xpath_l3_id(node, 'xmlns:moduldaten/xmlns:organisation/xmlns:id')
    puts "# dl-km/kontrollmodul-pool/item/moduldaten/organisation/id = " + node.xpath('xmlns:moduldaten/xmlns:organisation/xmlns:id').text
    #Für PVKM zulässige Organisations-IDs der DL:
    #dl-km/kontrollmodul-pool/item/moduldaten/organisation-pool/item/id
    node.xpath('xmlns:moduldaten/xmlns:organisation-pool/xmlns:item').each do |child| 
      convert_xpath_l3_id(child, 'xmlns:id')
      puts "## dl-km/kontrollmodul-pool/item/moduldaten/organisation-pool/item/id = " + child.xpath('xmlns:id').text
    end
  end
  #Für Anzeige von KVP als Klartext:
  #dl-km/kontrollmodul-pool/item/moduldaten/nummerninterpretation-pool/item[nr=2]/nummerntext-pool/item/nr
end
convert_pkm() click to toggle source
# File lib/pkm_level2_converter.rb, line 55
def convert_pkm()
  orig_file_name = @filename
  if File.file?(orig_file_name) 
    @xml_doc = File.open(orig_file_name) { |f| Nokogiri::XML(f) }
    convert_ids
    if xml_is_valid_pkm(@xml_doc) 
      save_file(@xml_doc)
    end
  else 
    puts "File ('#{orig_file_name}') not found."    
  end
end
convert_xpath_l3_id(node, x_path) click to toggle source
# File lib/pkm_level2_converter.rb, line 75
def convert_xpath_l3_id(node, x_path)
  map = node.at_xpath x_path
  id = map.content.to_i
  map.content = (id + 0x8000).to_s
end
filename() click to toggle source
# File lib/pkm_level2_converter.rb, line 12
def filename
  @filename
end
save_file(file) click to toggle source
# File lib/pkm_level2_converter.rb, line 30
def save_file(file)
  #SAVE FILE with NEW name
  new_file_name = self.convertFileName()
  output = File.open( new_file_name, "w" )
  output << file.to_xml(:indent_text => "", :indent => 0).gsub(/>\n/,">")
  output.close
  puts "File saved as: #{new_file_name}"  
end
xml_is_valid_pkm(xml) click to toggle source
# File lib/pkm_level2_converter.rb, line 68
def xml_is_valid_pkm(xml)
  #xsd =  File.read("./ka/pkm/1/XML-Schema_PKM.xsd")
  file_path = File.join(File.dirname(__FILE__), './pkm_level2_converter/ka/pkm/1/XML-Schema_PKM.xsd') 
  xsd =  File.read(file_path)
  return self.check_xsd(xsd,xml)
end