*/
Study getReferencedStudy();
-/*!
- Private method, returns an implementation of this Study.
- \param theHostname is a hostname of the caller
- \param thePID is a process ID of the caller
- \param isLocal is set True if the Study is launched locally with the caller
-*/
- long long GetLocalImpl(in string theHostname, in long thePID, out boolean isLocal);
};
//==========================================================================
if WITH_SIMANIO
-COMMON_CPPFLAGS += -DWITH_SIMANIO
+COMMON_CPPFLAGS += -DWITH_SIMANIO @SIMANIO_CPPFLAGS@
+COMMON_LIBS += @SIMANIO_LIBS@
+
+COMMON_CPPFLAGS += -I$(srcdir)/../KernelHelpers -I$(srcdir)/../Container -I$(srcdir)/../TOOLSDS
+
+COMMON_LIBS += ../KernelHelpers/libSalomeKernelHelpers.la ../Container/libSalomeContainer.la ../TOOLSDS/libTOOLSDS.la
endif
#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
_local_impl = NULL;
_corba_impl = SALOMEDS::SimanStudy::_duplicate(theStudy);
}
+ */
+ _corba_impl = SALOMEDS::SimanStudy::_duplicate(theStudy);
init_orb();
}
{
if (!theTarget) return;
SALOMEDS_Study* aStudy = dynamic_cast<SALOMEDS_Study*>(theTarget.get());
- if (_isLocal) {
+ /*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());
+ else*/ _corba_impl->CheckOut(aStudy->GetStudy());
}
void SALOMEDS_SimanStudy::CheckIn(const std::string theModuleName)
{
- if (_isLocal) {
+ /*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());
+ else*/ _corba_impl->CheckIn((char*)theModuleName.c_str());
}
_PTR(Study) SALOMEDS_SimanStudy::getReferencedStudy()
{
SALOMEDSClient_Study* aStudy = NULL;
- if (_isLocal) {
+ /*if (_isLocal) {
SALOMEDS::Locker lock;
SALOMEDSImpl_Study* aStudy_impl = _local_impl->getReferencedStudy();
SALOMEDS::Study_var aStudy_impl = _corba_impl->getReferencedStudy();
if (CORBA::is_nil(aStudy_impl)) return _PTR(Study)(aStudy);
aStudy = new SALOMEDS_Study(aStudy_impl);
- }
+ }*/
+ 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) {
+ /*if (_isLocal) {
SALOMEDS::Locker lock;
anId = _local_impl->StudyId();
}
- else anId = (CORBA::String_var)_corba_impl->StudyId();
+ else*/ anId = (CORBA::String_var)_corba_impl->StudyId();
return anId;
}
void SALOMEDS_SimanStudy::StudyId(const std::string theId)
{
- if (_isLocal) {
+ /*if (_isLocal) {
SALOMEDS::Locker lock;
_local_impl->StudyId(theId);
}
- else _corba_impl->StudyId((char*)theId.c_str());
+ else*/ _corba_impl->StudyId((char*)theId.c_str());
}
std::string SALOMEDS_SimanStudy::ScenarioId()
{
std::string anId;
- if (_isLocal) {
+ /*if (_isLocal) {
SALOMEDS::Locker lock;
anId = _local_impl->ScenarioId();
}
- else anId = (CORBA::String_var)_corba_impl->ScenarioId();
+ else*/ anId = (CORBA::String_var)_corba_impl->ScenarioId();
return anId;
}
void SALOMEDS_SimanStudy::ScenarioId(const std::string theId)
{
- if (_isLocal) {
+ /*if (_isLocal) {
SALOMEDS::Locker lock;
_local_impl->ScenarioId(theId);
}
- else _corba_impl->ScenarioId((char*)theId.c_str());
+ else*/ _corba_impl->ScenarioId((char*)theId.c_str());
}
std::string SALOMEDS_SimanStudy::UserId()
{
std::string anId;
- if (_isLocal) {
+ /*if (_isLocal) {
SALOMEDS::Locker lock;
anId = _local_impl->UserId();
}
- else anId = (CORBA::String_var)_corba_impl->UserId();
+ else*/ anId = (CORBA::String_var)_corba_impl->UserId();
return anId;
}
void SALOMEDS_SimanStudy::UserId(const std::string theId)
{
- if (_isLocal) {
+ /*if (_isLocal) {
SALOMEDS::Locker lock;
_local_impl->UserId(theId);
}
- else _corba_impl->UserId((char*)theId.c_str());
+ else*/ _corba_impl->UserId((char*)theId.c_str());
}
void SALOMEDS_SimanStudy::init_orb()
#include <vector>
#include <string>
+#include <DF_definitions.hxx>
#include "SALOMEDSClient.hxx"
-#include "SALOMEDSImpl_SimanStudy.hxx"
+//#include "SALOMEDSImpl_SimanStudy.hxx"
// IDL headers
#include <SALOMEconfig.h>
{
private:
- bool _isLocal;
- SALOMEDSImpl_SimanStudy* _local_impl;
+ // bool _isLocal;
+ //SALOMEDSImpl_SimanStudy* _local_impl; // MPV: no local implementation yet: siman operations works only with CORBA interface
SALOMEDS::SimanStudy_var _corba_impl;
CORBA::ORB_var _orb;
public:
- SALOMEDS_SimanStudy(SALOMEDSImpl_SimanStudy* theStudy);
+ //SALOMEDS_SimanStudy(SALOMEDSImpl_SimanStudy* theStudy);
SALOMEDS_SimanStudy(SALOMEDS::SimanStudy_ptr theStudy);
~SALOMEDS_SimanStudy();
//
#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"
+#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
+
+using namespace std;
+
//============================================================================
/*! Function : SALOMEDS_SimanStudy_i
* Purpose : standard constructor
*/
//============================================================================
-SALOMEDS_SimanStudy_i::SALOMEDS_SimanStudy_i(SALOMEDSImpl_SimanStudy* theImpl, CORBA::ORB_ptr orb)
+SALOMEDS_SimanStudy_i::SALOMEDS_SimanStudy_i(/*SALOMEDSImpl_SimanStudy* theImpl,*/ CORBA::ORB_ptr orb)
{
_orb = CORBA::ORB::_duplicate(orb);
- _impl = theImpl;
}
//============================================================================
//============================================================================
SALOMEDS_SimanStudy_i::~SALOMEDS_SimanStudy_i()
{
- //delete implementation
- delete _impl;
+#ifdef WITH_SIMANIO
+ if (_checkedOut) {
+ 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 remove temporary directory that contains this file if directory becomes empty
+ SALOMEDS_Tool::RemoveTemporaryFiles(aDir, aTmpFiles, true);
+ }
+ }
+ }
+ delete _checkedOut;
+ }
+#endif
}
//============================================================================
SALOMEDS_Study aStudy(theTarget);
_study = aStudy.GetLocalImpl();
if (_study) {
- _impl->CheckOut(_study);
+#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
}
}
void SALOMEDS_SimanStudy_i::CheckIn(const char* theModuleName)
{
if (_study) {
- _impl->CheckIn(theModuleName);
+#ifdef WITH_SIMANIO
+ string aModuleName(theModuleName);
+ 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 (!aModuleName.empty() && aModuleName != 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 {
+ SimanIO_Document aDoc;
+ if (aDocId != -1) // get document is at least one exists in this action, "-1" is the Id of the new document otherwise
+ 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
}
}
//============================================================================
char* SALOMEDS_SimanStudy_i::StudyId()
{
- return CORBA::string_dup(_impl->StudyId().c_str());
+ return CORBA::string_dup(_studyId.c_str());
}
//============================================================================
//============================================================================
void SALOMEDS_SimanStudy_i::StudyId(const char* theId)
{
- _impl->StudyId(theId);
+ _studyId = theId;
}
//============================================================================
//============================================================================
char* SALOMEDS_SimanStudy_i::ScenarioId()
{
- return CORBA::string_dup(_impl->ScenarioId().c_str());
+ return CORBA::string_dup(_scenarioId.c_str());
}
//============================================================================
//============================================================================
void SALOMEDS_SimanStudy_i::ScenarioId(const char* theId)
{
- _impl->ScenarioId(theId);
+ _scenarioId = theId;
}
//============================================================================
//============================================================================
char* SALOMEDS_SimanStudy_i::UserId()
{
- return CORBA::string_dup(_impl->UserId().c_str());
+ return CORBA::string_dup(_userId.c_str());
}
//============================================================================
//============================================================================
void SALOMEDS_SimanStudy_i::UserId(const char* theId)
{
- _impl->UserId(theId);
+ _userId = theId;
}
-
-SALOMEDS_SimanStudy_i* SALOMEDS_SimanStudy_i::GetSimanServant(SALOMEDSImpl_SimanStudy* aSimanImpl, CORBA::ORB_ptr orb)
+SALOMEDS_SimanStudy_i* SALOMEDS_SimanStudy_i::GetSimanServant(CORBA::ORB_ptr orb)
{
static SALOMEDS_SimanStudy_i* aServant = 0;
if (aServant == 0) {
- aServant = new SALOMEDS_SimanStudy_i(aSimanImpl, orb);
+ aServant = new SALOMEDS_SimanStudy_i(orb);
}
return aServant;
}
/// PRIVATE FUNCTIONS
+/*
CORBA::LongLong SALOMEDS_SimanStudy_i::GetLocalImpl(const char* theHostname, CORBA::Long thePID, CORBA::Boolean& isLocal)
{
#ifdef WIN32
isLocal = (strcmp(theHostname, Kernel_Utils::GetHostname().c_str()) == 0 && pid == thePID)?1:0;
return reinterpret_cast<CORBA::LongLong>(_impl);
}
+*/
//SALOMEDS headers
#include "SALOMEDS_Study_i.hxx"
-class SALOMEDSImpl_SimanStudy;
-class SALOMEDSImpl_Study;
+class SimanIO_Configuration;
class Standard_EXPORT SALOMEDS_SimanStudy_i: public POA_SALOMEDS::SimanStudy
{
private:
CORBA::ORB_var _orb;
- SALOMEDSImpl_SimanStudy* _impl;
+ //SALOMEDSImpl_SimanStudy* _impl;
SALOMEDSImpl_Study* _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
+ std::map<int, std::map<std::string, int> > _filesId; // map from document id to component identifiers to SIMAN file ID
+
public:
- //! standard constructor
- SALOMEDS_SimanStudy_i(SALOMEDSImpl_SimanStudy*, CORBA::ORB_ptr);
+ //! constructor create global Siman stduy (is called in StudyManager only)
+ SALOMEDS_SimanStudy_i(/*SALOMEDSImpl_SimanStudy*,*/ CORBA::ORB_ptr);
//! standard destructor
virtual ~SALOMEDS_SimanStudy_i();
*/
virtual void UserId(const char* theId);
- virtual CORBA::LongLong GetLocalImpl(const char* theHostname, CORBA::Long thePID, CORBA::Boolean& isLocal);
+ //virtual CORBA::LongLong GetLocalImpl(const char* theHostname, CORBA::Long thePID, CORBA::Boolean& isLocal);
- static SALOMEDS_SimanStudy_i* GetSimanServant(SALOMEDSImpl_SimanStudy*, CORBA::ORB_ptr orb);
+ static SALOMEDS_SimanStudy_i* GetSimanServant(CORBA::ORB_ptr orb);
};
#endif
_PTR(SimanStudy) SALOMEDS_StudyManager::GetSimanStudy()
{
SALOMEDSClient_SimanStudy* aSiman = NULL;
- if (_isLocal) {
+ /*if (_isLocal) {
SALOMEDS::Locker lock;
SALOMEDSImpl_SimanStudy* aSiman_impl = _local_impl->GetSimanStudy();
SALOMEDS::SimanStudy_var aSiman_impl = _corba_impl->GetSimanStudy();
if(CORBA::is_nil(aSiman_impl)) return _PTR(SimanStudy)(aSiman);
aSiman = new SALOMEDS_SimanStudy(aSiman_impl);
- }
+ }*/
+ 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);
}
delete _name_service;
delete _factory;
delete _impl;
+ delete SALOMEDS_SimanStudy_i::GetSimanServant(_orb);
}
//============================================================================
{
SALOMEDS::Locker lock;
- SALOMEDSImpl_SimanStudy* aSimanImpl = _impl->GetSimanStudy();
-
- SALOMEDS_SimanStudy_i* aSiman_servant = SALOMEDS_SimanStudy_i::GetSimanServant(aSimanImpl, _orb);
+ SALOMEDS_SimanStudy_i* aSiman_servant = SALOMEDS_SimanStudy_i::GetSimanServant(_orb);
return aSiman_servant->_this();
}
-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
#include "SALOMEDSClient_GenericAttribute.hxx"
#include "SALOMEDSClient_SComponent.hxx"
#include "SALOMEDSClient_SComponentIterator.hxx"
+#include "SALOMEDSClient_SimanStudy.hxx"
#include "SALOMEDSClient_SObject.hxx"
#include "SALOMEDSClient_Study.hxx"
#include "SALOMEDSClient_StudyBuilder.hxx"
#include "SALOMEDSClient_UseCaseBuilder.hxx"
#include "SALOMEDSClient_UseCaseIterator.hxx"
-#ifdef WITH_SIMANIO
-#include "SALOMEDSClient_SimanStudy.hxx"
-#endif
-
#endif
virtual void UserId(const std::string theId) = 0;
};
-
#endif
SALOMEDSImpl_TMPFile.cxx \
SALOMEDSImpl_GenericVariable.cxx \
SALOMEDSImpl_ScalarVariable.cxx \
- SALOMEDSImpl_SimanStudy.cxx \
- \
SALOMEDSImpl_AttributeComment.hxx \
SALOMEDSImpl_AttributeDrawable.hxx \
SALOMEDSImpl_AttributeExpandable.hxx \
SALOMEDSImpl_GenericAttribute.hxx \
SALOMEDSImpl_SComponent.hxx \
SALOMEDSImpl_SComponentIterator.hxx \
- SALOMEDSImpl_SimanStudy.hxx \
SALOMEDSImpl_SObject.hxx \
SALOMEDSImpl_StudyBuilder.hxx \
SALOMEDSImpl_StudyHandle.hxx \
SALOMEDSImpl_GenericVariable.hxx \
SALOMEDSImpl_ScalarVariable.hxx
-if WITH_SIMANIO
-
-COMMON_CPPFLAGS += -DWITH_SIMANIO @SIMANIO_CPPFLAGS@
-COMMON_LIBS += @SIMANIO_LIBS@
-
-###################################################################################################
-# VSR: these commands should be removed
-# vvv
-COMMON_CPPFLAGS += \
- -I$(top_builddir)/idl @CORBA_CXXFLAGS@ @CORBA_INCLUDES@ \
- -I$(srcdir)/../KernelHelpers -I$(srcdir)/../NamingService -I$(srcdir)/../LifeCycleCORBA -I$(srcdir)/../Utils \
- -I$(srcdir)/../Container -I$(srcdir)/../TOOLSDS
-
-COMMON_LIBS += \
- $(top_builddir)/idl/libSalomeIDLKernel.la \
- ../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)
+++ /dev/null
-// 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;
-#ifdef WITH_SIMANIO
- _checkedOut = new SimanIO_Configuration;
-#endif
-}
-
-//============================================================================
-/*! Function : ~SALOMEDSImpl_SimanStudy
- * Purpose : SALOMEDSImpl_SimanStudy destructor
- */
-//============================================================================
-SALOMEDSImpl_SimanStudy::~SALOMEDSImpl_SimanStudy()
-{
-#ifdef WITH_SIMANIO
- if (_checkedOut) {
- 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 remove temporary directory that contains this file if directory becomes empty
- SALOMEDS_Tool::RemoveTemporaryFiles(aDir, aTmpFiles, true);
- }
- }
- }
- delete _checkedOut;
- }
-#endif
-}
-
-//============================================================================
-/*! 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 {
- SimanIO_Document aDoc;
- if (aDocId != -1) // get document is at least one exists in this action, "-1" is the Id of the new document otherwise
- 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;
-}
+++ /dev/null
-// 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
#include "SALOMEDSImpl_GenericAttribute.hxx"
#include "SALOMEDSImpl_ScalarVariable.hxx"
#include "SALOMEDSImpl_IParameters.hxx"
-#include "SALOMEDSImpl_SimanStudy.hxx"
#include <map>
_appli = new DF_Application();
_IDcounter = 0;
_clipboard = _appli->NewDocument("SALOME_STUDY");
- _siman = 0;
}
//============================================================================
_appli->Close(_clipboard);
// Destroy application
delete _appli;
- if (_siman) delete _siman;
}
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;
-}
#include "DF_Document.hxx"
class HDFgroup;
-class SALOMEDSImpl_SimanStudy;
class SALOMEDSIMPL_EXPORT SALOMEDSImpl_StudyManager
{
int _IDcounter;
DF_Document* _clipboard;
std::string _errorCode;
- SALOMEDSImpl_SimanStudy* _siman;
public:
std::string GetErrorCode() { return _errorCode; }
virtual bool IsError() { return _errorCode != ""; }
- //! Retruns the created or cashed SimanStudy
- virtual SALOMEDSImpl_SimanStudy* GetSimanStudy();
-
};
#endif