UNIVERS  15.3
UNIVERS base processing software API
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
hds_parameter_xml_parser.hpp
1 /* hds_parameter_xml_parser.hpp */
2 /* $Id$ */
3 #ifndef __hds_parameter_xml_parser_hpp
4 #define __hds_parameter_xml_parser_hpp
5 
6 #include <QMap>
7 #include <QDomNode>
8 #include <QDomDocument>
9 
10 #include <hds_batch/hds_batch_module_parameter.hpp>
11 
13 namespace hds
14 {
16  {
17  public:
18 
19  // names of xml tags
20  struct Tags
21  {
22  static const char par[];
23  static const char par_name[];
24  static const char par_type[];
25  static const char par_comment[];
26  static const char param_strlist_elem[];
27  static const char param_strlist_elem_id[];
28  };
29 
31 
32  virtual ~ParameterXMLParser();
33 
34  virtual QDomElement operator()(const BatchModuleParameter &param,
35  QDomDocument &doc) const;
36 
38  virtual BatchModuleParameter* operator()(const QDomNode &node) const;
39 
40 
42 
43  protected:
44 
45  template <typename IT>
46  static void xml2list_of_items(const QDomNode &node, QList<IT> &list,
47  const QString &i_xml_param_elem,
48  const QString &i_xml_param_elem_id)
49  {
50  // get map of items ids and values
51  QMap<int, IT> items_map;
52  const QDomNodeList &list_nodes = node.childNodes();
53  for (int i=0; i<list_nodes.size(); i++)
54  {
55  // skip not an item element
56  if (list_nodes.item(i).nodeName() != i_xml_param_elem)
57  continue;
58 
59  // id of item in the list
60  QString id_str = list_nodes.item(i).toElement().attribute(i_xml_param_elem_id);
61  if (id_str.isEmpty() || id_str.isNull())
62  {
63  qDebug("hds::ParameterXMLParser::xml2list_of_items: error: "
64  "can't get id tag for item[%d], skipping.", i);
65  continue;
66  }
67 
68  // id has to be a number
69  bool ok = false;
70  int id = id_str.toInt(&ok);
71  if (!ok)
72  {
73  qDebug("ParameterXMLParser::xml2list_of_items: error: "
74  "incorrect id=%s of item[%d], skipping.",
75  id_str.toAscii().constData(), i);
76  continue;
77  }
78 
79  // check if map contains value with such id
80  if (items_map.contains(id))
81  {
82  qDebug("ParameterXMLParser::xml2list_of_items: error: "
83  "id=%d is presents in the list of items, skipping.", id);
84  continue;
85  }
86 
87  // value of item in the list
88  IT value = list_nodes.item(i).toElement().text();
89 
90  items_map[id] = value;
91  }
92 
93  // get list of uniq values in ascending order
94  list = items_map.values();
95  }
96  };
97 };
98 
99 #endif /* hds_parameter_xml_parser.hpp */
Definition: hds_parameter_xml_parser.hpp:15
Type
Definition: hds_batch_module_parameter.hpp:18
Definition: hds_parameter_xml_parser.hpp:20
Definition: hds_batch_module_parameter.hpp:13