Version: 9.16.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 CatalogLoadernewLoader (const std::string &path)=0
 
virtual void loadCata (Catalog *cata)=0
 
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

◆ SessionCataLoader() [1/2]

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

Definition at line 37 of file SessionCataLoader.hxx.

Referenced by newLoader().

◆ SessionCataLoader() [2/2]

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::~SessionCataLoader ( )
virtual

Definition at line 223 of file SessionCataLoader.cxx.

224{
225 DEBTRACE ("SessionCataLoader::~SessionCataLoader");
226}
#define DEBTRACE(msg)
Definition: YacsTrace.hxx:31

References DEBTRACE.

Member Function Documentation

◆ importComponent()

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.

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;
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;
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}
std::map< std::string, ComponentDefinition * > _componentMap
Definition: Catalog.hxx:50
std::map< std::string, TypeCode * > _typeMap
Definition: Catalog.hxx:49
Base class for component definition.
std::map< std::string, ServiceNode * > _serviceMap
virtual OutputDataStreamPort * edAddOutputDataStreamPort(const std::string &outputPortDSName, TypeCode *type)
virtual InputPort * edAddInputPort(const std::string &inputPortName, TypeCode *type)
virtual InputDataStreamPort * edAddInputDataStreamPort(const std::string &inputPortDSName, TypeCode *type)
virtual OutputPort * edAddOutputPort(const std::string &outputPortName, TypeCode *type)
virtual ServiceNode * createCompoNode(const std::string &kind, const std::string &name)
Definition: Runtime.cxx:205
Class for calculation node associated with a component service.
Definition: ServiceNode.hxx:35
virtual void setRef(const std::string &ref)
Associate a new component instance to this service node.
virtual void setMethod(const std::string &method)
Definition: ServiceNode.hxx:50
YACSLIBENGINE_EXPORT Runtime * getRuntime()
Definition: Runtime.cxx:61

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().

◆ loadCata()

void SessionCataLoader::loadCata ( Catalog cata)
virtual

Implements YACS::ENGINE::CatalogLoader.

Definition at line 381 of file SessionCataLoader.cxx.

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 setErrors(const std::string &errors)
Definition: Catalog.hxx:48
CORBA::ORB_ptr getOrb() const
virtual void loadTypesOld(Catalog *cata)
virtual void loadTypes(Catalog *cata, SALOME_ModuleCatalog::ModuleCatalog_ptr catalog)
virtual void importComponent(Catalog *cata, SALOME_ModuleCatalog::Acomponent_ptr compo)
import a SALOME component definition in a YACS catalog
YACSRUNTIMESALOME_EXPORT RuntimeSALOME * getSALOMERuntime()
CORBA::ORB_ptr orb
Definition: yacsSrv.cxx:39

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

◆ loadTypes()

void SessionCataLoader::loadTypes ( Catalog cata,
SALOME_ModuleCatalog::ModuleCatalog_ptr  catalog 
)
virtual

Definition at line 228 of file SessionCataLoader.cxx.

229{
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}
Class for reference objects.
Definition: TypeCode.hxx:126
Class for struct type.
Definition: TypeCode.hxx:228

References YACS::ENGINE::Catalog::_typeMap, YACS::ENGINE::Array, YACS::ENGINE::Bool, DEBTRACE, YACS::ENGINE::getRuntime(), yacsorb.CORBAEngineTest::i, YACS::ENGINE::Int, gui.GraphViewer::m, YACS::ENGINE::Objref, testCppPluginInvokation::r, and gui.Appli::t.

Referenced by loadCata().

◆ loadTypesOld()

void SessionCataLoader::loadTypesOld ( Catalog cata)
virtual

Definition at line 302 of file SessionCataLoader.cxx.

303{
304 // Fill the types map with built in types
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}

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

Referenced by loadCata().

◆ newLoader()

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().

Member Data Documentation

◆ _errors

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: