Serveur OPCUA générique
 Tout Classes Espaces de nommage Fichiers Fonctions Variables Définitions de type Macros
cta_slc_xmlmanager.h
Aller à la documentation de ce fichier.
1 /******************************************************************************
2  **
3  **
4  ** Copyright (C) LAPP. CNRS
5  **
6  ** Project: C++ OPCUA generique
7  **
8  ** Description:
9  **
10  ** Author : Panazol Jean Luc
11  ******************************************************************************/
12 
13 #ifndef __CTA_SLC_XMLMANAGER_H__
14 #define __CTA_SLC_XMLMANAGER_H__
15 
16 #include "string"
17 #include <list>
18 #include <map>
19 #include <vector>
20 #include <libxml/parser.h>
21 #include <libxml/xpath.h>
22 
23 namespace CTA_Slc_Dict {
24 class OPCUA;
25 }
26 
27 namespace CTA_Slc {
28 
29 typedef std::map<std::string, std::string> map1;
30 
31 struct myStruct {
32  int pos;
33  int nb;
34  std::string name;
35 };
36 
37 class XmlManager {
38  static XmlManager *singleton; // pointeur vers le singleton
39  XmlManager(std::string dictFilename);
40  virtual ~XmlManager();
41 
42 public:
43  // Methodes
44  static void kill();
45  static XmlManager *getInstance(std::string dictFilename);
46  static XmlManager *getInstance();
47 
48  // Variables
49  struct dictTable {
50  int taille;
51  std::string* element;
52  };
53  std::map<std::string, dictTable> mapDict;
54  std::map<std::string, std::string> elementmap;
55 
56  //methodes
57  void setApplicationPath(std::string applicationPath);
58  void getFrameDefinition(char *fileName, std::string name,
59  std::vector<std::string> *tabName, std::vector<int> *tabNb,
60  std::vector<int> *tabPos, std::vector<int> *tabIndex);
61  struct ParserXml2 {
63  int Organizes;
64  std::string HasComponent;
65  std::string BrowseName;
66  std::string DisplayName;
67  int NodeId;
68  int Type;
69  int Array;
70  std::string name;
71  std::string ref;
72  std::string type;
73  int minOccurs;
74  int maxOccurs;
75  };
76  void getMapDefinition(std::string fileName, map1 &map, std::string str2);
77  xmlNodePtr readFile(std::string filename, int flagAbsolue_Relatif);
78  std::map<std::string, std::string> searchElement(xmlNodePtr noeud,
79  std::string dict);
80 private:
81  // methodes
82  void setDictionnaire(std::string dictFilename);
83  void parcours_dictionnaire(xmlNodePtr noeud,
84  std::list<std::string> &myliste);
85  int element_dictionnaire(xmlNodePtr n, ParserXml2 *m_Noeud);
86  int searchElement(xmlNodePtr noeud, dictTable dict);
87  void trim2(std::string* str);
88  int searchElement(xmlNodePtr noeud, std::string *name, int *array,
89  int *dim);
90  int find(xmlNodePtr noeud, std::string str, std::string str2,
91  std::string *resultat);
92  int verif(std::string str, std::string str2);
93  bool fileExists(const char* FileName);
94 
95  // variables
96  std::string m_pdictFilename;
97  std::string m_applicationPath;
98  std::string m_pdescFilename;
99  xmlNodePtr racine;
100  std::list<std::string> Path;
101 };
102 
103 } // end namespace2
104 #endif
105