]> SALOME platform Git repositories - modules/kernel.git/commitdiff
Salome HOME
PR: setProperties ans getProperties methods on SALOMRE_component
authorprascle <prascle>
Wed, 28 Apr 2004 19:32:11 +0000 (19:32 +0000)
committerprascle <prascle>
Wed, 28 Apr 2004 19:32:11 +0000 (19:32 +0000)
idl/SALOME_Component.idl
idl/SALOME_TestComponent.idl
src/Container/Component_i.cxx
src/Container/SALOME_ComponentPy.py
src/Container/SALOME_Component_i.hxx
src/TestContainer/SALOME_TestComponent_i.cxx
src/TestContainer/SALOME_TestComponent_i.hxx
src/TestContainer/TestContainer.cxx

index a18580fe7f4e2bd9b93d3f6d71c646058099d01f..ecad1fa416abb8442c7cc01f1554e62088e28a32 100644 (file)
@@ -32,6 +32,17 @@ for management of %MED component in %SALOME application.
 */
 module Engines
 {
+/*!
+    General Key Value Structure to set or get properties, for component
+*/
+  struct KeyValuePair
+  {
+    string key;
+    any value;
+  };
+
+  typedef sequence<KeyValuePair> FieldsDict;
+
   interface Component ;
 
 /*! \brief Interface of the %Container
@@ -119,6 +130,18 @@ module Engines
     Returns the container that the %Component refers to.
 */
     Container GetContainerRef() ;
+/*!
+    Gives a sequence of (key=string,value=any) to the component. 
+    Base class component stores the sequence in a map.
+    The map is cleared before.
+    This map is for use by derived classes. 
+*/
+    void setProperties(in FieldsDict dico);
+/*!
+    returns a previously stored map (key=string,value=any) as a sequence.
+    See setProperties(in FieldsDict dico).
+*/
+    FieldsDict getProperties();
 /*!
    This method is used by the %SUPERVISOR component. It sets the names of the graph and of the node.
    \param aGraphName Name of graph
index 96de5a0d60ab0364191b421b60431b703f1fb201..c580d65b033ab19bf9da07fa4201d9d091169290 100644 (file)
@@ -31,6 +31,7 @@ module Engines
   interface TestComponent : Component
   {
     string Coucou(in long L);
+    void Setenv();
   };
 
 };
index 09d463416e59a143acb2e0ed96544e6453dd044d..309f7ef4af747aba300f136a08fc70ba7a35878a 100644 (file)
@@ -134,6 +134,31 @@ PortableServer::ObjectId * Engines_Component_i::getId()
   return _id ;
 }
 
+void Engines_Component_i::setProperties(const Engines::FieldsDict& dico)
+{
+  _fieldsDict.clear();
+  for (CORBA::ULong i=0; i<dico.length(); i++)
+    {
+      std::string cle(dico[i].key);
+      _fieldsDict[cle] = dico[i].value;
+    }
+}
+
+Engines::FieldsDict* Engines_Component_i::getProperties()
+{
+  Engines::FieldsDict_var copie = new Engines::FieldsDict;
+  copie->length(_fieldsDict.size());
+  map<std::string,CORBA::Any>::iterator it;
+  CORBA::ULong i = 0;
+  for (it = _fieldsDict.begin(); it != _fieldsDict.end(); it++, i++)
+    {
+      std::string cle((*it).first);
+      copie[i].key = CORBA::string_dup(cle.c_str());
+      copie[i].value = _fieldsDict[cle];
+    }
+  return copie._retn();
+}
+
 void Engines_Component_i::beginService(const char *serviceName)
 {
   MESSAGE(pthread_self() << "Send BeginService notification for " << serviceName << endl
index 004d6ededc699551b7832e1fe58bc96043c36041..2c2a5d0f13034d1497f43dd58a70c352b9f587f7 100755 (executable)
@@ -49,6 +49,7 @@ from thread import *
 class SALOME_ComponentPy_i (Engines__POA.Component):
     _orb = None
     _poa = None
+    _fieldsDict = []
     
     #-------------------------------------------------------------------------
 
@@ -118,6 +119,16 @@ class SALOME_ComponentPy_i (Engines__POA.Component):
         
     #-------------------------------------------------------------------------
 
+    def setProperties(self, dico):
+        self._fieldsDict = dico
+    
+    #-------------------------------------------------------------------------
+
+    def getProperties(self):
+        return self._fieldsDict
+
+    #-------------------------------------------------------------------------
+
     def destroy(self):
         MESSAGE(  "SALOME_ComponentPy_i::destroy" )
         poa.deactivate_object(self)
index fc537d1c84880778e7c08c8230fbbde4f00040db..4b93ef5b526dd6a2e642a14003ed9b22ba22f133 100644 (file)
@@ -35,6 +35,7 @@
 #include <unistd.h>
 #include <sys/types.h>
 #include <string>
+#include <map>
 #include <SALOMEconfig.h>
 #include CORBA_SERVER_HEADER(SALOME_Component)
 #include "NOTIFICATION.hxx"
@@ -72,6 +73,9 @@ public:
   Engines::Container_ptr GetContainerRef();
   PortableServer::ObjectId * getId(); 
 
+  void setProperties(const Engines::FieldsDict& dico);
+  Engines::FieldsDict* getProperties();
+
   void beginService(const char *serviceName);
   void endService(const char *serviceName);
   void sendMessage(const char *event_type, const char *message);
@@ -101,6 +105,7 @@ protected:
   Engines_Component_i * _thisObj ;
   RegistryConnexion *_myConnexionToRegistry;
   NOTIFICATION_Supplier* _notifSupplier;
+  map<std::string,CORBA::Any>_fieldsDict;
 
 private:
   pthread_t _ThreadId ;
index 85f49d22bf56e789c81708eb6ea9df380d48c746..66f55c70e4933cd095664571494185560cea14e2 100644 (file)
@@ -30,6 +30,8 @@ using namespace std;
 #include "utilities.h"
 #include "SALOME_TestComponent_i.hxx"
 #include <stdio.h>
+#include <cstdlib>
+#include <map>
 
 Engines_TestComponent_i::Engines_TestComponent_i(CORBA::ORB_ptr orb,
                                                 PortableServer::POA_ptr poa,
@@ -60,6 +62,31 @@ char* Engines_TestComponent_i::Coucou(CORBA::Long L)
   return CORBA::string_dup(s);
 }
 
+void Engines_TestComponent_i::Setenv()
+{
+  bool overwrite = true;
+  map<std::string,CORBA::Any>::iterator it;
+  MESSAGE("set environment associated with keys in map _fieldsDict");
+  for (it = _fieldsDict.begin(); it != _fieldsDict.end(); it++)
+    {
+      std::string cle((*it).first);
+      if ((*it).second.type()->kind() == CORBA::tk_string)
+       {
+         const char* value;
+         (*it).second >>= value;
+         int ret = setenv(cle.c_str(), value, overwrite);
+         MESSAGE("--- setenv: "<<cle<<" = "<< value);
+       }
+    }
+  MESSAGE("read environment associated with keys in map _fieldsDict");
+  for (it = _fieldsDict.begin(); it != _fieldsDict.end(); it++)
+    {
+      std::string cle((*it).first);
+      char* valenv= getenv(cle.c_str());
+      MESSAGE("--- getenv: "<<cle<<" = "<< valenv);
+    }
+}
+
 extern "C"
 {
   PortableServer::ObjectId * SalomeTestComponentEngine_factory(
index b5bddc3dfd24dcd8ac6c4bcc3ae217c2e0e7882a..1f135d3d4ca4f95a40a089d2ea5d58d0e2e234d8 100644 (file)
@@ -49,6 +49,7 @@ public:
   virtual ~Engines_TestComponent_i();
 
   char* Coucou(CORBA::Long L);
+  void Setenv();
   
 private:
 
index d80c8f924a919612b4bf84e3691efa6cbe589bff..8fc899ec08a65002ce7626244d943cb61dc63ea1 100644 (file)
@@ -154,7 +154,34 @@ int main (int argc, char * argv[])
          m1 = Engines::TestComponent::_narrow(obj);
          MESSAGE("recup m1");
          SCRUTE(m1->instanceName());
+
+         Engines::FieldsDict_var dico = new Engines::FieldsDict;
+         dico->length(3);
+         dico[0].key=CORBA::string_dup("key_0");
+         dico[0].value <<="value_0";
+         dico[1].key=CORBA::string_dup("key_1");
+         dico[1].value <<=(CORBA::UShort)72;
+         dico[2].key=CORBA::string_dup("key_2");
+         dico[2].value <<="value_2";
+         m1->setProperties(dico);
+
          MESSAGE("Coucou " << m1->Coucou(1L));
+
+         m1->Setenv();
+
+         Engines::FieldsDict_var dico2 =  m1->getProperties();
+         for (CORBA::ULong i=0; i<dico2->length(); i++)
+           {
+             MESSAGE("dico2["<<i<<"].key="<<dico2[i].key);
+             MESSAGE("dico2["<<i<<"].value type ="<<dico2[i].value.type()->kind());
+             if (dico2[i].value.type()->kind() == CORBA::tk_string)
+               {
+                 const char* value;
+                 dico2[i].value >>= value;
+                 MESSAGE("dico2["<<i<<"].value="<<value);
+               }
+           }
+
          iGenFact->remove_impl(m1) ;
          //iGenFact->finalize_removal() ; // unpredictable results ...
           sleep(5);