Version: 8.3.0
YACS::ENGINE::SessionCataLoader Class Reference

#include <SessionCataLoader.hxx>

Inheritance diagram for YACS::ENGINE::SessionCataLoader:
Collaboration diagram for YACS::ENGINE::SessionCataLoader:

Public Member Functions

 SessionCataLoader ()
 
 SessionCataLoader (const std::string &path)
 
virtual ~SessionCataLoader ()
 
virtual void loadCata (Catalog *cata)
 
virtual void loadTypesOld (Catalog *cata)
 
virtual void loadTypes (Catalog *cata, SALOME_ModuleCatalog::ModuleCatalog_ptr catalog)
 
virtual CatalogLoadernewLoader (const std::string &path)
 
virtual void importComponent (Catalog *cata, SALOME_ModuleCatalog::Acomponent_ptr compo)
 import a SALOME component definition in a YACS catalog More...
 
- Public Member Functions inherited from YACS::ENGINE::CatalogLoader
 CatalogLoader ()
 
 CatalogLoader (const std::string &path)
 
virtual ~CatalogLoader ()
 
virtual void load (Catalog *cata, const std::string &path)
 

Protected Attributes

std::string _errors
 
- Protected Attributes inherited from YACS::ENGINE::CatalogLoader
std::string _path
 

Detailed Description

Definition at line 34 of file SessionCataLoader.hxx.

Constructor & Destructor Documentation

YACS::ENGINE::SessionCataLoader::SessionCataLoader ( )
inline

Definition at line 37 of file SessionCataLoader.hxx.

Referenced by newLoader().

37 :CatalogLoader(){};
SessionCataLoader::SessionCataLoader ( const std::string &  path)

Definition at line 36 of file SessionCataLoader.cxx.

36  :CatalogLoader(path)
37 {
38  //path should be a CORBA URI like that : corbaname::machine:port/NameService#Kernel.dir/ModulCatalog.object
39  //or equivalent corbaname
40 }
SessionCataLoader::~SessionCataLoader ( )
virtual

Definition at line 223 of file SessionCataLoader.cxx.

References DEBTRACE.

224 {
225  DEBTRACE ("SessionCataLoader::~SessionCataLoader");
226 }

Member Function Documentation

void SessionCataLoader::importComponent ( Catalog cata,
SALOME_ModuleCatalog::Acomponent_ptr  compo 
)
virtual

import a SALOME component definition in a YACS catalog

SALOME components can have several interfaces. YACS for the moment allows only one interface by component, so if there is only one interface we import it. If we have more than one interface, we import the one with the same name as the component or the first one.

Parameters
cata: a YACS catalog
compo: a CORBA reference on a component in a SALOME_ModuleCatalog

Definition at line 66 of file SessionCataLoader.cxx.

References YACS::ENGINE::Catalog::_componentMap, _errors, YACS::ENGINE::ComponentDefinition::_serviceMap, YACS::ENGINE::Catalog::_typeMap, YACS::ENGINE::Runtime::createCompoNode(), DEBTRACE, YACS::ENGINE::ElementaryNode::edAddInputDataStreamPort(), YACS::ENGINE::ElementaryNode::edAddInputPort(), YACS::ENGINE::ElementaryNode::edAddOutputDataStreamPort(), YACS::ENGINE::ElementaryNode::edAddOutputPort(), YACS::ENGINE::getRuntime(), YACS::ENGINE::ServiceNode::setMethod(), and YACS::ENGINE::ServiceNode::setRef().

Referenced by loadCata().

67 {
68  CORBA::String_var componame = compo->componentname();
69 
70  DEBTRACE("Implementation type : " << compo->implementation_type());
71 #ifdef NEW_KERNEL
72  SALOME_ModuleCatalog::ImplType imptyp=compo->implementation_type();
73  if(imptyp == SALOME_ModuleCatalog::SO)DEBTRACE("Dyn lib");
74  if(imptyp == SALOME_ModuleCatalog::PY)DEBTRACE("Python module");
75  if(imptyp == SALOME_ModuleCatalog::EXE)DEBTRACE("Executable");
76  DEBTRACE("Implementation name : " << compo->implementation_name());
77 #endif
78 
79  SALOME_ModuleCatalog::ListOfInterfaces_var interfacename_list = compo->GetInterfaceList();
80  if(interfacename_list->length() == 0)
81  return;
82  int found=0;
83  for (int j = 0; j < interfacename_list->length();j++)
84  {
85  DEBTRACE ("Interface : " << interfacename_list[j]);
86  if(strcmp(componame,interfacename_list[j]) == 0)
87  {
88  found=j;
89  break;
90  }
91  }
92  DEBTRACE ("Interface found : " << interfacename_list[found]);
93  ComponentDefinition* compodef=new ComponentDefinition((const char*)componame);
94 
95  SALOME_ModuleCatalog::DefinitionInterface_var interface;
96  interface= compo->GetInterface(interfacename_list[found]);
97  SALOME_ModuleCatalog::ListOfInterfaceService services = interface->interfaceservicelist;
98  for (int k = 0; k < services.length(); k++)
99  {
100  DEBTRACE("Service : " << services[k].ServiceName);
101  const char* s=services[k].ServiceName;
102  //create a new service node (prototype)
103  ServiceNode* node=getRuntime()->createCompoNode("Salome",s);
104  node->setRef((const char*)componame);
105  node->setMethod(s);
106  for (int kk=0;kk< services[k].ServiceinParameter.length();kk++)
107  {
108  DEBTRACE("Parameter : " << services[k].ServiceinParameter[kk].Parametername);
109  DEBTRACE("Type : " << services[k].ServiceinParameter[kk].Parametertype);
110  const char* ty=services[k].ServiceinParameter[kk].Parametertype;
111  if(cata->_typeMap.count(ty)==0)
112  {
113  std::stringstream msg;
114  msg << "Type " <<ty <<" does not exist. Service " << s << " of component " << componame << " is not available";
115  _errors=_errors+"\n"+msg.str();
116  std::cerr << msg.str() << std::endl;
117  compodef->_serviceMap[s+std::string("_IS_INVALID")]=0;
118  delete node;
119  node=0;
120  break;
121  }
122  const char* name=services[k].ServiceinParameter[kk].Parametername;
123  node->edAddInputPort(name,cata->_typeMap[ty]);
124  }
125  if(node == 0)continue;
126 
127  for (int kk=0;kk< services[k].ServiceoutParameter.length();kk++)
128  {
129  DEBTRACE("Parameter : " << services[k].ServiceoutParameter[kk].Parametername);
130  DEBTRACE("Type : " << services[k].ServiceoutParameter[kk].Parametertype);
131  const char* ty=services[k].ServiceoutParameter[kk].Parametertype;
132  if(cata->_typeMap.count(ty)==0)
133  {
134  std::stringstream msg;
135  msg << "Type " <<ty <<" does not exist. Service " << s << " of component " << componame << " is not available";
136  _errors=_errors+"\n"+msg.str();
137  std::cerr << msg.str() << std::endl;
138  compodef->_serviceMap[s+std::string("_IS_INVALID")]=0;
139  delete node;
140  node=0;
141  break;
142  }
143  const char* name=services[k].ServiceoutParameter[kk].Parametername;
144  node->edAddOutputPort(name,cata->_typeMap[ty]);
145  }
146  if(node == 0)continue;
147 
148  for (int kk=0;kk< services[k].ServiceinDataStreamParameter.length();kk++)
149  {
150  DEBTRACE("Parameter : " << services[k].ServiceinDataStreamParameter[kk].Parametername);
151  DEBTRACE("Type : " << services[k].ServiceinDataStreamParameter[kk].Parametertype);
152  DEBTRACE("Dependency : " << services[k].ServiceinDataStreamParameter[kk].Parameterdependency);
153 #ifdef NEW_KERNEL
154  const char* ty=services[k].ServiceinDataStreamParameter[kk].Parametertype;
155 #else
156  std::string ty=datastreamMap[services[k].ServiceinDataStreamParameter[kk].Parametertype];
157 #endif
158  if(cata->_typeMap.count(ty)==0)
159  {
160  std::stringstream msg;
161  msg << "Type " <<ty <<" does not exist. Service " << s << " of component " << componame << " is not available";
162  _errors=_errors+"\n"+msg.str();
163  std::cerr << msg.str() << std::endl;
164  compodef->_serviceMap[s+std::string("_IS_INVALID")]=0;
165  delete node;
166  node=0;
167  break;
168  }
169  const char* name=services[k].ServiceinDataStreamParameter[kk].Parametername;
170  InputDataStreamPort* port;
171  port=node->edAddInputDataStreamPort(name,cata->_typeMap[ty]);
172  }
173  if(node == 0)continue;
174 
175  for (int kk=0;kk< services[k].ServiceoutDataStreamParameter.length();kk++)
176  {
177  DEBTRACE("Parameter : " << services[k].ServiceoutDataStreamParameter[kk].Parametername);
178  DEBTRACE("Type : " << services[k].ServiceoutDataStreamParameter[kk].Parametertype);
179  DEBTRACE("Dependency : " << services[k].ServiceoutDataStreamParameter[kk].Parameterdependency);
180 #ifdef NEW_KERNEL
181  const char* ty=services[k].ServiceoutDataStreamParameter[kk].Parametertype;
182 #else
183  std::string ty=datastreamMap[services[k].ServiceoutDataStreamParameter[kk].Parametertype];
184 #endif
185  if(cata->_typeMap.count(ty)==0)
186  {
187  std::stringstream msg;
188  msg << "Type " <<ty <<" does not exist. Service " << s << " of component " << componame << " is not available";
189  _errors=_errors+"\n"+msg.str();
190  std::cerr << msg.str() << std::endl;
191  compodef->_serviceMap[s+std::string("_IS_INVALID")]=0;
192  delete node;
193  node=0;
194  break;
195  }
196  const char* name=services[k].ServiceoutDataStreamParameter[kk].Parametername;
197  OutputDataStreamPort* port;
198  port=node->edAddOutputDataStreamPort(name,cata->_typeMap[ty]);
199  // Set all properties for this port
200  /*
201  std::map<std::string, std::string>::const_iterator pt;
202  for(pt=p._props.begin();pt!=p._props.end();pt++)
203  port->setProperty((*pt).first,(*pt).second);
204  */
205  }
206  if(node == 0)continue;
207  compodef->_serviceMap[s]=node;
208  }
209 
210  /* Even if a component has no service, put it in the catalog
211  if(compodef->_serviceMap.size() > 0)
212  {
213  cata->_componentMap[(const char*)componame]=compodef;
214  }
215  else
216  {
217  delete compodef;
218  }
219  */
220  cata->_componentMap[(const char*)componame]=compodef;
221 }
void SessionCataLoader::loadCata ( Catalog cata)
virtual

Implements YACS::ENGINE::CatalogLoader.

Definition at line 381 of file SessionCataLoader.cxx.

References _errors, YACS::ENGINE::CatalogLoader::_path, DEBTRACE, YACS::ENGINE::RuntimeSALOME::getOrb(), YACS::ENGINE::getSALOMERuntime(), CORBAEngineTest::i, importComponent(), loadTypes(), loadTypesOld(), orb, and YACS::ENGINE::Catalog::setErrors().

382 {
383  DEBTRACE("SessionCataLoader::load")
384 #ifndef NEW_KERNEL
385  datastreamMap[SALOME_ModuleCatalog::DATASTREAM_UNKNOWN]="CALCIUM_unknown";
386  datastreamMap[SALOME_ModuleCatalog::DATASTREAM_INTEGER]="CALCIUM_integer";
387  datastreamMap[SALOME_ModuleCatalog::DATASTREAM_FLOAT]="CALCIUM_real";
388  datastreamMap[SALOME_ModuleCatalog::DATASTREAM_DOUBLE]="CALCIUM_double";
389  datastreamMap[SALOME_ModuleCatalog::DATASTREAM_BOOLEAN]="CALCIUM_boolean";
390  datastreamMap[SALOME_ModuleCatalog::DATASTREAM_STRING]="CALCIUM_string";
391 #endif
392 
393  CORBA::ORB_ptr orb = getSALOMERuntime()->getOrb();
394  CORBA::Object_var obj;
395  SALOME_ModuleCatalog::ModuleCatalog_var catalog;
396  obj=orb->string_to_object(_path.c_str());
397  catalog= SALOME_ModuleCatalog::ModuleCatalog::_narrow(obj);
398  _errors="";
399 
400  // Get types in catalog
401  loadTypes(cata,catalog);
402  // Get old types
403  loadTypesOld(cata);
404 
405  // Get component list
406  SALOME_ModuleCatalog::ListOfComponents_var componentname_list;
407  componentname_list = catalog->GetComponentList();
408  for (int i=0; i<componentname_list->length(); i++)
409  {
410  DEBTRACE ("Component : " << componentname_list[i]);
411  SALOME_ModuleCatalog::Acomponent_var component = catalog->GetComponent(componentname_list[i]);
412  importComponent(cata,component);
413  }
414  cata->setErrors(_errors);
415 }
void SessionCataLoader::loadTypes ( Catalog cata,
SALOME_ModuleCatalog::ModuleCatalog_ptr  catalog 
)
virtual

Definition at line 228 of file SessionCataLoader.cxx.

References YACS::ENGINE::Runtime::_tc_bool, YACS::ENGINE::Runtime::_tc_double, YACS::ENGINE::Runtime::_tc_int, YACS::ENGINE::Runtime::_tc_string, YACS::ENGINE::Catalog::_typeMap, YACS::ENGINE::TypeCodeStruct::addMember(), YACS::ENGINE::Array, YACS::ENGINE::Bool, YACS::ENGINE::Runtime::createInterfaceTc(), YACS::ENGINE::Runtime::createSequenceTc(), YACS::ENGINE::Runtime::createStructTc(), DEBTRACE, YACS::ENGINE::getRuntime(), CORBAEngineTest::i, YACS::ENGINE::TypeCode::id(), YACS::ENGINE::RefCounter::incrRef(), YACS::ENGINE::Int, gui.GraphViewer::m, YACS::ENGINE::TypeCodeStruct::name(), YACS::ENGINE::Objref, and gui.Appli::t.

Referenced by loadCata().

229 {
230  Runtime* r=getRuntime();
231  std::map<std::string,TypeCode*>& typeMap=cata->_typeMap;
232  // Get types list
233  SALOME_ModuleCatalog::ListOfTypeDefinition_var types_list=catalog->GetTypes();
234  for (int i=0; i< types_list->length(); i++)
235  {
236  const char* name=types_list[i].name;
237  DEBTRACE ("type : " << types_list[i].name << " " << types_list[i].kind);
238  if(types_list[i].kind == SALOME_ModuleCatalog::Dble)
239  {
240  r->_tc_double->incrRef();
241  typeMap[name]=r->_tc_double;
242  }
243  else if(types_list[i].kind == SALOME_ModuleCatalog::Int)
244  {
245  r->_tc_int->incrRef();
246  typeMap[name]=r->_tc_int;
247  }
248  else if(types_list[i].kind == SALOME_ModuleCatalog::Bool)
249  {
250  r->_tc_bool->incrRef();
251  typeMap[name]=r->_tc_bool;
252  }
253  else if(types_list[i].kind == SALOME_ModuleCatalog::Str)
254  {
255  r->_tc_string->incrRef();
256  typeMap[name]=r->_tc_string;
257  }
258  else if(types_list[i].kind == SALOME_ModuleCatalog::Seq)
259  {
260  const char* content=types_list[i].content;
261  if ( typeMap.find(content) != typeMap.end() )
262  typeMap[name]=r->createSequenceTc(name,name,typeMap[content]);
263  //else ignored !!
264  }
265  else if(types_list[i].kind == SALOME_ModuleCatalog::Array)
266  {
267  //ignored, for the moment !!
268  }
269  else if(types_list[i].kind == SALOME_ModuleCatalog::Objref)
270  {
271  std::list<TypeCodeObjref *> ltc;
272  const char* id=types_list[i].id;
273  for (int m=0; m< types_list[i].bases.length(); m++)
274  {
275  const char* b_name=types_list[i].bases[m];
276  if(typeMap.find(b_name) != typeMap.end())
277  ltc.push_back((TypeCodeObjref *)typeMap[b_name]);
278  //else ignored !!!
279  }
280  typeMap[name]=r->createInterfaceTc(id,name,ltc);
281  }
282  else if(types_list[i].kind == SALOME_ModuleCatalog::Struc)
283  {
284  TypeCodeStruct* t=r->createStructTc("",name);
285  for (int m=0; m< types_list[i].members.length(); m++)
286  {
287  const char* m_name=types_list[i].members[m].name;
288  const char* m_type=types_list[i].members[m].type;
289  if(typeMap.find(m_type) != typeMap.end())
290  t->addMember(m_name,typeMap[m_type]);
291  //else ignored !!!
292  }
293  typeMap[name]=t;
294  }
295  else
296  {
297  std::cerr << "Unknown kind: " << types_list[i].kind << std::endl;
298  }
299  }
300 }
void SessionCataLoader::loadTypesOld ( Catalog cata)
virtual

Definition at line 302 of file SessionCataLoader.cxx.

References YACS::ENGINE::Catalog::_typeMap, and YACS::ENGINE::getRuntime().

Referenced by loadCata().

303 {
304  // Fill the types map with built in types
305  Runtime* r=getRuntime();
306  std::map<std::string,TypeCode*>& typeMap=cata->_typeMap;
307 
308 #ifdef NEW_KERNEL
309  //Add old Calcium data types for KERNEL
310  if(typeMap.count("CALCIUM_double")!=0)
311  {
312  typeMap["DOUBLE"]=typeMap["CALCIUM_double"];
313  typeMap["DOUBLE"]->incrRef();
314  }
315  if(typeMap.count("CALCIUM_real")!=0)
316  {
317  typeMap["FLOAT"]=typeMap["CALCIUM_real"];
318  typeMap["FLOAT"]->incrRef();
319  }
320  if(typeMap.count("CALCIUM_integer")!=0)
321  {
322  typeMap["INTEGER"]=typeMap["CALCIUM_integer"];
323  typeMap["INTEGER"]->incrRef();
324  }
325  if(typeMap.count("CALCIUM_boolean")!=0)
326  {
327  typeMap["BOOLEAN"]=typeMap["CALCIUM_boolean"];
328  typeMap["BOOLEAN"]->incrRef();
329  }
330  if(typeMap.count("CALCIUM_string")!=0)
331  {
332  typeMap["STRING"]=typeMap["CALCIUM_string"];
333  typeMap["STRING"]->incrRef();
334  }
335 #endif
336 
337  //GEOM
338  /*
339  typeMap["GEOM_Object"]=TypeCode::interfaceTc("IDL:GEOM/GEOM_Object:1.0","GEOM_Object");
340  typeMap["ListOfLong"]=TypeCode::sequenceTc("ListOfLong","ListOfLong",r->_tc_int);
341  typeMap["GEOM_List"]=TypeCode::interfaceTc("IDL:GEOM/GEOM_List:1.0","GEOM_List");
342  typeMap["GEOM_Superv"]=TypeCode::interfaceTc("IDL:GEOM/GEOM_Superv:1.0","GEOM_Superv");
343  typeMap["ListOfGO"]=TypeCode::sequenceTc("ListOfGO","ListOfGO",cata->_typeMap["GEOM_Object"]);
344  typeMap["string_array"]=TypeCode::sequenceTc("string_array","string_array",r->_tc_string);
345  r->_tc_int->incrRef();
346  typeMap["BCErrorType"]=r->_tc_int;
347  typeMap["BCError"]=TypeCode::structTc("","BCError");
348  ((TypeCodeStruct*)typeMap["BCError"])->addMember("incriminated",typeMap["ListOfLong"]);
349  typeMap["BCErrors"]=TypeCode::sequenceTc("BCErrors","BCErrors",typeMap["BCError"]);
350  typeMap["GEOM_Gen"]=TypeCode::interfaceTc("IDL:GEOM/GEOM_Gen:1.0","GEOM_Gen");
351  typeMap["GEOM_Object"]->incrRef();
352  typeMap["GEOM_Shape"]=typeMap["GEOM_Object"];
353  */
354 
355  //SMESH
356  /*
357  typeMap["SMESH_Mesh"]=TypeCode::interfaceTc("IDL:Mesh/SMESH_Mesh:1.0","SMESH_Mesh");
358  typeMap["SMESH_Hypothesis"]=TypeCode::interfaceTc("IDL:SMESH/SMESH_Hypothesis:1.0","SMESH_Hypothesis");
359  */
360 
361  //MED
362  /*
363  typeMap["MED"]=TypeCode::interfaceTc("IDL:SALOME_MED/MED:1.0","MED");
364  typeMap["FIELD"]=TypeCode::interfaceTc("IDL:SALOME_MED/FIELD:1.0","FIELD");
365  // TODO : FIELDDOUBLE inherits FIELD
366  typeMap["FIELDDOUBLE"]=TypeCode::interfaceTc("IDL:SALOME_MED/FIELDDOUBLE:1.0","FIELDDOUBLE");
367  */
368 
369  //COMPONENT
370  /*
371  typeMap["AddComponent"]=TypeCode::interfaceTc("IDL:SuperVisionTest/AddComponent:1.0","AddComponent");
372  typeMap["AddComponent"]->incrRef();
373  typeMap["AddInterface"]=typeMap["AddComponent"];
374  typeMap["SuperVisionTest/Adder"]=TypeCode::interfaceTc("IDL:SuperVisionTest/Adder:1.0","SuperVisionTest/Adder");
375  typeMap["AdditionComponent/Adder"]=TypeCode::interfaceTc("IDL:AdditionComponent/Adder:1.0","AdditionComponent/Adder");
376  typeMap["Syr"]=TypeCode::interfaceTc("IDL:SuperVisionTest/Syr:1.0","Syr");
377  typeMap["ListOfSyr"]=TypeCode::interfaceTc("IDL:SuperVisionTest/ListOfSyr:1.0","ListOfSyr");
378  */
379 }
virtual CatalogLoader* YACS::ENGINE::SessionCataLoader::newLoader ( const std::string &  path)
inlinevirtual

Implements YACS::ENGINE::CatalogLoader.

Definition at line 43 of file SessionCataLoader.hxx.

References SessionCataLoader().

43 {return new SessionCataLoader(path);}

Member Data Documentation

std::string YACS::ENGINE::SessionCataLoader::_errors
protected

Definition at line 46 of file SessionCataLoader.hxx.

Referenced by importComponent(), and loadCata().


The documentation for this class was generated from the following files: