Salome HOME
Join modifications from BR_Dev_For_4_0 tag V4_1_1.
[modules/kernel.git] / src / DSC / DSC_User / Datastream / Calcium / Calcium.cxx
1 #include "Calcium.hxx"
2 #include <CalciumInterface.hxx>
3 #include <calcium.h>
4 #include <iostream>
5 #include <string>
6 #include <exception>
7
8 //#define _DEBUG_
9
10 PySupervCompo::PySupervCompo( CORBA::ORB_ptr orb,
11                               PortableServer::POA_ptr poa,
12                               Engines::Container_ptr contain,
13                               const char *instanceName,
14                               const char *interfaceName,
15                               bool notif) :
16   Superv_Component_i(orb, poa,poa->reference_to_id(contain), instanceName, interfaceName)
17 {
18 }
19
20 PySupervCompo::~PySupervCompo()
21 {
22 }
23
24
25 extern "C" 
26 {
27   void cp_exit(int err)
28     {
29       throw CalciumException(err,LOC("Abort coupling"));
30     }
31
32   void setDependency(provides_port * port,char* type,CalciumTypes::DependencyType depend)
33   {
34     if(std::string(type)=="CALCIUM_real")
35       {
36         dynamic_cast<calcium_real_port_provides *>(port)->setDependencyType(depend);
37       }
38     else if(std::string(type)=="CALCIUM_double")
39       {
40         dynamic_cast<calcium_double_port_provides *>(port)->setDependencyType(depend);
41       }
42     else if(std::string(type)=="CALCIUM_integer")
43       {
44         dynamic_cast<calcium_integer_port_provides *>(port)->setDependencyType(depend);
45       }
46     else if(std::string(type)=="CALCIUM_string")
47       {
48         dynamic_cast<calcium_string_port_provides *>(port)->setDependencyType(depend);
49       }
50     else if(std::string(type)=="CALCIUM_logical")
51       {
52         dynamic_cast<calcium_logical_port_provides *>(port)->setDependencyType(depend);
53       }
54     else if(std::string(type)=="CALCIUM_complex")
55       {
56         dynamic_cast<calcium_complex_port_provides *>(port)->setDependencyType(depend);
57       }
58     else
59       {
60         std::cerr << "unknown type:" << std::endl;
61       }
62   }
63
64   void create_calcium_port(Superv_Component_i* compo,char* name,char* type,char *mode,char* depend)
65   {
66 #ifdef _DEBUG_
67     std::cerr << "create_calcium_port: " << name << " " << type << " " << mode << " " << depend << std::endl;
68 #endif
69
70     if(std::string(mode) == "IN")
71       {
72         provides_port * port ;
73         //provides port
74         try
75           {
76             port = compo->create_provides_data_port(type);
77             compo->add_port(port, name);
78             if(std::string(depend) == "I")
79               setDependency(port,type,CalciumTypes::ITERATION_DEPENDENCY);
80             else if(std::string(depend) == "T")
81               setDependency(port,type,CalciumTypes::TIME_DEPENDENCY);
82             else
83               {
84                 std::cerr << "create_calcium_port:unknown dependency: " << depend << std::endl;
85               }
86           }
87         catch(const Superv_Component_i::PortAlreadyDefined& ex)
88           {
89             //Port already defined : we use the old one
90             delete port;
91             std::cerr << "create_calcium_port: " << ex.what() << std::endl;
92           }
93         catch ( ... )
94           {
95             std::cerr << "create_calcium_port: unknown exception" << std::endl;
96           }
97       }
98     else if(std::string(mode) == "OUT")
99       {
100         uses_port * uport ;
101         try
102           {
103             uport = compo->create_uses_data_port(type);
104             compo->add_port(uport, name);
105           }
106         catch(const Superv_Component_i::PortAlreadyDefined& ex)
107           {
108             //Port already defined : we use the old one
109             delete uport;
110             std::cerr << "create_calcium_port: " << ex.what() << std::endl;
111           }
112         catch ( ... )
113           {
114             std::cerr << "create_calcium_port: unknown exception" << std::endl;
115           }
116       }
117     else
118       {
119         //Unknown mode
120         std::cerr << "create_calcium_port:Unknown mode: " << mode << std::endl;
121       }
122   }
123
124 }
125
126