]> SALOME platform Git repositories - modules/kernel.git/commitdiff
Salome HOME
- can remove an observer
authorribes <ribes>
Fri, 30 Jul 2010 13:26:22 +0000 (13:26 +0000)
committerribes <ribes>
Fri, 30 Jul 2010 13:26:22 +0000 (13:26 +0000)
- notify a new observer of jobs in launcher

idl/SALOME_ContainerManager.idl
src/Launcher/SALOME_Launcher.cxx
src/Launcher/SALOME_Launcher.hxx

index 364568b03867668ea4f9168024b5dd8506f9c208..69e10274ccc16d8aece6855f1d5bea8fb2239c90 100644 (file)
@@ -221,6 +221,7 @@ interface SalomeLauncher
 
   // Observer and introspection methods
   void addObserver(in Engines::SalomeLauncherObserver observer);
+  void removeObserver(in Engines::SalomeLauncherObserver observer);
   Engines::JobsList getJobsList();
   Engines::JobParameters getJobParameters(in long job_id) raises (SALOME::SALOME_Exception);
 
index 1195c2b6af9b0bdb5eca51da6b265951eafddb35..27956bded60145793c8afe4658d8f0ff80fc0dbc 100644 (file)
@@ -929,9 +929,53 @@ SALOME_Launcher::addObserver(Engines::SalomeLauncherObserver_ptr observer)
       new_observer = false;
       break;
     }
+    iter++;
   }
   if (new_observer)
     _observers.push_back(Engines::SalomeLauncherObserver::_duplicate(observer));
+
+  // We notify the new observer with all jobs that are currently in the Launcher
+  std::map<int, Launcher::Job *> cpp_jobs = _l.getJobs();
+  std::map<int, Launcher::Job *>::const_iterator it_job;
+  for(it_job = cpp_jobs.begin(); it_job != cpp_jobs.end(); it_job++)
+  {
+    int number = it_job->first;
+    std::ostringstream job_id;
+    job_id << number;
+    try
+    {
+      observer->notify("NEW_JOB", job_id.str().c_str());
+    }
+    catch (...) 
+    {
+       MESSAGE("Notify Observer, exception catch");
+    }
+
+  }
+}
+
+//=============================================================================
+/*! CORBA Method:
+ *  Add a new observer to the launcher
+ */
+//=============================================================================
+void
+SALOME_Launcher::removeObserver(Engines::SalomeLauncherObserver_ptr observer)
+{
+  std::list<Engines::SalomeLauncherObserver_var>::iterator iter = _observers.begin();
+  while(iter != _observers.end())
+  {
+    if (std::string(_orb->object_to_string(*iter)) ==
+        std::string(_orb->object_to_string(observer)))
+    {
+      // Observer found
+      iter =_observers.erase(iter++);
+    }
+    else
+    {
+      iter++;
+    }
+  }
 }
 
 //=============================================================================
index 871488b90da4acaae0d1c89d39c4efd890e48337..fff5515e25fb0355f9caa475636c42de741aaeef 100644 (file)
@@ -62,6 +62,7 @@ public:
 
   // Observer and introspection methods
   virtual void addObserver(Engines::SalomeLauncherObserver_ptr observer);
+  virtual void removeObserver(Engines::SalomeLauncherObserver_ptr observer);
   virtual Engines::JobsList * getJobsList();
   virtual Engines::JobParameters * getJobParameters(CORBA::Long job_id);