Salome HOME
import SalomePro v1.2c
[modules/kernel.git] / src / DataTypeCatalog / SALOME_DataTypeCatalog_Handler.cxx
1 //  SALOME DataTypeCatalog : catalog of data types
2 //
3 //  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 //  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
5 // 
6 //  This library is free software; you can redistribute it and/or 
7 //  modify it under the terms of the GNU Lesser General Public 
8 //  License as published by the Free Software Foundation; either 
9 //  version 2.1 of the License. 
10 // 
11 //  This library is distributed in the hope that it will be useful, 
12 //  but WITHOUT ANY WARRANTY; without even the implied warranty of 
13 //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
14 //  Lesser General Public License for more details. 
15 // 
16 //  You should have received a copy of the GNU Lesser General Public 
17 //  License along with this library; if not, write to the Free Software 
18 //  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
19 // 
20 //  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
21 //
22 //
23 //
24 //  File   : SALOME_DataTypeCatalog_Handler.cxx
25 //  Author : Estelle Deville
26 //  Module : SALOME
27 //  $Header$
28
29 using namespace std;
30 #define WRITE_CATA_DATA_TYPE
31 #include "SALOME_DataTypeCatalog_Handler.hxx"
32
33 //----------------------------------------------------------------------
34 // Function : SALOME_DataTypeCatalog_Handler
35 // Purpose  : Constructor
36 //----------------------------------------------------------------------
37 SALOME_DataTypeCatalog_Handler::SALOME_DataTypeCatalog_Handler()
38 {
39   MESSAGE("SALOME_DataTypeCatalog_Handler creation");
40   // XML Tags initialisation
41   // Used in the function endElement
42   test_data_type_name = "DataType-name";
43   test_data_type_interf_read = "DataType-interface-read";
44   test_data_type_interf_write = "DataType-interface-write";
45   test_data_type_parent_name = "Parent-name" ;
46   test_data_type_parents = "DataType-Parents-list";
47   test_data_type = "DataType";
48 }
49
50 //----------------------------------------------------------------------
51 // Function : ~SALOME_DataTypeCatalog_Handler
52 // Purpose  : Destructor
53 //----------------------------------------------------------------------
54 SALOME_DataTypeCatalog_Handler::~SALOME_DataTypeCatalog_Handler()
55 {
56   MESSAGE("SALOME_DataTypeCatalog_Handler destruction");
57 }
58
59 //----------------------------------------------------------------------
60 // Function : startDocument
61 // Purpose  : overload handler function
62 //----------------------------------------------------------------------
63 bool SALOME_DataTypeCatalog_Handler::startDocument()
64 {
65   MESSAGE("Begin parse document")
66   // Empty the private elements
67   _datatypelist.resize(0);
68   _a_data_parents_list.resize(0);
69   return true;
70 }
71
72 //----------------------------------------------------------------------
73 // Function : startElement
74 // Purpose  : overload handler function
75 //----------------------------------------------------------------------
76 bool SALOME_DataTypeCatalog_Handler::startElement(const QString&, 
77                                                   const QString &,
78                                                   const QString& qName, 
79                                                   const QXmlAttributes& atts)
80 {
81   return true;
82
83
84 //----------------------------------------------------------------------
85 // Function : endElement
86 // Purpose  : overload handler function
87 //----------------------------------------------------------------------
88 bool SALOME_DataTypeCatalog_Handler::endElement(const QString&, 
89                                                 const QString &,
90                                                 const QString& qName)
91 {
92   // DataType
93
94   // tag test_data_type_name
95   if((qName.compare(QString(test_data_type_name))==0))
96     _a_data_type.Parserdata_name = content;
97   // tag test_data_type_interf_read
98   if((qName.compare(QString(test_data_type_interf_read))==0)) 
99     _a_data_type.Parserdata_interface_read = content;
100   // tag test_data_type_interf_write
101   if((qName.compare(QString(test_data_type_interf_write))==0)) 
102     _a_data_type.Parserdata_interface_write = content;
103
104   // tag test_data_type_parent_name
105   if((qName.compare(QString(test_data_type_parent_name))==0)) 
106     _a_data_parents_list.push_back(content);
107
108   // tag test_data_type_parents
109   if((qName.compare(QString(test_data_type_parents))==0)) 
110     {
111       _a_data_type.Parserdata_parents = _a_data_parents_list;
112       _a_data_parents_list.resize(0);;
113     }
114
115   // tag test_data_type
116   if((qName.compare(QString(test_data_type))==0))
117     {
118       _datatypelist.push_back(_a_data_type);
119
120       // Empty temporary structures
121       _a_data_type.Parserdata_name = "";
122       _a_data_type.Parserdata_interface_read = "";
123       _a_data_type.Parserdata_interface_write = "";
124       _a_data_type.Parserdata_parents.resize(0);
125     }
126
127
128
129   return true;
130 }
131   
132 //----------------------------------------------------------------------
133 // Function : characters
134 // Purpose  : overload handler function
135 //----------------------------------------------------------------------
136 bool SALOME_DataTypeCatalog_Handler::characters(const QString& chars)
137 {
138   content = (const char*)chars ;
139   return true;
140 }
141
142 //----------------------------------------------------------------------
143 // Function : endDocument
144 // Purpose  : overload handler function
145 //            Print all informations find in the catalog 
146 //            (only in DEBUG mode!!)
147 //----------------------------------------------------------------------  
148 bool SALOME_DataTypeCatalog_Handler::endDocument()
149 {
150   //_datatypelist
151   for (unsigned int ind = 0; ind < _datatypelist.size(); ind++)
152     {
153       MESSAGE("DataType Name :"<<_datatypelist[ind].Parserdata_name);
154       MESSAGE("DataType interface read :"<<_datatypelist[ind].Parserdata_interface_read);
155       MESSAGE("DataType interface write :"<<_datatypelist[ind].Parserdata_interface_write);
156
157       for (unsigned int i = 0; i < _datatypelist[ind].Parserdata_parents.size(); i++)
158         MESSAGE("Parent name :" << _datatypelist[ind].Parserdata_parents[i]);
159     }
160
161   MESSAGE("Document parsed");
162   return true;
163 }
164  
165 //----------------------------------------------------------------------
166 // Function : errorProtocol
167 // Purpose  : overload handler function
168 //----------------------------------------------------------------------  
169 QString SALOME_DataTypeCatalog_Handler::errorProtocol()
170 {
171   return errorProt ;
172 }
173
174
175 //----------------------------------------------------------------------
176 // Function : fatalError
177 // Purpose  : overload handler function
178 //----------------------------------------------------------------------  
179 bool SALOME_DataTypeCatalog_Handler::fatalError(const QXmlParseException& exception)
180 {
181     errorProt += QString( "fatal parsing error: %1 in line %2, column %3\n" )
182     .arg( exception.message() )
183     .arg( exception.lineNumber() )
184     .arg( exception.columnNumber() );
185
186   return QXmlDefaultHandler::fatalError( exception );
187 }