1 // SALOME ModuleCatalog : implementation of ModuleCatalog server which parsers xml description of modules
3 // Copyright (C) 2003 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.
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.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org
24 // File : SALOME_ModuleCatalog_impl.cxx
25 // Author : Estelle Deville
29 #include "SALOME_ModuleCatalog_impl.hxx"
30 #include "SALOME_ModuleCatalog_Acomponent_impl.hxx"
34 #include <qstringlist.h>
35 #include <qfileinfo.h>
39 static int MYDEBUG = 0;
41 static int MYDEBUG = 0;
44 static const char* SEPARATOR = ":";
46 //----------------------------------------------------------------------
47 // Function : SALOME_ModuleCatalogImpl
48 // Purpose : Constructor
49 //----------------------------------------------------------------------
50 SALOME_ModuleCatalogImpl::SALOME_ModuleCatalogImpl(int argc, char** argv, CORBA::ORB_ptr orb) : _orb(orb)
52 if(MYDEBUG) MESSAGE("Catalog creation");
54 // Conversion rules for component types
55 ComponentTypeConvert[GEOM]
56 = SALOME_ModuleCatalog::GEOM;
57 ComponentTypeConvert[MESH]
58 = SALOME_ModuleCatalog::MESH;
59 ComponentTypeConvert[Med]
60 = SALOME_ModuleCatalog::Med;
61 ComponentTypeConvert[SOLVER]
62 = SALOME_ModuleCatalog::SOLVER;
63 ComponentTypeConvert[DATA]
64 = SALOME_ModuleCatalog::DATA;
65 ComponentTypeConvert[VISU]
66 = SALOME_ModuleCatalog::VISU;
67 ComponentTypeConvert[SUPERV]
68 = SALOME_ModuleCatalog::SUPERV;
69 ComponentTypeConvert[OTHER]
70 = SALOME_ModuleCatalog::OTHER;
72 // Conversion rules for datastream parameters type and dependency
73 DataStreamTypeConvert["UNKNOWN"]
74 = SALOME_ModuleCatalog::DATASTREAM_UNKNOWN;
75 DataStreamTypeConvert["INTEGER"]
76 = SALOME_ModuleCatalog::DATASTREAM_INTEGER;
77 DataStreamTypeConvert["FLOAT"]
78 = SALOME_ModuleCatalog::DATASTREAM_FLOAT;
79 DataStreamTypeConvert["DOUBLE"]
80 = SALOME_ModuleCatalog::DATASTREAM_DOUBLE;
81 DataStreamTypeConvert["STRING"]
82 = SALOME_ModuleCatalog::DATASTREAM_STRING;
83 DataStreamTypeConvert["BOOLEAN"]
84 = SALOME_ModuleCatalog::DATASTREAM_BOOLEAN;
86 DataStreamDepConvert["UNDEFINED"]
87 = SALOME_ModuleCatalog::DATASTREAM_UNDEFINED;
88 DataStreamDepConvert["T"]
89 = SALOME_ModuleCatalog::DATASTREAM_TEMPORAL;
90 DataStreamDepConvert["I"]
91 = SALOME_ModuleCatalog::DATASTREAM_ITERATIVE;
93 // Empty used variables
94 _general_module_list.resize(0);
95 _general_path_list.resize(0);
97 _personal_module_list.resize(0);
98 _personal_path_list.resize(0);
100 // Parse the arguments given at server run
101 if (!_parseArguments(argc, argv,&_general_path,&_personal_path))
102 if(MYDEBUG) MESSAGE( "Error while argument parsing" );
104 // Test existency of files
105 if (_general_path == NULL){
106 if(MYDEBUG) MESSAGE( "Error the general catalog should be indicated" );
108 // Affect the _general_module_list and _general_path_list members
109 // with the common catalog
112 = QStringList::split( SEPARATOR, _general_path,
113 false ); // skip empty entries
115 for ( int i = 0; i < dirList.count(); i++ ) {
116 QFileInfo fileInfo( dirList[ i ] );
117 if ( fileInfo.isFile() && fileInfo.exists() ) {
118 _parse_xml_file(fileInfo.filePath(),
119 _general_module_list,
124 // Verification of _general_path_list content
125 if(!_verify_path_prefix(_general_path_list)){
126 if(MYDEBUG) MESSAGE( "Error while parsing the general path list, "
127 "differents paths are associated to the same computer,"
128 "the first one will be choosen");
130 if(MYDEBUG) MESSAGE("General path list OK");
133 if(_personal_path != NULL){
134 // Initialize the _personal_module_list and
135 // _personal_path_list members with the personal catalog files
136 _parse_xml_file(_personal_path,
137 _personal_module_list,
138 _personal_path_list);
140 // Verification of _general_path_list content
141 if(!_verify_path_prefix(_personal_path_list)){
142 if(MYDEBUG) MESSAGE("Error while parsing the personal path list, "
143 "differents paths are associated to the same computer, "
144 "the first one will be choosen" );
146 if(MYDEBUG) MESSAGE("Personal path list OK");
149 if(MYDEBUG) MESSAGE("No personal catalog indicated or error while "
150 "opening the personal catalog");
154 //----------------------------------------------------------------------
155 // Function : ~SALOME_ModuleCatalogImpl
156 // Purpose : Destructor
157 //----------------------------------------------------------------------
158 SALOME_ModuleCatalogImpl::~SALOME_ModuleCatalogImpl()
160 if(MYDEBUG) MESSAGE("Catalog Destruction");
164 //----------------------------------------------------------------------
165 // Function : GetComputerList
166 // Purpose : get a computer list
167 //----------------------------------------------------------------------
168 SALOME_ModuleCatalog::ListOfComputers*
169 SALOME_ModuleCatalogImpl::GetComputerList()
171 SALOME_ModuleCatalog::ListOfComputers_var _list_computers =
172 new SALOME_ModuleCatalog::ListOfComputers;
173 return _list_computers._retn();
176 //----------------------------------------------------------------------
177 // Function : GetPathPrefix
178 // Purpose : get the PathPrefix of a computer
179 //----------------------------------------------------------------------
181 SALOME_ModuleCatalogImpl::GetPathPrefix(const char* machinename) {
182 if(MYDEBUG) MESSAGE("Begin of GetPathPrefix");
183 // Variables initialisation
187 // Parse all the path prefixes
188 // looking for the wanted computer
189 for (unsigned int ind = 0 ; ind < _personal_path_list.size() ; ind++)
191 for (unsigned int ind1 = 0 ; ind1 < _personal_path_list[ind].listOfComputer.size() ; ind1++)
193 if (strcmp(machinename, _personal_path_list[ind].listOfComputer[ind1].c_str()) == 0)
197 // affect the path to be returned
198 const char* _temp = _personal_path_list[ind].path.c_str() ;
199 _path = new char[strlen(_temp)+1];
207 for (unsigned int ind = 0 ; ind < _general_path_list.size() ; ind++)
209 for (unsigned int ind1 = 0 ; ind1 < _general_path_list[ind].listOfComputer.size() ; ind1++)
211 if (strcmp(machinename, _general_path_list[ind].listOfComputer[ind1].c_str()) == 0)
215 // affect the path to be returned
216 const char* _temp = _general_path_list[ind].path.c_str() ;
217 _path = new char[strlen(_temp)+1];
227 //----------------------------------------------------------------------
228 // Function : GetComponentList
229 // Purpose : get a component list
230 // If a component is defined in the personal catalog and
231 // in the general catalog (same name), the component defined
232 // in the personal catalog is used
233 //----------------------------------------------------------------------
234 SALOME_ModuleCatalog::ListOfComponents*
235 SALOME_ModuleCatalogImpl::GetComponentList()
237 if(MYDEBUG) MESSAGE("Begin of GetComponentList");
238 SALOME_ModuleCatalog::ListOfComponents_var _list_components =
239 new SALOME_ModuleCatalog::ListOfComponents;
241 _list_components->length(_personal_module_list.size());
243 // All the components defined in the personal catalog are taken
244 for(unsigned int ind=0; ind < _personal_module_list.size();ind++){
245 _list_components[ind]=(_personal_module_list[ind].name).c_str();
246 if(MYDEBUG) SCRUTE(_list_components[ind]) ;
249 int indice = _personal_module_list.size() ;
252 // The components in the general catalog are taken only if they're
253 // not defined in the personal catalog
255 for(unsigned int ind=0; ind < _general_module_list.size();ind++){
257 for(ind=0; ind < _general_module_list.size();ind++){
260 for(unsigned int ind1=0; ind1 < _personal_module_list.size();ind1++){
261 // searching if the component is already defined in
262 // the personal catalog
263 if ((_general_module_list[ind].name.compare(_personal_module_list[ind1].name)) == 0)
267 if(MYDEBUG) MESSAGE("A new component " << _general_module_list[ind].name
268 << " has to be to added in the list");
269 _list_components->length(indice+1);
270 // The component is not already defined => has to be taken
271 _list_components[indice]=(_general_module_list[ind].name).c_str();
272 if(MYDEBUG) SCRUTE(_list_components[indice]) ;
276 if(MYDEBUG) MESSAGE("The component " <<_general_module_list[ind].name
277 << " was already defined in the personal catalog") ;
281 if(MYDEBUG) MESSAGE ( "End of GetComponentList" );
282 return _list_components._retn();
286 //----------------------------------------------------------------------
287 // Function : GetComponentIconeList
288 // Purpose : get a component list of component name and component icone
289 // If a component is defined in the personal catalog and
290 // in the general catalog (same name), the component defined
291 // in the personal catalog is used
292 //----------------------------------------------------------------------
293 SALOME_ModuleCatalog::ListOfIAPP_Affich*
294 SALOME_ModuleCatalogImpl::GetComponentIconeList()
296 if(MYDEBUG) MESSAGE("Begin of GetComponentIconeList");
298 SALOME_ModuleCatalog::ListOfIAPP_Affich_var _list_components_icone =
299 new SALOME_ModuleCatalog::ListOfIAPP_Affich;
301 _list_components_icone->length(_personal_module_list.size());
303 // All the components defined in the personal catalog are taken
304 for(unsigned int ind=0; ind < _personal_module_list.size();ind++){
305 _list_components_icone[ind].modulename=(_personal_module_list[ind].name).c_str();
306 _list_components_icone[ind].moduleusername=(_personal_module_list[ind].username).c_str();
307 _list_components_icone[ind].moduleicone=(_personal_module_list[ind].icon).c_str();
308 _list_components_icone[ind].moduleversion=(_personal_module_list[ind].version).c_str();
309 _list_components_icone[ind].modulecomment=(_personal_module_list[ind].comment).c_str();
310 //if(MYDEBUG) SCRUTE(_list_components_icone[ind].modulename);
311 //if(MYDEBUG) SCRUTE(_list_components_icone[ind].moduleicone);
314 int indice = _personal_module_list.size() ;
317 // The components in the general catalog are taken only if they're
318 // not defined in the personal catalog
320 for(unsigned int ind=0; ind < _general_module_list.size();ind++){
322 for(ind=0; ind < _general_module_list.size();ind++){
325 for(unsigned int ind1=0; ind1 < _personal_module_list.size();ind1++){
326 // searching if the component is aleready defined in
327 // the personal catalog
328 if((_general_module_list[ind].name.compare(_personal_module_list[ind1].name)) == 0)
332 // if(MYDEBUG) MESSAGE("A new component " << _general_module_list[ind].name << " has to be to added in the list");
333 _list_components_icone->length(indice+1);
334 // The component is not already defined => has to be taken
335 _list_components_icone[indice].modulename=_general_module_list[ind].name.c_str();
336 _list_components_icone[indice].moduleusername=_general_module_list[ind].username.c_str();
337 _list_components_icone[indice].moduleicone=_general_module_list[ind].icon.c_str();
338 _list_components_icone[indice].moduleversion=_general_module_list[ind].version.c_str();
339 _list_components_icone[indice].modulecomment=_general_module_list[ind].comment.c_str();
340 //if(MYDEBUG) SCRUTE(_list_components_icone[indice].modulename) ;
341 //if(MYDEBUG) SCRUTE(_list_components_icone[indice].moduleicone);
346 //if(MYDEBUG) MESSAGE("The component " <<_general_module_list[ind].name << " was already defined in the personal catalog");
349 return _list_components_icone._retn() ;
352 //----------------------------------------------------------------------
353 // Function : GetTypedComponentList
354 // Purpose : get a component list of a wanted type
355 // If a component is defined in the personal catalog and
356 // in the general catalog (same name), the component defined
357 // in the personal catalog is used
358 //----------------------------------------------------------------------
359 SALOME_ModuleCatalog::ListOfComponents*
360 SALOME_ModuleCatalogImpl::GetTypedComponentList(SALOME_ModuleCatalog::ComponentType component_type)
362 if(MYDEBUG) MESSAGE("Begin of GetTypedComponentList");
363 SALOME_ModuleCatalog::ListOfComponents_var _list_typed_component =
364 new SALOME_ModuleCatalog::ListOfComponents;
367 _list_typed_component->length(0);
368 // Transform SALOME_ModuleCatalog::ComponentType in ParserComponentType
369 ParserComponentType _temp_component_type;
370 switch(component_type){
371 case SALOME_ModuleCatalog::GEOM:
372 _temp_component_type = GEOM ;
374 case SALOME_ModuleCatalog::MESH:
375 _temp_component_type = MESH;
377 case SALOME_ModuleCatalog::Med:
378 _temp_component_type = Med;
380 case SALOME_ModuleCatalog::SOLVER:
381 _temp_component_type = SOLVER;
383 case SALOME_ModuleCatalog::DATA:
384 _temp_component_type = DATA;
386 case SALOME_ModuleCatalog::VISU:
387 _temp_component_type = VISU;
389 case SALOME_ModuleCatalog::SUPERV:
390 _temp_component_type = SUPERV;
392 case SALOME_ModuleCatalog::OTHER:
393 _temp_component_type = OTHER;
397 // All the components in the personal catalog are taken
398 for (unsigned int ind=0; ind < _personal_module_list.size();ind++)
400 if (_personal_module_list[ind].type == _temp_component_type)
402 _list_typed_component->length(_j + 1);
403 _list_typed_component[_j] = (_moduleList[ind].name).c_str();
404 //if(MYDEBUG) SCRUTE(_list_typed_component[_j]);
409 int indice = _list_typed_component->length() ;
412 // The components in the general catalog are taken only if they're
413 // not defined in the personal catalog
415 for (unsigned int ind=0; ind < _general_module_list.size();ind++)
417 for (ind=0; ind < _general_module_list.size();ind++)
422 if(_general_module_list[ind].type == _temp_component_type)
424 for (unsigned int ind1=0; ind1 < _personal_module_list.size();ind1++)
426 // searching if the component is aleready defined in
427 // the personal catalog
428 if ((_general_module_list[ind].name.compare(_personal_module_list[ind1].name)) == 0)
433 //if(MYDEBUG) MESSAGE("A new component " << _general_module_list[ind].name << " has to be to added in the list");
434 _list_typed_component->length(indice+1);
435 // The component is not already defined => has to be taken
436 _list_typed_component[indice]=(_general_module_list[ind].name).c_str();
437 //if(MYDEBUG) SCRUTE(_list_typed_component[indice]) ;
442 //if(MYDEBUG) MESSAGE("The component " <<_general_module_list[ind].name << " was already defined in the personal catalog") ;
447 return _list_typed_component._retn();
450 //----------------------------------------------------------------------
451 // Function : GetComponent
452 // Purpose : get a component
453 // If a component is defined in the personal catalog and
454 // in the general catalog (same name), the component defined
455 // in the personal catalog is used
456 //----------------------------------------------------------------------
457 SALOME_ModuleCatalog::Acomponent_ptr
458 SALOME_ModuleCatalogImpl::GetComponent(const char* name)
460 // Looking for component named "componentname" in the personal catalog
461 // If found, get name, interfaces and constraint
462 // If not found, looking for component named "componentname" in
463 // the general catalog
464 // If found, get name, interfaces and constraint
465 // If not found, NULL pointer is returned
468 ParserComponent *C_parser = NULL;
469 ParserPathPrefixes *pp = NULL;
471 SALOME_ModuleCatalog::Acomponent_ptr compo = NULL;
473 C_parser = findComponent(s);
476 // DebugParserComponent(*C_parser);
478 SALOME_ModuleCatalog::Component C_corba;
479 duplicate(C_corba, *C_parser);
482 SALOME_ModuleCatalog_AcomponentImpl * aComponentImpl =
483 new SALOME_ModuleCatalog_AcomponentImpl(C_corba);
485 compo = aComponentImpl->_this();
488 // Not found in the personal catalog and in the general catalog
489 // return NULL object
490 if(MYDEBUG) MESSAGE("Component with name " << name
491 << " not found in catalog");
498 SALOME_ModuleCatalog::Component *
499 SALOME_ModuleCatalogImpl::GetComponentInfo(const char *name)
503 ParserComponent * C_parser = findComponent(s);
507 SALOME_ModuleCatalog::Component * C_corba
508 = new SALOME_ModuleCatalog::Component;
509 duplicate(*C_corba, *C_parser);
517 SALOME_ModuleCatalogImpl::findComponent(const string & name)
519 ParserComponent * C_parser = NULL;
522 for (unsigned int ind=0; ind < _personal_module_list.size();ind++)
523 if (name.compare(_personal_module_list[ind].name) == 0)
525 if(MYDEBUG) MESSAGE("Component named " << name
526 << " found in the personal catalog");
527 C_parser = &(_personal_module_list[ind]);
532 for (unsigned int ind=0; ind < _general_module_list.size();ind++)
534 if (name.compare(_general_module_list[ind].name) == 0)
536 if(MYDEBUG) MESSAGE("Component named " << name
537 << " found in the general catalog");
538 C_parser = &(_general_module_list[ind]);
546 //----------------------------------------------------------------------
547 // Function : _parse_xml_file
548 // Purpose : parse one module catalog
549 //----------------------------------------------------------------------
551 SALOME_ModuleCatalogImpl::_parse_xml_file(const char* file,
552 ParserComponents& modulelist,
553 ParserPathPrefixes& pathList)
555 if(MYDEBUG) BEGIN_OF("_parse_xml_file");
556 if(MYDEBUG) SCRUTE(file);
558 SALOME_ModuleCatalog_Handler* handler = new SALOME_ModuleCatalog_Handler();
561 QXmlInputSource source(xmlFile);
563 QXmlSimpleReader reader;
564 reader.setContentHandler( handler );
565 reader.setErrorHandler( handler );
566 reader.parse( source );
571 for ( i = 0; i < _moduleList.size(); i++) {
572 for (j=0; j<modulelist.size(); j++) {
573 if (modulelist[j].name == _moduleList[i].name)
576 if (j < modulelist.size())
577 modulelist[j] = _moduleList[i];
579 modulelist.push_back(_moduleList[i]);
582 for ( i=0; i < _pathList.size(); i++)
583 pathList.push_back(_pathList[i]) ;
585 for (j=0; j<modulelist.size(); j++)
586 modulelist[j].prefixes = pathList;
590 SALOME_ModuleCatalogImpl::ImportXmlCatalogFile(const char* file)
592 _parse_xml_file(file, _personal_module_list, _personal_path_list);
597 // Duplicate functions create a Corba structure (component,
598 // interface, service, parameter) from the corresponding C++
602 //----------------------------------------------------------------------
603 // Function : duplicate
604 // Purpose : create a component from the catalog parsing
605 //----------------------------------------------------------------------
606 void SALOME_ModuleCatalogImpl::duplicate
607 (SALOME_ModuleCatalog::Component & C_corba,
608 const ParserComponent & C_parser)
610 C_corba.name = CORBA::string_dup(C_parser.name.c_str());
611 C_corba.username = CORBA::string_dup(C_parser.username.c_str());
612 C_corba.multistudy = C_parser.multistudy;
613 C_corba.icon = CORBA::string_dup(C_parser.icon.c_str());
614 C_corba.type = ComponentTypeConvert[C_parser.type];
615 C_corba.implementationType = C_parser.implementationType;
617 unsigned int _length = C_parser.interfaces.size();
618 C_corba.interfaces.length(_length);
620 for (unsigned int ind = 0; ind < _length; ind++)
621 duplicate(C_corba.interfaces[ind], C_parser.interfaces[ind]);
625 //----------------------------------------------------------------------
626 // Function : duplicate
627 // Purpose : create an interface from the catalog parsing
628 //----------------------------------------------------------------------
629 void SALOME_ModuleCatalogImpl::duplicate
630 (SALOME_ModuleCatalog::DefinitionInterface & I_corba,
631 const ParserInterface & I_parser)
633 //duplicate interface name
634 I_corba.interfacename = CORBA::string_dup(I_parser.name.c_str());
636 // duplicate service list
637 unsigned int _length = I_parser.services.size();
638 if(MYDEBUG) SCRUTE(_length);
639 // I_corba.interfaceservicelist
640 // = new SALOME_ModuleCatalog::ListOfInterfaceService;
641 I_corba.interfaceservicelist.length(_length);
643 for (unsigned int ind1 = 0; ind1 < _length ; ind1 ++)
644 duplicate(I_corba.interfaceservicelist[ind1],
645 I_parser.services[ind1]);
648 //----------------------------------------------------------------------
649 // Function : duplicate
650 // Purpose : create a service from the catalog parsing
651 //----------------------------------------------------------------------
652 void SALOME_ModuleCatalogImpl::duplicate
653 (SALOME_ModuleCatalog::Service & S_corba,
654 const ParserService & S_parser)
656 // duplicate service name
657 S_corba.ServiceName = CORBA::string_dup(S_parser.name.c_str());
659 // duplicate service by default
660 S_corba.Servicebydefault = S_parser.byDefault;
662 S_corba.TypeOfNode = S_parser.typeOfNode;
664 unsigned int _length;
666 // duplicate in Parameters
667 _length = S_parser.inParameters.size();
668 S_corba.ServiceinParameter.length(_length);
670 for (unsigned int ind2 = 0; ind2 < _length ; ind2 ++)
671 duplicate(S_corba.ServiceinParameter[ind2],
672 S_parser.inParameters[ind2]);
674 // duplicate out Parameters
675 _length = S_parser.outParameters.size();
676 S_corba.ServiceoutParameter.length(_length);
679 for (unsigned int ind2 = 0; ind2 < _length ; ind2 ++)
681 for (ind2 = 0; ind2 < _length ; ind2 ++)
683 duplicate(S_corba.ServiceoutParameter[ind2],
684 S_parser.outParameters[ind2]);
686 // duplicate in DataStreamParameters
687 _length = S_parser.inDataStreamParameters.size();
688 S_corba.ServiceinDataStreamParameter.length(_length);
691 for (unsigned int ind2 = 0; ind2 < _length ; ind2 ++)
693 for (ind2 = 0; ind2 < _length ; ind2 ++)
695 duplicate(S_corba.ServiceinDataStreamParameter[ind2],
696 S_parser.inDataStreamParameters[ind2]);
698 // duplicate out DataStreamParameters
699 _length = S_parser.outDataStreamParameters.size();
700 if(MYDEBUG) SCRUTE(_length);
701 S_corba.ServiceoutDataStreamParameter.length(_length);
704 for (unsigned int ind2 = 0; ind2 < _length ; ind2 ++)
706 for (ind2 = 0; ind2 < _length ; ind2 ++)
708 duplicate(S_corba.ServiceoutDataStreamParameter[ind2],
709 S_parser.outDataStreamParameters[ind2]);
712 //----------------------------------------------------------------------
713 // Function : duplicate
714 // Purpose : create a service parameter from the catalog parsing
715 //----------------------------------------------------------------------
716 void SALOME_ModuleCatalogImpl::duplicate
717 (SALOME_ModuleCatalog::ServicesParameter & P_corba,
718 const ParserParameter & P_parser)
720 // duplicate parameter name
721 P_corba.Parametername = CORBA::string_dup(P_parser.name.c_str());
723 // duplicate parameter type
724 P_corba.Parametertype = CORBA::string_dup(P_parser.type.c_str());
728 //----------------------------------------------------------------------
729 // Function : duplicate
730 // Purpose : create a service datastream parameter from the catalog parsing
731 //----------------------------------------------------------------------
732 void SALOME_ModuleCatalogImpl::duplicate
733 (SALOME_ModuleCatalog::ServicesDataStreamParameter & P_corba,
734 const ParserDataStreamParameter & P_parser)
736 std::map < std::string,
737 SALOME_ModuleCatalog::DataStreamType >::const_iterator it_type;
739 std::map < std::string,
740 SALOME_ModuleCatalog::DataStreamDependency >::const_iterator it_dep;
742 // duplicate parameter name
743 P_corba.Parametername = CORBA::string_dup(P_parser.name.c_str());
746 // it_type = DataStreamTypeConvert.find(P_parser.type);
747 // P_corba.Parametertype
748 // = (it_type == DataStreamTypeConvert.end())
749 // ? it_type->second : SALOME_ModuleCatalog::DATASTREAM_UNKNOWN;
751 if(MYDEBUG) SCRUTE(P_parser.type);
752 P_corba.Parametertype = SALOME_ModuleCatalog::DATASTREAM_UNKNOWN;
753 for (it_type = DataStreamTypeConvert.begin();
754 it_type != DataStreamTypeConvert.end();
756 if (P_parser.type.compare(it_type->first) == 0) {
757 P_corba.Parametertype = it_type->second;
760 if(MYDEBUG) SCRUTE(P_corba.Parametertype);
762 // duplicate parameter type
765 // it_type = DataStreamTypeConvert.find(P_parser.type);
766 // P_corba.Parametertype
767 // = (it_type == DataStreamTypeConvert.end())
768 // ? it_type->second : SALOME_ModuleCatalog::DATASTREAM_UNKNOWN;
770 if(MYDEBUG) SCRUTE(P_parser.dependency);
771 P_corba.Parameterdependency = SALOME_ModuleCatalog::DATASTREAM_UNDEFINED;
772 for (it_dep = DataStreamDepConvert.begin();
773 it_dep != DataStreamDepConvert.end();
775 if (P_parser.dependency.compare(it_dep->first) == 0) {
776 P_corba.Parameterdependency = it_dep->second;
780 if(MYDEBUG) SCRUTE(P_corba.Parameterdependency);
783 //----------------------------------------------------------------------
784 // Function : duplicate
785 // Purpose : create the path prefix structures from the catalog parsing
786 //----------------------------------------------------------------------
788 SALOME_ModuleCatalogImpl::duplicate(ParserPathPrefixes &L_out,
789 const ParserPathPrefixes &L_in)
795 //----------------------------------------------------------------------
796 // Function : _verify_path_prefix
797 // Purpose : verify the path prefix structures from the catalog parsing
798 // Verify that there only one path prefix associated to a
799 // particular computer
800 //----------------------------------------------------------------------
802 SALOME_ModuleCatalogImpl::_verify_path_prefix(ParserPathPrefixes & pathList)
804 bool _return_value = true;
805 vector<string> _machine_list;
807 // Fill a list of all computers indicated in the path list
808 for (unsigned int ind = 0; ind < pathList.size(); ind++)
810 for (unsigned int ind1 = 0 ; ind1 < pathList[ind].listOfComputer.size(); ind1++)
812 _machine_list.push_back(pathList[ind].listOfComputer[ind1]);
816 // Parse if a computer name is twice in the list of computers
818 for (unsigned int ind = 0; ind < _machine_list.size(); ind++)
820 for (ind = 0; ind < _machine_list.size(); ind++)
823 for (unsigned int ind1 = ind+1 ; ind1 < _machine_list.size(); ind1++)
825 if(_machine_list[ind].compare(_machine_list[ind1]) == 0)
827 if(MYDEBUG) MESSAGE( "The computer " << _machine_list[ind] << " is indicated more than once in the path list");
828 _return_value = false;
832 return _return_value;
836 //----------------------------------------------------------------------
837 // Function : _parseArguments
838 // Purpose : parse arguments to get general and personal catalog files
839 //----------------------------------------------------------------------
841 SALOME_ModuleCatalogImpl::_parseArguments(int argc, char **argv,
845 bool _return_value = true;
848 for (int ind = 0; ind < argc ; ind++)
851 if (strcmp(argv[ind],"-help") == 0)
853 INFOS( "Usage: " << argv[0]
854 << " -common 'path to general catalog' "
855 " -personal 'path to personal catalog' "
856 " -ORBInitRef NameService=corbaname::localhost");
857 _return_value = false ;
860 if (strcmp(argv[ind],"-common") == 0)
864 // General catalog file
865 *_general = argv[ind + 1] ;
868 else if (strcmp(argv[ind],"-personal") == 0)
872 // Personal catalog file
873 *_personal = argv[ind + 1] ;
877 return _return_value;