diff --git a/src/XmlConfig.cpp b/src/XmlConfig.cpp index 404342230120c599a2948386a3fe351efe673337..7b0f5ea55054e90048e8bd2b0a334f248d1492b8 100644 --- a/src/XmlConfig.cpp +++ b/src/XmlConfig.cpp @@ -278,6 +278,9 @@ std::string XmlConfig::convert(const std::string& filename) hfs << nbits << endl; hfs << "[Field]" << endl; _writeFields(header, hfs); + // query for compression algorithm / compression level + xpath_node_set compression_algorithm = header.select_nodes("field[@id=\"packetlib:compression_algorithm\"]"); + xpath_node_set compression_level = header.select_nodes("field[@id=\"packetlib:compression_level\"]"); /// Write packet files vector packetFilenames; @@ -335,6 +338,43 @@ std::string XmlConfig::convert(const std::string& filename) xml_node tail = packet.child("tail"); _writeFields(tail, pfs); + // if not defined in the header find in datafieldheader + int algindex = 0; + if(compression_algorithm.empty()) + { + compression_algorithm = datafieldheader.select_nodes("field[@id=\"packetlib:compression_algorithm\"]"); + algindex = 1; + } + // and sourcedatafield + if(compression_algorithm.empty()) + { + algindex = 2; + compression_algorithm = sourcedatafield.select_nodes("@field[id=\"packetlib:compression_algorithm\"]"); + } + + // if not defined in the header find in datafieldheader + int lvlindex = 0; + if(compression_level.empty()) + { + compression_level = datafieldheader.select_nodes("field[@id=\"packetlib:compression_level\"]"); + lvlindex = 1; + } + // and sourcedatafield + if(compression_level.empty()) + { + lvlindex = 2; + compression_level = sourcedatafield.select_nodes("@field[id=\"packetlib:compression_level\"]"); + } + + if(!compression_algorithm.empty() && !compression_level.empty()) + { + pfs << "[Compression]" << endl; + pfs << _physicalIndex[compression_algorithm[0].node()] << endl; + pfs << algindex << endl; + pfs << _physicalIndex[compression_level[0].node()] << endl; + pfs << lvlindex << endl; + } + packet=packet.next_sibling(); }