]> SALOME platform Git repositories - modules/kernel.git/commitdiff
Salome HOME
Initial integration of SimanIO support and SIMAN study interfaces
authormpv <mpv@opencascade.com>
Thu, 18 Oct 2012 06:40:43 +0000 (06:40 +0000)
committermpv <mpv@opencascade.com>
Thu, 18 Oct 2012 06:40:43 +0000 (06:40 +0000)
20 files changed:
src/SALOMEDS/Makefile.am
src/SALOMEDS/SALOMEDS_SimanStudy.cxx [new file with mode: 0644]
src/SALOMEDS/SALOMEDS_SimanStudy.hxx [new file with mode: 0644]
src/SALOMEDS/SALOMEDS_SimanStudy_i.cxx [new file with mode: 0644]
src/SALOMEDS/SALOMEDS_SimanStudy_i.hxx [new file with mode: 0644]
src/SALOMEDS/SALOMEDS_Study.hxx
src/SALOMEDS/SALOMEDS_StudyManager.cxx
src/SALOMEDS/SALOMEDS_StudyManager.hxx
src/SALOMEDS/SALOMEDS_StudyManager_i.cxx
src/SALOMEDS/SALOMEDS_StudyManager_i.hxx
src/SALOMEDS/Test/Makefile.am
src/SALOMEDSClient/Makefile.am
src/SALOMEDSClient/SALOMEDSClient.hxx
src/SALOMEDSClient/SALOMEDSClient_SimanStudy.hxx [new file with mode: 0644]
src/SALOMEDSClient/SALOMEDSClient_StudyManager.hxx
src/SALOMEDSImpl/Makefile.am
src/SALOMEDSImpl/SALOMEDSImpl_SimanStudy.cxx [new file with mode: 0644]
src/SALOMEDSImpl/SALOMEDSImpl_SimanStudy.hxx [new file with mode: 0644]
src/SALOMEDSImpl/SALOMEDSImpl_StudyManager.cxx
src/SALOMEDSImpl/SALOMEDSImpl_StudyManager.hxx

index bfc45db68d97599f59c01003927db2bad5c971d3..24edd8d544eeb3cf75b7b6a43db991808a2c365f 100644 (file)
@@ -105,6 +105,8 @@ libSalomeDS_la_SOURCES =    \
        SALOMEDS_UseCaseIterator_i.cxx \
        SALOMEDS_ChildIterator_i.cxx \
        SALOMEDS_SComponentIterator_i.cxx \
+       SALOMEDS_SimanStudy_i.cxx \
+       SALOMEDS_SimanStudy.cxx \
        SALOMEDS_Study_i.cxx \
        SALOMEDS_StudyBuilder_i.cxx \
        SALOMEDS_SObject_i.cxx \
@@ -255,6 +257,8 @@ libSalomeDS_la_SOURCES =    \
        SALOMEDS_SComponent_i.hxx \
        SALOMEDS_SComponentIterator.hxx \
        SALOMEDS_SComponentIterator_i.hxx \
+       SALOMEDS_SimanStudy.hxx \
+       SALOMEDS_SimanStudy_i.hxx \
        SALOMEDS_SObject.hxx \
        SALOMEDS_SObject_i.hxx \
        SALOMEDS_StudyBuilder.hxx \
@@ -273,6 +277,12 @@ libSalomeDS_la_SOURCES =   \
        SALOMEDS_AttributeString_i.hxx \
        SALOMEDS_TMPFile_i.hxx
 
+if WITH_SIMANIO
+
+COMMON_CPPFLAGS += -DWITH_SIMANIO
+
+endif
+
 libSalomeDS_la_CPPFLAGS = $(COMMON_CPPFLAGS)
 libSalomeDS_la_LDFLAGS  = -Wl,-E -no-undefined -version-info=0:0:0 @LDEXPDYNFLAGS@
 libSalomeDS_la_LIBADD    = $(COMMON_LIBS)
diff --git a/src/SALOMEDS/SALOMEDS_SimanStudy.cxx b/src/SALOMEDS/SALOMEDS_SimanStudy.cxx
new file mode 100644 (file)
index 0000000..1000ead
--- /dev/null
@@ -0,0 +1,179 @@
+// Copyright (C) 2007-2012  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
+//
+
+//  File   : SALOMEDS_SimanStudy.cxx
+//  Author : Mikhail PONIKAROV
+//  Module : SALOME
+//
+#include "utilities.h" 
+
+#include "SALOMEDS_SimanStudy.hxx"
+
+#include "SALOMEDS.hxx"
+#include "SALOMEDS_Study.hxx"
+
+#include "SALOMEDSImpl_Study.hxx"
+
+#include "SALOMEDS_SimanStudy_i.hxx"
+
+#include "Basics_Utils.hxx"
+
+#include "Utils_ORB_INIT.hxx" 
+#include "Utils_SINGLETON.hxx" 
+
+SALOMEDS_SimanStudy::SALOMEDS_SimanStudy(SALOMEDSImpl_SimanStudy* theStudy)
+{
+  _isLocal = true;
+  _local_impl = theStudy;
+  _corba_impl = SALOMEDS::SimanStudy::_nil();
+  init_orb();
+}
+
+SALOMEDS_SimanStudy::SALOMEDS_SimanStudy(SALOMEDS::SimanStudy_ptr theStudy)
+{
+#ifdef WIN32
+  long pid =  (long)_getpid();
+#else
+  long pid =  (long)getpid();
+#endif  
+
+  long addr = theStudy->GetLocalImpl(Kernel_Utils::GetHostname().c_str(), pid, _isLocal);
+  if(_isLocal) {
+    _local_impl = reinterpret_cast<SALOMEDSImpl_SimanStudy*>(addr);
+    _corba_impl = SALOMEDS::SimanStudy::_duplicate(theStudy);
+  }
+  else {
+    _local_impl = NULL;
+    _corba_impl = SALOMEDS::SimanStudy::_duplicate(theStudy);
+  }
+
+  init_orb();
+}
+
+SALOMEDS_SimanStudy::~SALOMEDS_SimanStudy()
+{
+}
+
+void SALOMEDS_SimanStudy::CheckOut(const _PTR(Study) theTarget)
+{
+  if (!theTarget) return;
+  SALOMEDS_Study* aStudy = dynamic_cast<SALOMEDS_Study*>(theTarget.get());
+  if (_isLocal) {
+    //SALOMEDS::Locker lock; mpv: this may cause dedlock when importData in module calls another SALOMEDS method with lock
+    _local_impl->CheckOut(aStudy->GetLocalImpl());
+  }
+  else _corba_impl->CheckOut(aStudy->GetStudy());
+}
+
+void SALOMEDS_SimanStudy::CheckIn(const std::string theModuleName)
+{
+  if (_isLocal) {
+    //SALOMEDS::Locker lock; mpv: this may cause dedlock when getModifiedData in module calls another SALOMEDS method with lock
+    _local_impl->CheckIn(theModuleName);
+  }
+  else _corba_impl->CheckIn((char*)theModuleName.c_str());
+}
+
+_PTR(Study) SALOMEDS_SimanStudy::getReferencedStudy()
+{
+  SALOMEDSClient_Study* aStudy = NULL;
+  if (_isLocal) {
+    SALOMEDS::Locker lock;
+
+    SALOMEDSImpl_Study* aStudy_impl = _local_impl->getReferencedStudy();
+    if (!aStudy_impl) return _PTR(Study)(aStudy);
+    aStudy = new SALOMEDS_Study(aStudy_impl);
+  }
+  else {
+    SALOMEDS::Study_var aStudy_impl = _corba_impl->getReferencedStudy();
+    if (CORBA::is_nil(aStudy_impl)) return _PTR(Study)(aStudy);
+    aStudy = new SALOMEDS_Study(aStudy_impl);
+  }
+  return _PTR(Study)(aStudy);
+}
+
+std::string SALOMEDS_SimanStudy::StudyId()
+{
+  std::string anId;
+  if (_isLocal) {
+    SALOMEDS::Locker lock;
+    anId = _local_impl->StudyId();
+  }
+  else anId = (CORBA::String_var)_corba_impl->StudyId();
+  return anId;
+}
+
+void SALOMEDS_SimanStudy::StudyId(const std::string theId)
+{
+  if (_isLocal) {
+    SALOMEDS::Locker lock;
+    _local_impl->StudyId(theId);
+  }
+  else _corba_impl->StudyId((char*)theId.c_str());
+}
+
+std::string SALOMEDS_SimanStudy::ScenarioId()
+{
+  std::string anId;
+  if (_isLocal) {
+    SALOMEDS::Locker lock;
+    anId = _local_impl->ScenarioId();
+  }
+  else anId = (CORBA::String_var)_corba_impl->ScenarioId();
+  return anId;
+}
+
+void SALOMEDS_SimanStudy::ScenarioId(const std::string theId)
+{
+  if (_isLocal) {
+    SALOMEDS::Locker lock;
+    _local_impl->ScenarioId(theId);
+  }
+  else _corba_impl->ScenarioId((char*)theId.c_str());
+}
+
+std::string SALOMEDS_SimanStudy::UserId()
+{
+  std::string anId;
+  if (_isLocal) {
+    SALOMEDS::Locker lock;
+    anId = _local_impl->UserId();
+  }
+  else anId = (CORBA::String_var)_corba_impl->UserId();
+  return anId;
+}
+
+void SALOMEDS_SimanStudy::UserId(const std::string theId)
+{
+  if (_isLocal) {
+    SALOMEDS::Locker lock;
+    _local_impl->UserId(theId);
+  }
+  else _corba_impl->UserId((char*)theId.c_str());
+}
+
+void SALOMEDS_SimanStudy::init_orb()
+{
+  ORB_INIT &init = *SINGLETON_<ORB_INIT>::Instance();
+  ASSERT(SINGLETON_<ORB_INIT>::IsAlreadyExisting());
+  _orb = init(0, 0);
+}
diff --git a/src/SALOMEDS/SALOMEDS_SimanStudy.hxx b/src/SALOMEDS/SALOMEDS_SimanStudy.hxx
new file mode 100644 (file)
index 0000000..3cfe76f
--- /dev/null
@@ -0,0 +1,69 @@
+// Copyright (C) 2007-2012  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
+//
+
+//  File   : SALOMEDS_SimanStudy.hxx
+//  Author : Mikhail PONIKAROV
+//  Module : SALOME
+//
+#ifndef __SALOMEDS_SIMANSTUDY_H__
+#define __SALOMEDS_SIMANSTUDY_H__
+
+#include <vector>
+#include <string>
+
+#include "SALOMEDSClient.hxx"
+#include "SALOMEDSImpl_SimanStudy.hxx"
+
+// IDL headers
+#include <SALOMEconfig.h>
+#include CORBA_SERVER_HEADER(SALOMEDS)
+
+class Standard_EXPORT SALOMEDS_SimanStudy: public SALOMEDSClient_SimanStudy
+{
+
+private:
+  bool                       _isLocal;
+  SALOMEDSImpl_SimanStudy*   _local_impl;
+  SALOMEDS::SimanStudy_var   _corba_impl;
+  CORBA::ORB_var             _orb;
+
+public:
+
+  SALOMEDS_SimanStudy(SALOMEDSImpl_SimanStudy* theStudy);
+  SALOMEDS_SimanStudy(SALOMEDS::SimanStudy_ptr theStudy);
+  ~SALOMEDS_SimanStudy();
+
+  virtual void CheckOut(const _PTR(Study) theTarget);
+  virtual void CheckIn(const std::string theModuleName);
+  virtual _PTR(Study) getReferencedStudy() ;
+  virtual std::string StudyId();
+  virtual void StudyId(const std::string theId);
+  virtual std::string ScenarioId();
+  virtual void ScenarioId(const std::string theId);
+  virtual std::string UserId();
+  virtual void UserId(const std::string theId);
+                
+private:
+  void init_orb();
+
+};
+#endif
diff --git a/src/SALOMEDS/SALOMEDS_SimanStudy_i.cxx b/src/SALOMEDS/SALOMEDS_SimanStudy_i.cxx
new file mode 100644 (file)
index 0000000..e43bf02
--- /dev/null
@@ -0,0 +1,176 @@
+// Copyright (C) 2007-2012  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
+//
+
+//  File   : SALOMEDS_SimanStudy_i.cxx
+//  Author : Mikhail PONIKAROV
+//  Module : SALOME
+//
+#include "utilities.h"
+#include "SALOMEDS_SimanStudy_i.hxx"
+#include "SALOMEDSImpl_SimanStudy.hxx"
+#include "SALOMEDSImpl_StudyManager.hxx"
+#include "SALOMEDS_Study_i.hxx"
+#include "SALOMEDS_Study.hxx"
+
+#include "Basics_Utils.hxx"
+
+//============================================================================
+/*! Function : SALOMEDS_SimanStudy_i
+ *  Purpose  : standard constructor
+ */
+//============================================================================
+SALOMEDS_SimanStudy_i::SALOMEDS_SimanStudy_i(SALOMEDSImpl_SimanStudy* theImpl, CORBA::ORB_ptr orb)
+{
+  _orb = CORBA::ORB::_duplicate(orb);
+  _impl = theImpl;
+}
+
+//============================================================================
+/*! Function : ~SALOMEDS_SimanStudy_i
+ *  Purpose  : standard destructor
+ */
+//============================================================================
+SALOMEDS_SimanStudy_i::~SALOMEDS_SimanStudy_i()
+{
+  //delete implementation
+  delete _impl;
+}
+
+//============================================================================
+/*! Function : CheckOut
+ *  Purpose  : Get data from SIMAN and put it to the given study
+ */
+//============================================================================
+void SALOMEDS_SimanStudy_i::CheckOut(SALOMEDS::Study_ptr theTarget)
+{
+  // SimanStudy and Study must be located at the same place anyway
+  SALOMEDS_Study aStudy(theTarget);
+  _study = aStudy.GetLocalImpl();
+  if (_study) {
+    _impl->CheckOut(_study);
+  }
+}
+
+//============================================================================
+/*! Function : CheckIn
+ *  Purpose  : Get data from SIMAN study and stores to SIMAN
+ */
+//============================================================================
+void SALOMEDS_SimanStudy_i::CheckIn(const char* theModuleName)
+{
+  if (_study) {
+    _impl->CheckIn(theModuleName);
+  }
+}
+
+//============================================================================
+/*! Function : getReferencedStudy
+ *  Purpose  : Returns the %Study with checked out data
+ */
+//============================================================================
+SALOMEDS::Study_ptr SALOMEDS_SimanStudy_i::getReferencedStudy()
+{
+  SALOMEDS::Study_var aStudy = (new SALOMEDS_Study_i(_study, _orb))->_this();
+  return aStudy._retn();
+}
+
+//============================================================================
+/*! Function : StudyId
+ *  Purpose  : The ID of the study in SIMAN server
+ */
+//============================================================================
+char* SALOMEDS_SimanStudy_i::StudyId()
+{
+  return CORBA::string_dup(_impl->StudyId().c_str());
+}
+
+//============================================================================
+/*! Function : StudyId
+ *  Purpose  : The ID of the study in SIMAN server
+ */
+//============================================================================
+void SALOMEDS_SimanStudy_i::StudyId(const char* theId)
+{
+  _impl->StudyId(theId);
+}
+
+//============================================================================
+/*! Function : ScenarioId
+ *  Purpose  : The ID of the scenario in SIMAN server
+ */
+//============================================================================
+char* SALOMEDS_SimanStudy_i::ScenarioId()
+{
+  return CORBA::string_dup(_impl->ScenarioId().c_str());
+}
+
+//============================================================================
+/*! Function : ScenarioId
+ *  Purpose  : The ID of the scenario in SIMAN server
+ */
+//============================================================================
+void SALOMEDS_SimanStudy_i::ScenarioId(const char* theId)
+{
+  _impl->StudyId(theId);
+}
+
+//============================================================================
+/*! Function : UserId
+ *  Purpose  : The ID of the user in SIMAN server
+ */
+//============================================================================
+char* SALOMEDS_SimanStudy_i::UserId()
+{
+  return CORBA::string_dup(_impl->UserId().c_str());
+}
+
+//============================================================================
+/*! Function : UserId
+ *  Purpose  : The ID of the user in SIMAN server
+ */
+//============================================================================
+void SALOMEDS_SimanStudy_i::UserId(const char* theId)
+{
+  _impl->UserId(theId);
+}
+
+
+SALOMEDS_SimanStudy_i* SALOMEDS_SimanStudy_i::GetSimanServant(SALOMEDSImpl_SimanStudy* aSimanImpl, CORBA::ORB_ptr orb)
+{
+  static SALOMEDS_SimanStudy_i* aServant = 0;
+  if (aServant == 0) {
+    aServant = new SALOMEDS_SimanStudy_i(aSimanImpl, orb);
+  }
+  return aServant;
+}
+                                  
+/// PRIVATE FUNCTIONS
+CORBA::LongLong SALOMEDS_SimanStudy_i::GetLocalImpl(const char* theHostname, CORBA::Long thePID, CORBA::Boolean& isLocal)
+{
+#ifdef WIN32
+  long pid = (long)_getpid();
+#else
+  long pid = (long)getpid();
+#endif
+  isLocal = (strcmp(theHostname, Kernel_Utils::GetHostname().c_str()) == 0 && pid == thePID)?1:0;
+  return reinterpret_cast<CORBA::LongLong>(_impl);
+}
diff --git a/src/SALOMEDS/SALOMEDS_SimanStudy_i.hxx b/src/SALOMEDS/SALOMEDS_SimanStudy_i.hxx
new file mode 100644 (file)
index 0000000..cd894aa
--- /dev/null
@@ -0,0 +1,119 @@
+// Copyright (C) 2007-2012  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
+//
+
+//  File   : SALOMEDS_SimanStudy_i.hxx
+//  Author : Mikhail PONIKAROV
+//  Module : SALOME
+//
+#ifndef __SALOMEDS_SIMANSTUDY_I_H__
+#define __SALOMEDS_SIMANSTUDY_I_H__
+
+// IDL headers
+#include <SALOMEconfig.h>
+#include CORBA_SERVER_HEADER(SALOMEDS)
+
+//SALOMEDS headers
+#include "SALOMEDS_Study_i.hxx"
+
+class SALOMEDSImpl_SimanStudy;
+class SALOMEDSImpl_Study;
+
+class Standard_EXPORT SALOMEDS_SimanStudy_i: public POA_SALOMEDS::SimanStudy
+{
+private:
+  CORBA::ORB_var                 _orb;
+  SALOMEDSImpl_SimanStudy*       _impl;  
+  SALOMEDSImpl_Study*          _study;
+
+public:
+
+  //! standard constructor
+  SALOMEDS_SimanStudy_i(SALOMEDSImpl_SimanStudy*, CORBA::ORB_ptr);
+  
+  //! standard destructor
+  virtual ~SALOMEDS_SimanStudy_i(); 
+  
+   /*! \brief Get data from SIMAN and put it to the given study
+
+     This method is called for just created study to make it referenced
+     by this Siman study. Also it fills this study by the checked out
+     data from SIMAN server.
+     Warning: StudyID, ScenarioID and User Id must be set before calling of this method!
+    
+     \param theTarget referenced study for checking out
+  */
+  virtual void CheckOut(SALOMEDS::Study_ptr theTarget);
+
+  /*! \brief Get data from all modules and calls the corresponding SimanIO methods to store it.
+    
+    It works only with already checked out study
+   */
+  virtual void CheckIn(const char* themoduleName);
+  
+  /*! \brief Returns the %Study with checked out data
+
+    If study is null, there is no such study in this application instance, or Salome was
+    launched without siman option.
+  */
+  virtual SALOMEDS::Study_ptr getReferencedStudy();
+  
+  /*! \brief The ID of the study in SIMAN server
+  
+    Returns the Id of SIMAN study, used for CheckOut before.
+  */
+  virtual char* StudyId();
+
+  /*! \brief The ID of the study in SIMAN server
+  
+    Defines the Id of SIMAN study, used for CheckOut after.
+  */
+  virtual void StudyId(const char* theId);
+
+  /*! \brief The ID of the scenario in SIMAN server
+  
+    Returns the Id of SIMAN scenario, used for CheckOut before.
+  */
+  virtual char* ScenarioId();
+
+  /*! \brief The ID of the scenario in SIMAN server
+  
+    Defines the Id of SIMAN scenario, used for CheckOut after.
+  */
+  virtual void ScenarioId(const char* theId);
+
+  /*! \brief The ID of the user in SIMAN server
+  
+    Returns the Id of SIMAN user, used for CheckOut before.
+  */
+  virtual char* UserId();
+
+  /*! \brief The ID of the user in SIMAN server
+  
+    Defines the Id of SIMAN user, used for CheckOut after.
+  */
+  virtual void UserId(const char* theId);
+  
+  virtual CORBA::LongLong GetLocalImpl(const char* theHostname, CORBA::Long thePID, CORBA::Boolean& isLocal);
+
+  static SALOMEDS_SimanStudy_i* GetSimanServant(SALOMEDSImpl_SimanStudy*, CORBA::ORB_ptr orb);
+};
+#endif
index 3e0c434985d895bec6150951bc08383a22154eae..58ed7ebb3d6fb43f8fdac0fe184c7c62ba330159 100644 (file)
@@ -128,7 +128,9 @@ public:
   CORBA::Object_ptr ConvertIORToObject(const std::string& theIOR);     
 
   SALOMEDS::Study_ptr GetStudy();
-
+  
+  SALOMEDSImpl_Study* GetLocalImpl() { return _local_impl; }
+  
 private:
   void init_orb();
 
index 813d0820e89192f559314464c1e7c3addbb28b09..f081e31d184b7df4676ce1a422ad6d3509fb1d3a 100644 (file)
@@ -39,6 +39,8 @@
 
 #include "Basics_Utils.hxx"
 
+#include "SALOMEDS_SimanStudy.hxx"
+
 #ifdef WIN32
 #include <process.h>
 #else
@@ -324,3 +326,21 @@ SALOMEDS_Driver_i* GetDriver(const SALOMEDSImpl_SObject& theObject, CORBA::ORB_p
 
   return driver;
 }
+
+_PTR(SimanStudy) SALOMEDS_StudyManager::GetSimanStudy()
+{
+  SALOMEDSClient_SimanStudy* aSiman = NULL;
+  if (_isLocal) {
+    SALOMEDS::Locker lock;
+
+    SALOMEDSImpl_SimanStudy* aSiman_impl = _local_impl->GetSimanStudy();
+    if(!aSiman_impl) return _PTR(SimanStudy)(aSiman);
+    aSiman = new SALOMEDS_SimanStudy(aSiman_impl);
+  }
+  else { 
+    SALOMEDS::SimanStudy_var aSiman_impl = _corba_impl->GetSimanStudy();
+    if(CORBA::is_nil(aSiman_impl)) return _PTR(SimanStudy)(aSiman);
+    aSiman = new SALOMEDS_SimanStudy(aSiman_impl);
+  }
+  return _PTR(SimanStudy)(aSiman);
+}
index b48175bf7f41ba39b0935318c982f3c0d20bf47b..991f3ae17a862706ec85b7132ea9f4e54a080e93 100644 (file)
@@ -66,6 +66,7 @@ public:
   virtual bool Copy(const _PTR(SObject)& theSO);
   virtual bool CanPaste(const _PTR(SObject)& theSO);
   virtual _PTR(SObject) Paste(const _PTR(SObject)& theSO); 
+  virtual _PTR(SimanStudy) GetSimanStudy(); 
 
 private:
   void init_orb();
index c26919c8e064900b6bae25a062fea87ac34fdd10..9e2340f4da29e449c573a9907c80438d7c9d2188 100644 (file)
 #include "Basics_Utils.hxx"
 #include "SALOME_GenericObj_i.hh"
 
+#include "SALOMEDS_SimanStudy_i.hxx"
+
 #include <sstream>
 #include <vector>
 #include <map>
 
+
 #ifdef WIN32
 #include <process.h>
 #else
@@ -478,6 +481,21 @@ void SALOMEDS_StudyManager_i::ShutdownWithExit()
   exit( EXIT_SUCCESS );
 }
 
+//============================================================================
+/*! Function : GetSimanStudy
+ *  Purpose  : Retruns the created or cashed SimanStudy
+ */
+//============================================================================
+SALOMEDS::SimanStudy_ptr SALOMEDS_StudyManager_i::GetSimanStudy()
+{
+  SALOMEDS::Locker lock;
+
+  SALOMEDSImpl_SimanStudy* aSimanImpl = _impl->GetSimanStudy();
+
+  SALOMEDS_SimanStudy_i* aSiman_servant = SALOMEDS_SimanStudy_i::GetSimanServant(aSimanImpl, _orb);
+  return aSiman_servant->_this();
+}
+
 //===========================================================================
 //   PRIVATE FUNCTIONS
 //===========================================================================
index 5b44f0602bad95b00d0fb0d0bc52b50fe63f866c..5d08c4803e908362bcfbcfe6ecde915820077779 100644 (file)
@@ -151,6 +151,8 @@ public:
   static PortableServer::POA_ptr GetPOA(const SALOMEDS::Study_ptr theStudy);
 
   void Shutdown() { if(!CORBA::is_nil(_orb)) _orb->shutdown(0); }
+
+  virtual SALOMEDS::SimanStudy_ptr GetSimanStudy();
 };
 
 #endif 
index 3076b5821376721b5ed007bbba87e952285cdd5f..f45fe0f404715a62e6333b45603280fa71a24b6e 100644 (file)
@@ -85,6 +85,10 @@ COMMON_LIBS =\
        $(RPATH)/SALOMEDS/libSalomeDS.la \
        $(top_builddir)/idl/libSalomeIDLKernel.la
 
+if WITH_SIMANIO
+  COMMON_CPPFLAGS += -DWITH_SIMANIO
+endif
+
 #
 # ===============================================================
 # Libraries targets
index 9e65df0b214a30ac46e7ac9e6740ff57ee227f21..7c7140d9d370d57fc2c977a77684a74b20e23178 100644 (file)
@@ -66,6 +66,7 @@ salomeinclude_HEADERS=\
                 SALOMEDSClient_SComponentIterator.hxx \
                 SALOMEDSClient_SObject.hxx \
                 SALOMEDSClient_Study.hxx \
+                SALOMEDSClient_SimanStudy.hxx \
                 SALOMEDSClient_StudyBuilder.hxx \
                 SALOMEDSClient_StudyManager.hxx \
                 SALOMEDSClient_UseCaseBuilder.hxx \
@@ -87,7 +88,12 @@ COMMON_CPPFLAGS= \
        -I$(top_builddir)/idl \
        @CORBA_CXXFLAGS@ @CORBA_INCLUDES@
 
+if WITH_SIMANIO
 
+COMMON_CPPFLAGS += -DWITH_SIMANIO
+                                
+endif
+                                
 
 # This local variable defines the list of dependant libraries common to all target in this package.
 COMMON_LIBS = $(top_builddir)/idl/libSalomeIDLKernel.la
index cb606ef13d8f50e1dac22593fb85219426c6a0b2..0289ab11bb6a8dd5c60c88381cdc2af732844ac9 100644 (file)
@@ -65,4 +65,8 @@
 #include "SALOMEDSClient_UseCaseBuilder.hxx"
 #include "SALOMEDSClient_UseCaseIterator.hxx"
 
+#ifdef WITH_SIMANIO
+#include "SALOMEDSClient_SimanStudy.hxx"
+#endif
+
 #endif
diff --git a/src/SALOMEDSClient/SALOMEDSClient_SimanStudy.hxx b/src/SALOMEDSClient/SALOMEDSClient_SimanStudy.hxx
new file mode 100644 (file)
index 0000000..4560198
--- /dev/null
@@ -0,0 +1,56 @@
+// Copyright (C) 2007-2012  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
+//
+
+//  File   : SALOMEDSClient_SimanStudy.hxx
+//  Author : Mikhail PONIKAROV
+//  Module : SALOME
+//
+#ifndef __SALOMEDSClient_SIMANSTUDY_H__
+#define __SALOMEDSClient_SIMANSTUDY_H__
+
+#include <vector>
+#include <string>
+
+#include "SALOMEDSClient_definitions.hxx"
+#include "SALOMEDSClient_Study.hxx"
+#include <SALOMEconfig.h>
+#include CORBA_CLIENT_HEADER(SALOMEDS)
+
+class SALOMEDSClient_SimanStudy
+{
+
+public:
+  virtual ~SALOMEDSClient_SimanStudy() {}
+
+  virtual void CheckOut(const _PTR(Study) theTarget) = 0;
+  virtual void CheckIn(const std::string theModuleName) = 0;
+  virtual _PTR(Study) getReferencedStudy() = 0;
+  virtual std::string StudyId() = 0;
+  virtual void StudyId(const std::string theId) = 0;
+  virtual std::string ScenarioId() = 0;
+  virtual void ScenarioId(const std::string theId) = 0;
+  virtual std::string UserId() = 0;
+  virtual void UserId(const std::string theId) = 0;
+};
+
+
+#endif
index a7081c4f24a344082f601f7a5131be08acec90c4..43717c1b9df9297583233e76c800552927e580ff 100644 (file)
@@ -32,6 +32,7 @@
 
 #include "SALOMEDSClient_definitions.hxx"
 #include "SALOMEDSClient_Study.hxx"
+#include "SALOMEDSClient_SimanStudy.hxx"
 
 class SALOMEDSClient_StudyManager
 {
@@ -52,6 +53,8 @@ public:
   virtual bool Copy(const _PTR(SObject)& theSO) = 0;
   virtual bool CanPaste(const _PTR(SObject)& theSO) = 0;
   virtual _PTR(SObject) Paste(const _PTR(SObject)& theSO) = 0;
+
+  virtual _PTR(SimanStudy) GetSimanStudy() = 0;
   
 };
 
index dac9a72ceccbea34322ce2b050984f13a2c0c547..c2ec0025e9a383e6d50126cb272fcff334a7de33 100644 (file)
@@ -211,6 +211,8 @@ libSalomeDSImpl_la_SOURCES =\
        SALOMEDSImpl_GenericAttribute.hxx \
        SALOMEDSImpl_SComponent.hxx \
        SALOMEDSImpl_SComponentIterator.hxx \
+       SALOMEDSImpl_SimanStudy.hxx \
+       SALOMEDSImpl_SimanStudy.cxx \
        SALOMEDSImpl_SObject.hxx \
        SALOMEDSImpl_StudyBuilder.hxx \
        SALOMEDSImpl_StudyHandle.hxx \
@@ -222,10 +224,21 @@ libSalomeDSImpl_la_SOURCES =\
        SALOMEDSImpl_GenericVariable.hxx \
        SALOMEDSImpl_ScalarVariable.hxx
 
+if WITH_SIMANIO
+
+COMMON_CPPFLAGS += -DWITH_SIMANIO @SIMANIO_CPPFLAGS@ \
+  -I$(srcdir)/../KernelHelpers -I$(srcdir)/../NamingService -I$(srcdir)/../LifeCycleCORBA -I$(srcdir)/../Utils \
+  -I$(srcdir)/../Container -I$(srcdir)/../TOOLSDS
+
+COMMON_LIBS += @SIMANIO_LIBS@ ../KernelHelpers/libSalomeKernelHelpers.la ../LifeCycleCORBA/libSalomeLifeCycleCORBA.la \
+               ../Container/libSalomeContainer.la ../TOOLSDS/libTOOLSDS.la
+
+endif
+
 libSalomeDSImpl_la_CPPFLAGS = $(COMMON_CPPFLAGS)
 libSalomeDSImpl_la_LDFLAGS  = -no-undefined -version-info=0:0:0
 libSalomeDSImpl_la_LIBADD    = $(COMMON_LIBS) $(CORBA_LIBS)
-
+                
 #
 # ===============================================================
 # Executables targets
diff --git a/src/SALOMEDSImpl/SALOMEDSImpl_SimanStudy.cxx b/src/SALOMEDSImpl/SALOMEDSImpl_SimanStudy.cxx
new file mode 100644 (file)
index 0000000..d0d3d0b
--- /dev/null
@@ -0,0 +1,307 @@
+// Copyright (C) 2007-2012  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
+//
+
+//  File   : SALOMEDSImpl_SimanStudy.cxx
+//  Author : Mikhail PONIKAROV
+//  Module : SALOME
+//
+#include "SALOMEDSImpl_SimanStudy.hxx"
+
+#ifdef WITH_SIMANIO
+#include <SimanIO_Link.hxx>
+#include <SimanIO_Activity.hxx>
+#include <SALOME_KernelServices.hxx>
+#include <SALOME_DataContainer_i.hxx>
+#include <Basics_Utils.hxx>
+#include <Basics_DirUtils.hxx>
+#include <SALOMEDS_Tool.hxx>
+#endif
+
+#include <SALOMEconfig.h>
+#include CORBA_SERVER_HEADER(SALOME_Component)
+
+using namespace std;
+
+//============================================================================
+/*! Function : SALOMEDSImpl_SimanStudy
+ *  Purpose  : SALOMEDSImpl_SimanStudy constructor
+ */
+//============================================================================
+SALOMEDSImpl_SimanStudy::SALOMEDSImpl_SimanStudy()
+{
+  _study = 0;
+  _checkedOut = new SimanIO_Configuration;
+}
+
+//============================================================================
+/*! Function : ~SALOMEDSImpl_SimanStudy
+ *  Purpose  : SALOMEDSImpl_SimanStudy destructor
+ */
+//============================================================================
+SALOMEDSImpl_SimanStudy::~SALOMEDSImpl_SimanStudy()
+{
+  if (_checkedOut) {
+#ifdef WITH_SIMANIO
+    SimanIO_Configuration::ActivitiesIterator actIter(*_checkedOut);
+    for(; actIter.More(); actIter.Next()) {
+      SimanIO_Activity::DocumentsIterator aDocIter(actIter.Activity());
+      for(; aDocIter.More(); aDocIter.Next()) {
+        const SimanIO_Document& aDoc = aDocIter.Document();
+        SimanIO_Document::FilesIterator aFileIter(aDoc);
+        for(; aFileIter.More(); aFileIter.Next()) {
+          string aURL = aFileIter.URL();
+          string aDir = Kernel_Utils::GetDirName(aURL);
+          aDir += "/";
+          string aFileName = aURL.substr(aDir.size());
+          SALOMEDS::ListOfFileNames aTmpFiles;
+          aTmpFiles.length(1);
+          aTmpFiles[0] = aFileName.c_str();
+          // try to removetemporary directory that contains this file if directory becomes empty
+          SALOMEDS_Tool::RemoveTemporaryFiles(aDir, aTmpFiles, true);
+        }
+      }
+    }
+#endif
+    delete _checkedOut;
+  }
+}
+
+//============================================================================
+/*! Function : CheckOut
+ *  Purpose  : Fills the referenced study by the SIMAN data
+ */
+//============================================================================
+void SALOMEDSImpl_SimanStudy::CheckOut(SALOMEDSImpl_Study* theTarget)
+{
+  _study = theTarget;
+#ifdef WITH_SIMANIO
+  int aLocked = _study->GetProperties()->IsLocked();
+  if (aLocked) _study->GetProperties()->SetLocked(false);
+
+  SimanIO_Link aLink(_studyId.c_str(), _scenarioId.c_str(), _userId.c_str());
+  if (aLink.IsConnected()) {
+    // Set "C" locale temporarily to avoid possible localization problems
+    Kernel_Utils::Localizer loc;
+    *_checkedOut = aLink.RetrieveConf();
+    SimanIO_Configuration::ActivitiesIterator actIter(*_checkedOut);
+    for(; actIter.More(); actIter.Next()) {
+      Engines::EngineComponent_var aComp =
+        KERNEL::getLifeCycleCORBA()->FindOrLoad_Component("FactoryServerPy", actIter.Activity().Module());
+      if (CORBA::is_nil(aComp)) // it is not python container, try to find in C++ container
+        aComp = KERNEL::getLifeCycleCORBA()->FindOrLoad_Component("FactoryServer", actIter.Activity().Module());
+      if (CORBA::is_nil(aComp)) {
+        MESSAGE("Checkout: component "<<actIter.Activity().Module()<<" is nil");
+      } else {
+        SimanIO_Activity::DocumentsIterator aDocIter(actIter.Activity());
+        for(; aDocIter.More(); aDocIter.Next()) {
+          if (_filesId.find(aDocIter.DocId()) == _filesId.end())
+            _filesId[aDocIter.DocId()] = map<string, int>();
+          const SimanIO_Document& aDoc = aDocIter.Document(); 
+          SimanIO_Document::FilesIterator aFileIter(aDoc);
+          for(; aFileIter.More(); aFileIter.Next()) {
+            if (aFileIter.GetProcessing() == FILE_IMPORT) {
+              // files provided by SIMAN will be removed later, on study close
+              Engines::DataContainer_var aData = (new Engines_DataContainer_i(
+                aFileIter.URL(), aDoc.Name(), "", false))->_this();
+              Engines::ListOfOptions anEmptyOpts;
+              Engines::ListOfIdentifiers_var anIds = aComp->importData(_study->StudyId(), aData, anEmptyOpts);
+              for(int anIdNum = 0; anIdNum < anIds->length(); anIdNum++) {
+                const char* anId = anIds[anIdNum];
+                _filesId[aDocIter.DocId()][anId] = aFileIter.Id();
+              }
+            } else {
+              cout<<"!!! File just downloaded, not imported:"<<aFileIter.Id()<<endl;
+            }
+          }
+        }
+      }
+    }
+  } else {
+    MESSAGE("There is no connection to SIMAN!")
+  }
+
+  if (aLocked) _study->GetProperties()->SetLocked(true);
+
+#endif
+}
+
+//============================================================================
+/*! Function : CheckIn
+ *  Purpose  : Fills the SIMAN by the SIMAN study data
+ */
+//============================================================================
+void SALOMEDSImpl_SimanStudy::CheckIn(const std::string theModuleName)
+{
+#ifdef WITH_SIMANIO
+  if (!_study) {
+    MESSAGE("No siman study defined");
+    return;
+  }
+  SimanIO_Link aLink(_studyId.c_str(), _scenarioId.c_str(), _userId.c_str());
+  if (aLink.IsConnected()) {
+    // Set "C" locale temporarily to avoid possible localization problems
+    Kernel_Utils::Localizer loc;
+    SimanIO_Configuration aToStore; // here create and store data in this configuration to check in to SIMAN
+    string aTmpDir = SALOMEDS_Tool::GetTmpDir(); // temporary directory for checked in files
+    int aFileIndex = 0; // for unique file name generation
+    list<string> aTemporaryFileNames;
+    SimanIO_Configuration::ActivitiesIterator actIter(*_checkedOut);
+    for(; actIter.More(); actIter.Next()) {
+      int aDocId = actIter.Activity().DocumentMaxID();
+      if (aDocId < 0) continue; // no documents => no check in
+      if (!theModuleName.empty() && theModuleName != actIter.Activity().Module()) {
+        continue;
+      }
+      Engines::EngineComponent_var aComp =
+        KERNEL::getLifeCycleCORBA()->FindOrLoad_Component("FactoryServerPy", actIter.Activity().Module());
+      if (CORBA::is_nil(aComp)) // it is not python container, try to find in C++ container
+        aComp = KERNEL::getLifeCycleCORBA()->FindOrLoad_Component("FactoryServer", actIter.Activity().Module());
+      if (CORBA::is_nil(aComp)) {
+        MESSAGE("Checkin: component "<<actIter.Activity().Module()<<" is nil");
+      } else {
+        const SimanIO_Document& aDoc = actIter.Activity().Document(aDocId);
+        Engines::ListOfData_var aList = aComp->getModifiedData(_study->StudyId());
+        int aNumData = aList->length();
+        for(int aDataIndex = 0; aDataIndex < aNumData; aDataIndex++) {
+          Engines::DataContainer_var aData = aList[aDataIndex];
+          // store this in the configuration
+          SimanIO_Activity& aStoreActivity = aToStore.GetOrCreateActivity(actIter.ActivityId());
+          aStoreActivity.SetName(actIter.Activity().Name());
+          aStoreActivity.SetModule(actIter.Activity().Module());
+          SimanIO_Document& aStoreDoc = aStoreActivity.GetOrCreateDocument(aDocId);
+          aStoreDoc.SetName(aDoc.Name());
+          // prepare a file to store
+          SimanIO_File aStoreFile;
+
+          stringstream aNumStore;
+          aNumStore<<"file"<<(++aFileIndex);
+          string aFileName(aNumStore.str());
+          string anExtension(aData->extension());
+          aFileName += "." + anExtension;
+          string aFullPath = aTmpDir + aFileName;
+          Engines::TMPFile* aFileStream = aData->get();
+          const char *aBuffer = (const char*)aFileStream->NP_data();
+#ifdef WIN32
+          std::ofstream aFile(aFullPath.c_str(), std::ios::binary);
+#else
+          std::ofstream aFile(aFullPath.c_str());
+#endif
+          aFile.write(aBuffer, aFileStream->length());
+          aFile.close();
+          aTemporaryFileNames.push_back(aFileName);
+
+          aStoreFile.url = aFullPath;
+          if (_filesId[aDocId].find(aData->identifier()) != _filesId[aDocId].end()) { // file is already exists
+            aStoreFile.id = _filesId[aDocId][aData->identifier()];
+            aStoreFile.result = aDoc.File(aStoreFile.id).result;
+          } else {
+            aStoreFile.id = -1; // to be created as new
+            aStoreFile.result = true; // new is always result
+          }
+
+          aStoreDoc.AddFile(aStoreFile);
+        }
+      }
+    }
+    aLink.StoreConf(aToStore);
+    // after files have been stored, remove them from the temporary directory
+    SALOMEDS::ListOfFileNames aTmpFiles;
+    aTmpFiles.length(aTemporaryFileNames.size());
+    list<string>::iterator aFilesIter = aTemporaryFileNames.begin();
+    for(int a = 0; aFilesIter != aTemporaryFileNames.end(); aFilesIter++, a++)
+      aTmpFiles[a] = aFilesIter->c_str();
+    SALOMEDS_Tool::RemoveTemporaryFiles(aTmpDir, aTmpFiles, true);
+  } else {
+    MESSAGE("There is no connection to SIMAN!")
+  }
+#endif
+}
+
+//============================================================================
+/*! Function : getReferencedStudy
+ *  Purpose  : 
+ */
+//============================================================================
+SALOMEDSImpl_Study* SALOMEDSImpl_SimanStudy::getReferencedStudy()
+{
+  return _study;
+}
+
+//============================================================================
+/*! Function : StudyId
+ *  Purpose  : 
+ */
+//============================================================================
+std::string SALOMEDSImpl_SimanStudy::StudyId()
+{
+  return _studyId;
+}
+
+//============================================================================
+/*! Function : StudyId
+ *  Purpose  : 
+ */
+//============================================================================
+void SALOMEDSImpl_SimanStudy::StudyId(const std::string theId)
+{
+  _studyId = theId;
+}
+
+//============================================================================
+/*! Function : ScenarioId
+ *  Purpose  : 
+ */
+//============================================================================
+std::string SALOMEDSImpl_SimanStudy::ScenarioId()
+{
+  return _scenarioId;
+}
+
+//============================================================================
+/*! Function : ScenarioId
+ *  Purpose  : 
+ */
+//============================================================================
+void SALOMEDSImpl_SimanStudy::ScenarioId(const std::string theId)
+{
+  _scenarioId = theId;
+}
+
+//============================================================================
+/*! Function : UserId
+ *  Purpose  : 
+ */
+//============================================================================
+std::string SALOMEDSImpl_SimanStudy::UserId()
+{
+  return _userId;
+}
+
+//============================================================================
+/*! Function : UserId
+ *  Purpose  : 
+ */
+//============================================================================
+void SALOMEDSImpl_SimanStudy::UserId(const std::string theId)
+{
+  _userId = theId;
+}
diff --git a/src/SALOMEDSImpl/SALOMEDSImpl_SimanStudy.hxx b/src/SALOMEDSImpl/SALOMEDSImpl_SimanStudy.hxx
new file mode 100644 (file)
index 0000000..27959f6
--- /dev/null
@@ -0,0 +1,69 @@
+// Copyright (C) 2007-2012  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
+//
+
+//  File   : SALOMEDSImpl_SimanStudy.hxx
+//  Author : Mikhail PONIKAROV
+//  Module : SALOME
+//
+#ifndef __SALOMEDSIMPL_SIMANSTUDY_I_H__
+#define __SALOMEDSIMPL_SIMANSTUDY_I_H__
+
+// std C++ headers
+#include <iostream>
+#include <string>
+
+//SALOMEDSImpl headers
+#include "SALOMEDSImpl_Defines.hxx"
+#include "SALOMEDSImpl_Study.hxx"
+
+class SimanIO_Configuration;
+
+class SALOMEDSIMPL_EXPORT SALOMEDSImpl_SimanStudy
+{
+private:
+  SALOMEDSImpl_Study*      _study; // referenced study
+  std::string              _studyId; // SIMAN ID
+  std::string              _scenarioId; // SIMAN ID
+  std::string              _userId; // SIMAN ID
+  
+  SimanIO_Configuration* _checkedOut; // pointer to information about checked out data
+  std::map<int, std::map<std::string, int> > _filesId; // map from document id to component identifiers to SIMAN file ID
+
+public:
+
+  virtual void CheckOut(SALOMEDSImpl_Study* theTarget);
+  virtual void CheckIn(const std::string theModuleName);
+  virtual SALOMEDSImpl_Study* getReferencedStudy();
+  virtual std::string StudyId();
+  virtual void StudyId(const std::string theId);
+  virtual std::string ScenarioId();
+  virtual void ScenarioId(const std::string theId);
+  virtual std::string UserId();
+  virtual void UserId(const std::string theId);
+
+  //! standard constructor
+  SALOMEDSImpl_SimanStudy();
+  
+  //! standard destructor
+  virtual ~SALOMEDSImpl_SimanStudy(); 
+};
+#endif
index d52b629ebdb8fd43272d80e2b0e16d6979bb1f5d..b4928a2bbc75adfe46f14a89cf12ae8d39d35ccc 100644 (file)
@@ -40,6 +40,8 @@
 #include "SALOMEDSImpl_SComponent.hxx"
 #include "SALOMEDSImpl_GenericAttribute.hxx"
 #include "SALOMEDSImpl_ScalarVariable.hxx"
+#include "SALOMEDSImpl_SimanStudy.hxx"
+
 #include <map>
 
 #include "HDFOI.hxx"
@@ -67,6 +69,7 @@ SALOMEDSImpl_StudyManager::SALOMEDSImpl_StudyManager()
   _appli = new DF_Application();
   _IDcounter = 0;
   _clipboard = _appli->NewDocument("SALOME_STUDY");
+  _siman = 0;
 }
 
 //============================================================================
@@ -79,6 +82,7 @@ SALOMEDSImpl_StudyManager::~SALOMEDSImpl_StudyManager()
   _appli->Close(_clipboard);
   // Destroy application
   delete _appli;    
+  if (_siman) delete _siman;
 }
 
 
@@ -1477,3 +1481,15 @@ void ReadNoteBookVariables(SALOMEDSImpl_Study* theStudy, HDFgroup* theGroup)
   
   theGroup->CloseOnDisk();
 }
+
+//============================================================================
+/*! Function : GetSimanStudy
+ *  Purpose  : Retruns the created or cashed SimanStudy
+ */
+//==================================================T==========================
+SALOMEDSImpl_SimanStudy* SALOMEDSImpl_StudyManager::GetSimanStudy()
+{
+  if (_siman == 0)
+    _siman = new SALOMEDSImpl_SimanStudy();
+  return _siman;
+}
index f65863d889550763efae75685661168a0022fcfa..c3d48aa6692e7886b10f93a9b8527920bb525c42 100644 (file)
@@ -43,6 +43,7 @@
 #include "DF_Document.hxx"
 
 class HDFgroup;
+class SALOMEDSImpl_SimanStudy;
 
 class SALOMEDSIMPL_EXPORT SALOMEDSImpl_StudyManager
 {
@@ -53,6 +54,7 @@ private:
   int               _IDcounter;
   DF_Document*      _clipboard;
   std::string       _errorCode;
+  SALOMEDSImpl_SimanStudy* _siman;
 
 public:
 
@@ -139,6 +141,9 @@ public:
   std::string GetErrorCode() { return _errorCode; }
   virtual bool IsError() { return _errorCode != ""; }
 
+  //! Retruns the created or cashed SimanStudy
+  virtual SALOMEDSImpl_SimanStudy* GetSimanStudy();
+
 };
 
 #endif