1 // Copyright (C) 2007-2024 CEA, EDF, OPEN CASCADE
3 // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
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, or (at your option) any later version.
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.
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
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
23 // SALOME ModuleCatalog : implementation of ModuleCatalog server which parsers xml description of modules
24 // File : SALOME_ModuleCatalog_Handler.cxx
25 // Author : Estelle Deville
29 #define WRITE_CATA_COMPONENT
31 #include "SALOME_ModuleCatalog_Handler.hxx"
32 #include "SALOME_ModuleCatalog_Parser_IO.hxx"
33 #include "utilities.h"
38 //----------------------------------------------------------------------
39 // Function : SALOME_ModuleCatalog_Handler
40 // Purpose : Constructor
41 //----------------------------------------------------------------------
42 SALOME_ModuleCatalog_Handler::SALOME_ModuleCatalog_Handler(ParserPathPrefixes& pathList,
43 ParserComponents& moduleList,
45 TypeList& typeList):_pathList(pathList),_moduleList(moduleList),
46 _typeMap(typeMap),_typeList(typeList)
49 // XML Tags initialisation
50 // Used in the function endElement
51 test_path_prefix_name = "path-prefix-name";
52 test_computer_name = "computer-name" ;
53 test_computer_list = "computer-list" ;
54 test_path_prefix = "path-prefix" ;
55 test_path_prefix_list = "path-prefix-list" ;
57 test_component_name = "component-name";
58 test_component_username = "component-username";
59 test_component_type = "component-type" ;
60 test_component_icon = "component-icone" ;
61 test_component_impltype = "component-impltype";
62 test_component_implname = "component-implname";
63 test_component_version = "component-version";
64 test_component_comment = "component-comment";
66 test_interface_name = "component-interface-name" ;
68 test_service_name = "service-name";
69 test_defaultservice = "service-by-default";
71 test_typeofnode = "type-of-node";
73 test_inParameter_type = "inParameter-type";
74 test_inParameter_name = "inParameter-name";
75 test_inParameter = "inParameter";
76 test_inParameter_list = "inParameter-list";
78 test_outParameter_type = "outParameter-type";
79 test_outParameter_name = "outParameter-name";
80 test_outParameter = "outParameter";
81 test_outParameter_list = "outParameter-list";
83 test_inDataStreamParameter_type = "inParameter-type";
84 test_inDataStreamParameter_name = "inParameter-name";
85 test_inDataStreamParameter_dependency = "inParameter-dependency";
86 test_inDataStreamParameter = "inParameter";
87 test_inDataStreamParameter_list = "DataStream-list";
89 test_outDataStreamParameter_type = "outParameter-type";
90 test_outDataStreamParameter_name = "outParameter-name";
91 test_outDataStreamParameter_dependency = "outParameter-dependency";
92 test_outDataStreamParameter = "outParameter";
93 test_outDataStreamParameter_list = "DataStream-list";
95 test_service = "component-service";
96 test_service_list = "component-service-list";
97 test_interface_list = "component-interface-list";
99 test_constraint = "constraint";
101 test_component_list = "component-list";
102 test_component="component";
105 //----------------------------------------------------------------------
106 // Function : ~SALOME_ModuleCatalog_Handler
107 // Purpose : Destructor
108 //----------------------------------------------------------------------
109 SALOME_ModuleCatalog_Handler::~SALOME_ModuleCatalog_Handler()
114 //=============================================================================
116 * Processes XML document and fills the list of modules
118 //=============================================================================
120 void SALOME_ModuleCatalog_Handler::ProcessXmlDocument(xmlDocPtr theDoc)
122 // Empty the private elements
124 _pathPrefix.listOfComputer.resize(0);
125 _serviceList.resize(0);
126 _interfaceList.resize(0);
127 _moduleList.resize(0);
128 _inDataStreamParamList.resize(0);
129 _outDataStreamParamList.resize(0);
130 _inParamList.resize(0);
131 _outParamList.resize(0);
133 // Get the document root node
134 xmlNodePtr aCurNode = xmlDocGetRootElement(theDoc);
135 aCurNode = aCurNode->xmlChildrenNode;
137 // Processing the document nodes
138 while(aCurNode != NULL)
140 // Part 1: Process path prefix list (tag test_path_prefix_list)
141 if ( !xmlStrcmp(aCurNode->name,(const xmlChar*)test_path_prefix_list) )
143 xmlNodePtr aCurSubNode = aCurNode->xmlChildrenNode;
144 while(aCurSubNode != NULL)
146 // Forming a PathPrefix structure (tag test_path_prefix)
147 if ( xmlStrcmp(aCurSubNode->name, (const xmlChar*)test_path_prefix) ) {
148 aCurSubNode = aCurSubNode->next;
152 xmlNodePtr aCurSubSubNode = aCurSubNode->xmlChildrenNode;
153 while(aCurSubSubNode != NULL)
155 // Tag test_path_prefix_name
156 if ( !xmlStrcmp(aCurSubSubNode->name, (const xmlChar*)test_path_prefix_name) ) {
157 xmlChar* aPath = xmlNodeGetContent(aCurSubSubNode);
159 _pathPrefix.path = (const char*)aPath;
164 // Tag test_computer_list
165 if ( !xmlStrcmp(aCurSubSubNode->name, (const xmlChar*)test_computer_list) ) {
166 xmlNodePtr aComputerNode = aCurSubSubNode->xmlChildrenNode;
167 while (aComputerNode != NULL) {
168 // Tag test_computer_name
169 if ( !xmlStrcmp(aComputerNode->name, (const xmlChar*) test_computer_name) ) {
170 xmlChar* aCompName = xmlNodeGetContent(aComputerNode);
171 if (aCompName != NULL) {
172 _pathPrefix.listOfComputer.push_back((const char*)aCompName);
177 aComputerNode = aComputerNode->next;
181 aCurSubSubNode = aCurSubSubNode->next;
184 _pathList.push_back(_pathPrefix);
185 _pathPrefix.listOfComputer.resize(0);
187 aCurSubNode = aCurSubNode->next;
191 //Part 2: Process list of types
192 if ( !xmlStrcmp(aCurNode->name,(const xmlChar*)"type-list") )
194 xmlNodePtr aTypeNode = aCurNode->xmlChildrenNode;
195 while (aTypeNode != NULL)
198 if ( !xmlStrcmp(aTypeNode->name, (const xmlChar*)"type" ))
200 // Here is a basic type description
202 xmlChar * name=xmlGetProp(aTypeNode,(const xmlChar*)"name");
205 aType.name = (const char*)name;
208 xmlChar *kind=xmlGetProp(aTypeNode,(const xmlChar*)"kind");
211 aType.kind = (const char*)kind;
214 if(aType.kind == "double" ||
215 aType.kind == "int" ||
216 aType.kind == "bool" ||
217 aType.kind == "string")
219 if ( _typeMap.find(aType.name) == _typeMap.end() )
221 _typeMap[aType.name]=aType;
222 _typeList.push_back(aType);
225 INFO_MESSAGE( "Warning: this type (" << aType.name << "," << aType.kind << ") already exists, it will be ignored." );
228 INFO_MESSAGE( "Warning: this type (" << aType.name << "," << aType.kind << ") has incorrect kind, it will be ignored." );
230 else if ( !xmlStrcmp(aTypeNode->name, (const xmlChar*)"sequence" ))
232 // Here is a sequence type description
233 ParserSequence aType;
234 xmlChar * name=xmlGetProp(aTypeNode,(const xmlChar*)"name");
237 aType.name = (const char*)name;
240 xmlChar *content=xmlGetProp(aTypeNode,(const xmlChar*)"content");
243 aType.content = (const char*)content;
246 if ( _typeMap.find(aType.content) != _typeMap.end() )
248 if ( _typeMap.find(aType.name) == _typeMap.end() )
250 _typeMap[aType.name]=aType;
251 _typeList.push_back(aType);
254 INFO_MESSAGE( "Warning: this type (" << aType.name << "," << aType.kind << ") already exists, it will be ignored." );
258 INFO_MESSAGE( "Warning: this sequence type (" << aType.name << "," << aType.content << ") has unknown content type, it will be ignored." );
261 else if ( !xmlStrcmp(aTypeNode->name, (const xmlChar*)"objref" ))
263 // Here is an objref type description
266 xmlChar * name=xmlGetProp(aTypeNode,(const xmlChar*)"name");
269 aType.name = (const char*)name;
272 xmlChar *id=xmlGetProp(aTypeNode,(const xmlChar*)"id");
275 aType.id = (const char*)id;
279 xmlNodePtr aTypeSubNode = aTypeNode->xmlChildrenNode;
280 while (aTypeSubNode != NULL)
282 if ( !xmlStrcmp(aTypeSubNode->name, (const xmlChar*)"base" ))
285 xmlChar* content = xmlNodeGetContent(aTypeSubNode);
288 std::string base=(const char*)content;
290 if ( _typeMap.find(base) != _typeMap.end() && _typeMap[base].kind == "objref")
292 aType.bases.push_back(base);
296 MESSAGE( "Warning: this objref type (" << aType.name << ") has unknown base type (" << base << "), it will be ignored." );
302 aTypeSubNode = aTypeSubNode->next;
306 if ( _typeMap.find(aType.name) == _typeMap.end() )
308 //MESSAGE("Registered objref type: " << aType.name << " " << aType.id );
309 _typeMap[aType.name]=aType;
310 _typeList.push_back(aType);
313 MESSAGE( "Warning: this type (" << aType.name << "," << aType.kind << ") already exists, it will be ignored." );
316 else if ( !xmlStrcmp(aTypeNode->name, (const xmlChar*)"struct" ))
318 // Here is a struct type description
321 xmlChar * name=xmlGetProp(aTypeNode,(const xmlChar*)"name");
324 aType.name = (const char*)name;
327 xmlChar *id=xmlGetProp(aTypeNode,(const xmlChar*)"id");
330 aType.id = (const char*)id;
334 xmlNodePtr aTypeSubNode = aTypeNode->xmlChildrenNode;
335 while (aTypeSubNode != NULL)
337 if ( !xmlStrcmp(aTypeSubNode->name, (const xmlChar*)"member" ))
339 std::pair<std::string,std::string> member;
340 xmlChar * m_name=xmlGetProp(aTypeSubNode,(const xmlChar*)"name");
343 member.first=(const char*)m_name;
346 xmlChar * m_type=xmlGetProp(aTypeSubNode,(const xmlChar*)"type");
349 member.second=(const char*)m_type;
352 if ( _typeMap.find(member.second) != _typeMap.end() )
354 aType.members.push_back(member);
358 MESSAGE( "Warning: this struct type (" << aType.name << ") has unknown member type (" << member.first << "," << member.second << "), it will be ignored." );
363 aTypeSubNode = aTypeSubNode->next;
367 if ( _typeMap.find(aType.name) == _typeMap.end() )
369 _typeMap[aType.name]=aType;
370 _typeList.push_back(aType);
373 MESSAGE( "Warning: this type (" << aType.name << "," << aType.kind << ") already exists, it will be ignored.");
376 aTypeNode = aTypeNode->next;
380 //Part 3: Process list of components (tag test_component_list)
381 if ( !xmlStrcmp(aCurNode->name,(const xmlChar*)test_component_list) )
383 xmlNodePtr aComponentNode = aCurNode->xmlChildrenNode;
384 while (aComponentNode != NULL)
386 // Do not process tags differ from test_component here
387 if ( xmlStrcmp(aComponentNode->name, (const xmlChar*)test_component) ) {
388 aComponentNode = aComponentNode->next;
392 // Component identification
394 // Empty temporary structures
396 _aModule.constraint = "";
398 _aModule.interfaces.resize(0);
399 _aModule.implementationType ="";
400 _aModule.implementationName ="";
402 xmlNodePtr aComponentSubNode = aComponentNode->xmlChildrenNode;
403 while(aComponentSubNode != NULL)
405 xmlChar* aNodeContent = xmlNodeGetContent(aComponentSubNode);
407 if (aNodeContent == NULL) {
408 aComponentSubNode = aComponentSubNode->next;
412 std::string aContent = (const char*)aNodeContent;
414 // Tag test_component_name
415 if ( !xmlStrcmp(aComponentSubNode->name, (const xmlChar*)test_component_name) )
416 _aModule.name = aContent;
418 // Tag test_component_username
419 if ( !xmlStrcmp(aComponentSubNode->name, (const xmlChar*)test_component_username) )
420 _aModule.username = aContent;
422 // Tag test_component_type
423 if ( !xmlStrcmp(aComponentSubNode->name, (const xmlChar*)test_component_type) ) {
424 std::string aType = aContent;
426 if ((aType.compare("MESH") == 0) ||
427 (aType.compare("Mesh") == 0) ||
428 (aType.compare("mesh") == 0))
429 _aModule.type = MESH ;
430 else if((aType.compare("MED") == 0) ||
431 (aType.compare("Med") == 0) ||
432 (aType.compare("med") == 0) ||
433 (aType.compare("FIELDS") == 0) ||
434 (aType.compare("Fields") == 0) ||
435 (aType.compare("fields") == 0))
436 _aModule.type = Med ;
437 else if((aType.compare("GEOM") == 0) ||
438 (aType.compare("Geom") == 0) ||
439 (aType.compare("geom") == 0))
440 _aModule.type = GEOM ;
441 else if((aType.compare("SOLVER") == 0) ||
442 (aType.compare("Solver") == 0) ||
443 (aType.compare("solver") == 0))
444 _aModule.type = SOLVER ;
445 else if((aType.compare("SUPERV") == 0) ||
446 (aType.compare("Superv") == 0) ||
447 (aType.compare("Supervision") == 0) ||
448 (aType.compare("superv") == 0))
449 _aModule.type = SUPERV ;
450 else if((aType.compare("DATA") == 0) ||
451 (aType.compare("Data") == 0) ||
452 (aType.compare("data") == 0))
453 _aModule.type = DATA ;
454 else if((aType.compare("VISU") == 0) ||
455 (aType.compare("Visu") == 0) ||
456 (aType.compare("visu") == 0))
457 _aModule.type = VISU ;
458 else if((aType.compare("OTHER") == 0) ||
459 (aType.compare("Other") == 0) ||
460 (aType.compare("other") == 0))
461 _aModule.type = OTHER ;
463 // If it'not in all theses cases, the type is affected to OTHER
464 _aModule.type = OTHER ;
467 // Tag test_component_impltype
468 if ( !xmlStrcmp(aComponentSubNode->name, (const xmlChar*)test_component_impltype) )
469 _aModule.implementationType = aContent;
471 // Tag test_component_implname
472 if ( !xmlStrcmp(aComponentSubNode->name, (const xmlChar*)test_component_implname) )
473 _aModule.implementationName = aContent;
475 // Tag test_component_icon
476 if ( !xmlStrcmp(aComponentSubNode->name, (const xmlChar*)test_component_icon) )
477 _aModule.icon = aContent;
479 // Tag test_component_version
480 if ( !xmlStrcmp(aComponentSubNode->name, (const xmlChar*)test_component_version) )
481 _aModule.version = aContent;
483 // Tag test_component_comment
484 if ( !xmlStrcmp(aComponentSubNode->name, (const xmlChar*)test_component_comment) )
485 _aModule.comment = aContent;
487 // Tag test_constraint
488 if ( !xmlStrcmp(aComponentSubNode->name, (const xmlChar*)test_constraint) )
489 _aModule.constraint = aContent;
491 xmlFree(aNodeContent);
493 // Process tag test_interface_list:
494 if ( !xmlStrcmp(aComponentSubNode->name, (const xmlChar*)test_interface_list) ) {
496 // Form an interface list for the component
497 xmlNodePtr aSubNode = aComponentSubNode->xmlChildrenNode;
498 while(aSubNode != NULL) {
499 // Tag test_interface_name
500 if ( !xmlStrcmp(aSubNode->name, (const xmlChar*)test_interface_name) ) {
501 xmlChar* anInterfaceName = xmlNodeGetContent(aSubNode);
502 if (anInterfaceName != NULL) {
503 _aInterface.name = (const char*)anInterfaceName;
504 xmlFree(anInterfaceName);
508 // Tag test_service_list
509 if ( !xmlStrcmp(aSubNode->name, (const xmlChar*)test_service_list) ) {
510 // Form a service list for the interface
511 xmlNodePtr aCompServiceNode = aSubNode->xmlChildrenNode;
512 while(aCompServiceNode != NULL) {
514 if ( !xmlStrcmp(aCompServiceNode->name, (const xmlChar*)"component-service") ) {
515 xmlNodePtr aCompServiceSubNode = aCompServiceNode->xmlChildrenNode;
516 while(aCompServiceSubNode != NULL)
518 xmlChar* aCompServiceData = xmlNodeGetContent(aCompServiceSubNode);
520 if ( aCompServiceData != NULL)
522 // Tag test_service_name
523 if ( !xmlStrcmp(aCompServiceSubNode->name, (const xmlChar*)test_service_name) )
524 _aService.name = (const char*)aCompServiceData;
526 // Tag test_defaultservice
527 if ( !xmlStrcmp(aCompServiceSubNode->name, (const xmlChar*)test_defaultservice) )
528 _aService.byDefault = atoi((const char*)aCompServiceData) !=0 ;
530 // Tag test_typeofnode
531 if ( !xmlStrcmp(aCompServiceSubNode->name, (const xmlChar*)test_typeofnode) )
532 _aService.typeOfNode = atoi((const char*)aCompServiceData) !=0 ;
534 xmlFree(aCompServiceData);
537 // Tag test_inParameter_list
538 if ( !xmlStrcmp(aCompServiceSubNode->name, (const xmlChar*)test_inParameter_list) ) {
539 xmlNodePtr aParamNode = aCompServiceSubNode->xmlChildrenNode;
540 while (aParamNode != NULL)
542 // Tag test_inParameter
543 if (xmlStrcmp(aParamNode->name, (const xmlChar*)test_inParameter)) {
544 aParamNode = aParamNode->next;
548 xmlNodePtr aParamItemNode = aParamNode->xmlChildrenNode;
549 while (aParamItemNode != NULL)
551 xmlChar* aParamData = xmlNodeGetContent(aParamItemNode);
553 if (aParamData != NULL)
555 // Tag test_inParameter_name
556 if ( !xmlStrcmp(aParamItemNode->name, (const xmlChar*)test_inParameter_name) )
557 _inParam.name = (const char*)aParamData;
559 // Tag test_inParameter_type
560 if ( !xmlStrcmp(aParamItemNode->name, (const xmlChar*)test_inParameter_type) )
561 _inParam.type = (const char*)aParamData;
566 aParamItemNode = aParamItemNode->next;
569 _inParamList.push_back(_inParam) ;
571 // Empty temporary structures
575 aParamNode = aParamNode->next;
578 _aService.inParameters = _inParamList;
579 _inParamList.resize(0);
582 // Tag test_outParameter_list
583 if ( !xmlStrcmp(aCompServiceSubNode->name, (const xmlChar*)test_outParameter_list) ) {
584 xmlNodePtr aParamNode = aCompServiceSubNode->xmlChildrenNode;
585 while (aParamNode != NULL)
587 // Tag test_outParameter
588 if (xmlStrcmp(aParamNode->name, (const xmlChar*)test_outParameter)) {
589 aParamNode = aParamNode->next;
593 xmlNodePtr aParamItemNode = aParamNode->xmlChildrenNode;
594 while (aParamItemNode != NULL)
596 xmlChar* anOutParamData = xmlNodeGetContent(aParamItemNode);
598 if (anOutParamData != NULL)
600 // Tag test_outParameter_name
601 if ( !xmlStrcmp(aParamItemNode->name, (const xmlChar*)test_outParameter_name) )
602 _outParam.name = (const char*)anOutParamData;
604 // Tag test_outParameter_type
605 if ( !xmlStrcmp(aParamItemNode->name, (const xmlChar*)test_outParameter_type) )
606 _outParam.type = (const char*)anOutParamData;
608 xmlFree(anOutParamData);
611 aParamItemNode = aParamItemNode->next;
614 _outParamList.push_back(_outParam) ;
616 // Empty temporary structures
620 aParamNode = aParamNode->next;
623 _aService.outParameters = _outParamList;
624 _outParamList.resize(0);
627 //@ Tag test_inDataStreamParameter_list
628 if ( !xmlStrcmp(aCompServiceSubNode->name, (const xmlChar*)test_inDataStreamParameter_list) )
630 xmlNodePtr aParamNode = aCompServiceSubNode->xmlChildrenNode;
631 while (aParamNode != NULL)
633 // Tag test_inDataStreamParameter
634 if (xmlStrcmp(aParamNode->name, (const xmlChar*)test_inDataStreamParameter)) {
635 aParamNode = aParamNode->next;
639 xmlNodePtr aParamItemNode = aParamNode->xmlChildrenNode;
640 while (aParamItemNode != NULL)
642 xmlChar* inDataStreamParamData = xmlNodeGetContent(aParamItemNode);
644 if (inDataStreamParamData != NULL)
646 // Tag test_inDataStreamParameter_name
647 if ( !xmlStrcmp(aParamItemNode->name, (const xmlChar*)test_inDataStreamParameter_name) )
648 _inDataStreamParam.name = (const char*)inDataStreamParamData;
650 // Tag test_inDataStreamParameter_type
651 if ( !xmlStrcmp(aParamItemNode->name, (const xmlChar*)test_inDataStreamParameter_type) )
652 _inDataStreamParam.type = (const char*)inDataStreamParamData;
654 // Tag test_inDataStreamParameter_dependency
655 if ( !xmlStrcmp(aParamItemNode->name, (const xmlChar*)test_inDataStreamParameter_dependency) )
656 _inDataStreamParam.dependency = (const char*)inDataStreamParamData;
658 xmlFree(inDataStreamParamData);
661 aParamItemNode = aParamItemNode->next;
664 _inDataStreamParamList.push_back(_inDataStreamParam) ;
666 // Empty temporary structures
667 _inDataStreamParam.type = "";
668 _inDataStreamParam.name = "";
669 _inDataStreamParam.dependency = "";
671 aParamNode = aParamNode->next;
674 _aService.inDataStreamParameters = _inDataStreamParamList;
675 _inDataStreamParamList.resize(0);
678 // Tag test_outDataStreamParameter_list
679 if ( !xmlStrcmp(aCompServiceSubNode->name, (const xmlChar*)test_outDataStreamParameter_list) )
681 xmlNodePtr aParamNode = aCompServiceSubNode->xmlChildrenNode;
682 while (aParamNode != NULL)
684 // Tag test_outDataStreamParameter
685 if (xmlStrcmp(aParamNode->name, (const xmlChar*)test_outDataStreamParameter)) {
686 aParamNode = aParamNode->next;
690 xmlNodePtr aParamItemNode = aParamNode->xmlChildrenNode;
691 while (aParamItemNode != NULL)
693 xmlChar* outDataStreamParamData = xmlNodeGetContent(aParamItemNode);
695 if (outDataStreamParamData != NULL)
697 // Tag test_outDataStreamParameter_name
698 if ( !xmlStrcmp(aParamItemNode->name, (const xmlChar*)test_outDataStreamParameter_name) )
699 _outDataStreamParam.name = (const char*)outDataStreamParamData;
701 // Tag test_outDataStreamParameter_type
702 if ( !xmlStrcmp(aParamItemNode->name, (const xmlChar*)test_outDataStreamParameter_type) )
703 _outDataStreamParam.type = (const char*)outDataStreamParamData;
705 // Tag test_outDataStreamParameter_dependency
706 if ( !xmlStrcmp(aParamItemNode->name, (const xmlChar*)test_outDataStreamParameter_dependency) )
707 _outDataStreamParam.dependency = (const char*)outDataStreamParamData;
709 xmlFree(outDataStreamParamData);
712 aParamItemNode = aParamItemNode->next;
715 _outDataStreamParamList.push_back(_outDataStreamParam) ;
717 // Empty temporary structures
718 _outDataStreamParam.type = "";
719 _outDataStreamParam.name = "";
720 _outDataStreamParam.dependency = "";
722 aParamNode = aParamNode->next;
725 _aService.outDataStreamParameters = _outDataStreamParamList;
726 _outDataStreamParamList.resize(0);
729 aCompServiceSubNode = aCompServiceSubNode->next;
732 // Put formed service into the list
733 _serviceList.push_back(_aService);
735 // Empty temporary structures
737 _aService.typeOfNode = 1;
738 _aService.inParameters.resize(0);
739 _aService.outParameters.resize(0);
740 _aService.inDataStreamParameters.resize(0);
741 _aService.outDataStreamParameters.resize(0);
744 aCompServiceNode = aCompServiceNode->next;
747 _aInterface.services = _serviceList ;
749 // Empty temporary structures
750 _serviceList.resize(0);
751 _interfaceList.push_back(_aInterface);
752 _aInterface.name ="";
753 _aInterface.services.resize(0);
756 aSubNode = aSubNode->next;
759 _aModule.interfaces = _interfaceList ;
760 _interfaceList.resize(0);
763 aComponentSubNode = aComponentSubNode->next;
766 _moduleList.push_back(_aModule);
768 aComponentNode = aComponentNode->next;
772 aCurNode = aCurNode->next;