]> SALOME platform Git repositories - modules/kernel.git/commitdiff
Salome HOME
CCAR: first version of Observer
authorcaremoli <caremoli>
Tue, 25 May 2010 15:55:47 +0000 (15:55 +0000)
committercaremoli <caremoli>
Tue, 25 May 2010 15:55:47 +0000 (15:55 +0000)
idl/Makefile.am
idl/SALOMEDS.idl
idl/SALOME_Observer.idl [new file with mode: 0644]
src/SALOMEDS/Makefile.am
src/SALOMEDS/SALOMEDS_Study_i.cxx
src/SALOMEDS/SALOMEDS_Study_i.hxx
src/SALOMEDSImpl/Makefile.am
src/SALOMEDSImpl/SALOMEDSImpl_Study.cxx
src/SALOMEDSImpl/SALOMEDSImpl_Study.hxx

index 6ab7e6076b3f63f5eb4b4dd4f325b99e74bf3bb4..29090407f5dba11ef8c52b90e3952f7a54e7bdd2 100644 (file)
@@ -50,7 +50,8 @@ BASEIDL_FILES = \
   SALOME_PyNode.idl \
   Palm_Ports.idl \
   SALOME_PACOExtension.idl \
-  SALOME_ParamPorts.idl
+  SALOME_ParamPorts.idl \
+  SALOME_Observer.idl
 
 MPIIDL_FILES = \
   SALOME_MPIObject.idl \
@@ -101,7 +102,8 @@ BASEIDL_SOURCES =\
   Calcium_PortsSK.cc \
   Palm_PortsSK.cc \
   SALOME_PACOExtensionSK.cc \
-  SALOME_ParamPortsSK.cc
+  SALOME_ParamPortsSK.cc \
+  SALOME_ObserverSK.cc
 
 DYNIDL_SRCS = \
   SALOME_PortsDynSK.cc  Calcium_PortsDynSK.cc     SALOME_ContainerManagerDynSK.cc \
@@ -109,7 +111,7 @@ DYNIDL_SRCS = \
   SALOMEDSDynSK.cc      SALOME_SessionDynSK.cc    SALOME_RessourcesCatalogDynSK.cc \
   DSC_EnginesDynSK.cc   SALOME_ComponentDynSK.cc  SALOME_GenericObjDynSK.cc \
   Palm_PortsDynSK.cc    SALOME_ExceptionDynSK.cc  SALOMEDS_AttributesDynSK.cc \
-  LoggerDynSK.cc        SALOME_PACOExtensionDynSK.cc SALOME_ParamPortsDynSK.cc SALOME_PyNodeDynSK.cc
+  LoggerDynSK.cc        SALOME_PACOExtensionDynSK.cc SALOME_ParamPortsDynSK.cc SALOME_PyNodeDynSK.cc SALOME_ObserverDynSK.cc
 
 MPIIDL_SOURCES = \
   SALOME_MPIObjectSK.cc \
index 955cf78373321a54d1dbb39529f82475ad1b1338..ace331d1ab344ab9056637d954073fa501db3361 100644 (file)
 
 #include "SALOME_Exception.idl"
 #include "SALOME_GenericObj.idl"
+#include "SALOME_Observer.idl"
+
+module SALOME {
+   
+   interface Observer;
+   
+};
+
 
 /*! \brief
      This package contains the interfaces used for creation, management
@@ -539,7 +547,13 @@ during each working session.
    \return Variables list.
 */
     ListOfListOfStrings ParseVariables( in string theVars );
-    
+
+/*!
+     Attach an observer to the Study
+
+    \param theObserver
+*/
+     void attach(in SALOME::Observer theObserver);   
   };
 
   //==========================================================================
@@ -802,6 +816,7 @@ Searches for a definite %SObject with a definite GUID and returns True if it fin
     \param theValue The value to be set to the IOR attribute.
 */
     void SetIOR(in SObject theSO, in string theValue) raises (LockProtection);
+
   };
 
   //==========================================================================
diff --git a/idl/SALOME_Observer.idl b/idl/SALOME_Observer.idl
new file mode 100644 (file)
index 0000000..07e87c7
--- /dev/null
@@ -0,0 +1,44 @@
+//  Copyright (C) 2007-2010  CEA/DEN, EDF R&D, OPEN CASCADE
+//
+//  Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
+//
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of the GNU Lesser General Public
+//  License as published by the Free Software Foundation; either
+//  version 2.1 of the License.
+//
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+//  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+
+#ifndef _SALOME_OBSERVER_IDL_
+#define _SALOME_OBSERVER_IDL_
+
+#include "SALOMEDS.idl"
+
+module SALOMEDS {
+   
+   interface SObject;
+   
+};
+
+module SALOME {
+
+  interface Observer
+  {
+    void notifyObserver(in string theID, in string event);                                                                                                                                                                        
+  };       
+
+};
+
+
+#endif
\ No newline at end of file
index 654d45d8afd6c6f7cd635d7b94e55840cbf2c4d2..49eb293803374393b1c95adbac332f49476fd457 100644 (file)
@@ -287,6 +287,7 @@ bin_PROGRAMS = SALOMEDS_Server SALOMEDS_Client
 SALOMEDS_Server_SOURCES  = SALOMEDS_Server.cxx
 SALOMEDS_Server_CPPFLAGS = $(COMMON_CPPFLAGS)
 SALOMEDS_Server_LDADD    = libSalomeDS.la \
+    $(top_builddir)/idl/libSalomeIDLKernel.la \
        ../Basics/libSALOMEBasics.la \
        $(HDF5_LIBS) \
        $(CORBA_LIBS)
@@ -294,6 +295,7 @@ SALOMEDS_Server_LDADD    = libSalomeDS.la \
 SALOMEDS_Client_SOURCES  = SALOMEDS_Client.cxx
 SALOMEDS_Client_CPPFLAGS = $(COMMON_CPPFLAGS)
 SALOMEDS_Client_LDADD    = libSalomeDS.la \
+    $(top_builddir)/idl/libSalomeIDLKernel.la \
        ../Basics/libSALOMEBasics.la \
        $(HDF5_LIBS) \
        $(CORBA_LIBS)
index 56be377dc6eb1b34aa3206f24d9851c70afee14b..8f89751167fe59d60bce729fa7d63c285792ddc1 100644 (file)
@@ -1149,6 +1149,16 @@ void SALOMEDS_Study_i::EnableUseCaseAutoFilling(CORBA::Boolean isEnabled)
   }
 }
 
+//============================================================================
+/*! Function : attach
+ *  Purpose  : This function attach an observer to the study
+ */
+//============================================================================
+void SALOMEDS_Study_i::attach(SALOME::Observer_ptr theObs){
+       SALOMEDS::Locker lock;
+  _impl->attach(theObs);
+}
+
 //===========================================================================
 //   PRIVATE FUNCTIONS
 //===========================================================================
index 55b8e2b5066b305ec998bac6464d4c6a20f7c11a..9daf7f15ee6926b615936c2e631b202582fc994d 100644 (file)
@@ -34,6 +34,7 @@
 #include <SALOMEconfig.h>
 #include CORBA_SERVER_HEADER(SALOME_GenericObj)
 #include CORBA_SERVER_HEADER(SALOMEDS)
+#include CORBA_SERVER_HEADER(SALOME_Observer)
 
 #include <stdio.h>
 
@@ -53,6 +54,9 @@ private:
   SALOMEDSImpl_Study*            _impl;  
   SALOMEDS_StudyBuilder_i*       _builder;    
   static std::map<SALOMEDSImpl_Study*, SALOMEDS_Study_i*> _mapOfStudies;
+  typedef std::list<SALOME::Observer_var> ObsList;
+  typedef ObsList::iterator ObsListIter;
+  ObsList myObservers;
 
 public:
 
@@ -344,5 +348,8 @@ public:
   virtual SALOMEDSImpl_Study* GetImpl() { return _impl; }
 
   virtual CORBA::LongLong GetLocalImpl(const char* theHostname, CORBA::Long thePID, CORBA::Boolean& isLocal);
+
+  virtual void attach(SALOME::Observer_ptr theObs);
+
 };
 #endif
index dcbf8a98dbe58364f5de23a3385ba2cd3cf2475f..6b2997b437b4102a41e959f7e094de07565b0788 100644 (file)
@@ -98,6 +98,7 @@ COMMON_CPPFLAGS=\
        -I$(srcdir)/../HDFPersist \
        -I$(srcdir)/../DF \
        -I$(srcdir)/../GenericObj \
+       -I$(srcdir)/../SALOMEDS \
        -I$(top_builddir)/idl \
        -I$(top_builddir) \
        @HDF5_INCLUDES@ \
index 9bf5348bfb8f8a8db46f2ab25d368562eddedab8..cd7a3133fc2fa9beb24628bce4ed5588a28236f2 100644 (file)
@@ -41,6 +41,7 @@
 #include "SALOMEDSImpl_Tool.hxx"
 #include "SALOMEDSImpl_IParameters.hxx"
 #include "SALOMEDSImpl_ScalarVariable.hxx"
+#include "SALOMEDS_Study_i.hxx"
 
 #include <fstream>
 #include <sstream>
@@ -1983,3 +1984,58 @@ std::vector<std::string> SALOMEDSImpl_Study::GetIORs()
 
   return anIORs;
 }
+
+//============================================================================
+/*! Function : addSO_Notification
+ *  Purpose  : This function tells all the observers that a SO has been added
+ */
+//============================================================================
+bool SALOMEDSImpl_Study::addSO_Notification (const SALOMEDSImpl_SObject& theSObject) {
+  CORBA::String_var event="ADD";
+  CORBA::String_var anID=theSObject.GetID().c_str();
+  for (ObsListIter it (myObservers.begin()); it != myObservers.end(); ++it)
+    {
+      (*it)->notifyObserver(anID,event);
+    }
+  return true; // NGE return always true but can be modified if needed
+}
+
+//============================================================================
+/*! Function : removeSO_Notification
+ *  Purpose  : This function tells all the observers that a SO has been removed
+ */
+//============================================================================
+bool SALOMEDSImpl_Study::removeSO_Notification (const SALOMEDSImpl_SObject& theSObject) {
+  CORBA::String_var event="REMOVE";
+  CORBA::String_var anID=theSObject.GetID().c_str();
+  for (ObsListIter it (myObservers.begin()); it != myObservers.end(); ++it)
+    {
+      (*it)->notifyObserver(anID,event);
+    }
+  return true; // NGE return always true but can be modified if needed
+}
+
+//============================================================================
+/*! Function : modifySO_Notification
+ *  Purpose  : This function tells all the observers that a SO has been modified
+ */
+//============================================================================
+bool SALOMEDSImpl_Study::modifySO_Notification (const SALOMEDSImpl_SObject& theSObject) {
+  CORBA::String_var event="MODIFY";
+  CORBA::String_var anID=theSObject.GetID().c_str();
+  for (ObsListIter it (myObservers.begin()); it != myObservers.end(); ++it)
+    {
+      (*it)->notifyObserver(anID,event);
+    }
+  return true; // NGE return always true but can be modified if needed
+}
+
+//============================================================================
+/*! Function : attach
+ *  Purpose  : register an Observer
+ */
+//============================================================================
+void SALOMEDSImpl_Study::attach(SALOME::Observer_ptr theObs) 
+{
+   myObservers.push_back(SALOME::Observer::_duplicate(theObs));
+}
index d048586aa492f77d239fb1bd2166f15e604521f5..a4f6b0910eb63e4ff76953119d21cd4de69c6e89 100644 (file)
@@ -32,6 +32,7 @@
 #include <string>
 #include <vector>
 #include <map>
+#include <list>
 
 #include "DF_Document.hxx"
 #include "DF_Label.hxx"
@@ -50,6 +51,7 @@
 #include "SALOMEDSImpl_Driver.hxx" 
 #include "SALOMEDSImpl_ChildIterator.hxx" 
 #include "SALOMEDSImpl_GenericVariable.hxx"
+#include "SALOME_Observer.hh"
 
 class SALOMEDSImpl_StudyManager;
 class SALOMEDSImpl_GenericAttribute;
@@ -76,6 +78,10 @@ private:
   std::map<std::string, DF_Label> myIORLabels;
   std::vector<SALOMEDSImpl_GenericVariable*> myNoteBookVars;
 
+  typedef std::list<SALOME::Observer_var> ObsList;
+  typedef ObsList::iterator ObsListIter;
+  ObsList myObservers;
+
   SALOMEDSImpl_SObject   _FindObject(const SALOMEDSImpl_SObject& SO,
     const std::string& anObjectName,
     bool& _find);
@@ -313,6 +319,13 @@ public:
   //Returns a list of IOR's stored in the study
   std::vector<std::string> GetIORs();
 
+  // Notification mechanism
+  virtual bool addSO_Notification(const SALOMEDSImpl_SObject& theSObject);
+  virtual bool removeSO_Notification(const SALOMEDSImpl_SObject& theSObject);
+  virtual bool modifySO_Notification(const SALOMEDSImpl_SObject& theSObject);
+  virtual void attach(SALOME::Observer_ptr theObs);
+
+
   friend class SALOMEDSImpl_StudyManager;    
   friend class SALOMEDSImpl_GenericAttribute;
   friend class SALOMEDSImpl_GenericVariable;