// VISU OBJECT : interactive object for VISU entities implementation
//
// Copyright (C) 2003 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.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org
+// 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.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org
//
//
// File : VISUConfig.cc
#include "VISUConfig.hh"
+#include "SUIT_ResourceMgr.h"
+#include "SUIT_Session.h"
+
+#include <SALOMEDSClient_GenericAttribute.hxx>
+#include <SALOMEDSClient_AttributeIOR.hxx>
+
+#include <SalomeApp_Application.h>
+
using namespace std;
#ifdef _DEBUG_
#endif
namespace VISU{
+
+ SUIT_Session*
+ GetSession()
+ {
+ return SUIT_Session::session();
+ }
+
+ SUIT_ResourceMgr*
+ GetResourceMgr()
+ {
+ return GetSession()->resourceMgr();
+ }
+
//===========================================================================
+
QMutex* Base_i::myMutex = NULL; //apo - &VISUMutex;
CORBA::ORB_var Base_i::myOrb;
PortableServer::POA_var Base_i::myPoa;
//===========================================================================
static int mySCnt = 0;
- static int myQCnt = 0;
- static int myIsBatchMode = 0;
+ static QMutex aMutex(TRUE);
- Mutex::Mutex(QMutex* theMutex, QApplication* theQApp, int theDelay) :
- myQApp(theQApp), isQAppLocked(theQApp->locked()), myDelay(theDelay),
- myMutex(theMutex), isSessionLocked(theMutex->locked())
- {
- if(MYDEBUG) MESSAGE("Mutex::Mutex : "<<(!isQAppLocked && !myQCnt)<<" "<<(!isSessionLocked && !mySCnt));
- if(!myIsBatchMode && isQAppLocked) myIsBatchMode++;
- if(!isSessionLocked && !mySCnt) { myMutex->lock();}; mySCnt++;
- if(!isQAppLocked && !myQCnt) {
- myQApp->lock();
- myQApp->syncX();
- };
- myQCnt++;
+ Mutex::Mutex(QMutex* theMutex): myMutex(&aMutex){
+ if(MYDEBUG) MESSAGE("Mutex::Mutex : "<<!mySCnt);
+ if(!mySCnt++)
+ myMutex->lock();
}
+
Mutex::~Mutex(){
- myQCnt--;
- if(!isQAppLocked && !myQCnt) {
- myQApp->flushX();
- //if(myDelay > 0)
- myQApp->processEvents(myDelay+3);
- myQApp->unlock();
- }
- mySCnt--; if(!isSessionLocked && !mySCnt) { myMutex->unlock();}
- if(MYDEBUG) MESSAGE("Mutex::~Mutex : "<<(!isQAppLocked && !myQCnt)<<" "<<(!isSessionLocked && !mySCnt));
+ if(!(--mySCnt))
+ myMutex->unlock();
+ if(MYDEBUG) MESSAGE("Mutex::~Mutex : "<<!mySCnt);
}
}
void Storable::Registry(const char* theComment, TStorableEngine theEngine)
- throw(std::logic_error&)
{
if(!VisuStoreMap.insert(TCallbackMap::value_type(theComment,theEngine)).second){
if(MYDEBUG) MESSAGE("Storable::Registry >> dupliacte registring !!!");
}
Storable* Storable::Create(SALOMEDS::SObject_ptr theSObject,
const string& thePrefix, const string& theLocalPersistentID)
- throw (std::runtime_error&)
{
try{
QString strIn( theLocalPersistentID.c_str() );
return (i->second)(theSObject,thePrefix,aMap);
}
}catch(std::logic_error& exc){
- INFOS("Follow exception was accured :\n"<<exc.what());
+ INFOS("Follow exception was occured :\n"<<exc.what());
}catch(...){
- INFOS("Unknown exception was accured!");
+ INFOS("Unknown exception was occured!");
}
return NULL;
}
- const QString& Storable::FindValue(const TRestoringMap& theMap, const string& theArg, bool* isFind)
- throw(std::logic_error&)
+ QString Storable::FindValue(const TRestoringMap& theMap, const string& theArg, bool* isFind)
{
TRestoringMap::const_iterator i = theMap.find(theArg);
if(i == theMap.end()) {
PortableServer::Servant aServant = aPOA->reference_to_servant(theObject);
return aServant;
} catch (...) {
- INFOS("GetServant - Unknown exception was accured!!!");
+ INFOS("GetServant - Unknown exception was occured!!!");
return NULL;
}
}
anObj = anORB->string_to_object(aValue);
}
}catch(...){
- INFOS("SObjectToObject - Unknown exception was accured!!!");
+ INFOS("SObjectToObject - Unknown exception was occured!!!");
+ }
+ return anObj;
+ }
+
+ //===========================================================================
+ CORBA::Object_var ClientSObjectToObject(_PTR(SObject) theSObject){
+ _PTR(GenericAttribute) anAttr;
+ CORBA::Object_var anObj;
+ try{
+ if(theSObject->FindAttribute(anAttr, "AttributeIOR")){
+ _PTR(AttributeIOR) anIOR = anAttr;
+ CORBA::String_var aValue = anIOR->Value().c_str();
+ CORBA::ORB_ptr anORB = Base_i::GetORB();
+ if(strcmp(aValue,"") != 0)
+ anObj = anORB->string_to_object(aValue);
+ }
+ }catch(...){
+ INFOS("ClientSObjectToObject - Unknown exception was occured!!!");
}
return anObj;
}
anAttr = aStudyBuilder->FindOrCreateAttribute(newObj, "AttributeComment");
SALOMEDS::AttributeComment_var aCmnt = SALOMEDS::AttributeComment::_narrow(anAttr);
aCmnt->SetValue(theComment);
- INFOS("CreateAttributes - Comment = "<<theComment);
+ if(MYDEBUG) INFOS("CreateAttributes - Comment = "<<theComment);
}
if(strcmp(theRefFatherEntry,"") != 0){
SALOMEDS::SObject_var aRefFather = theStudyDocument->FindObjectID(theRefFatherEntry);
INFOS("CreateAttributes - StudyId = "<<theStudyDocument->StudyId()<<"; anEntry = "<<aRet<<"; IOR = '"<<theIOR<<"'");
return aRet;
}
-}
+ string CreateAttributes(_PTR(Study) theStudyDocument,
+ const char* theFatherEntry, const char* theRefFatherEntry,
+ const char* theIOR, const char* theName,
+ const char* thePersistentRef, const char* theComment,
+ CORBA::Boolean theCreateNew)
+ {
+ _PTR(StudyBuilder) aStudyBuilder = theStudyDocument->NewBuilder();
+ _PTR(SObject) aFather = theStudyDocument->FindObjectID(theFatherEntry);
+ _PTR(SObject) newObj;
+ if (theCreateNew)
+ newObj = aStudyBuilder->NewObject(aFather);
+ else
+ newObj = aFather;
+
+ _PTR(GenericAttribute) anAttr;
+ if (strcmp(theIOR, "") != 0) {
+ anAttr = aStudyBuilder->FindOrCreateAttribute(newObj, "AttributeIOR");
+ _PTR(AttributeIOR) anIOR (anAttr);
+ anIOR->SetValue(theIOR);
+ }
+ if (strcmp(theName, "") != 0) {
+ anAttr = aStudyBuilder->FindOrCreateAttribute(newObj, "AttributeName");
+ _PTR(AttributeName) aName (anAttr);
+ aName->SetValue(theName);
+ }
+ if (strcmp(thePersistentRef, "") != 0) {
+ anAttr = aStudyBuilder->FindOrCreateAttribute(newObj, "AttributePersistentRef");
+ _PTR(AttributePersistentRef) aPRef (anAttr);
+ aPRef->SetValue(thePersistentRef);
+ }
+ if (strcmp(theComment, "") != 0) {
+ anAttr = aStudyBuilder->FindOrCreateAttribute(newObj, "AttributeComment");
+ _PTR(AttributeComment) aCmnt (anAttr);
+ aCmnt->SetValue(theComment);
+ if (MYDEBUG) INFOS("CreateAttributes - Comment = " << theComment);
+ }
+ if (strcmp(theRefFatherEntry, "") != 0) {
+ _PTR(SObject) aRefFather = theStudyDocument->FindObjectID(theRefFatherEntry);
+ _PTR(SObject) anObj = aStudyBuilder->NewObject(aRefFather);
+ aStudyBuilder->Addreference(anObj, newObj);
+ }
+ string aRet = newObj->GetID();
+ if (MYDEBUG)
+ INFOS("CreateAttributes - StudyId = " << theStudyDocument->StudyId()
+ << "; anEntry = " << aRet << "; IOR = '" << theIOR << "'");
+ return aRet;
+ }
+
+ QString GenerateName(const string& theFmt, int theId){
+ static QString aName;
+ if(theId > 0)
+ aName.sprintf("%s:%d",theFmt.c_str(),theId);
+ else
+ aName.sprintf("%s",theFmt.c_str());
+ return aName;
+ }
-QString VISU::GenerateName(const string& theFmt, int theId){
- static QString aName;
- if(theId > 0)
- aName.sprintf("%s:%d",theFmt.c_str(),theId);
- else
- aName.sprintf("%s",theFmt.c_str());
- return aName;
+ SALOMEDS::StudyManager_var GetStudyManager()
+ {
+ static SALOMEDS::StudyManager_var aStudyManager;
+ if(CORBA::is_nil(aStudyManager)){
+ SALOME_NamingService *aNamingService = SalomeApp_Application::namingService();
+ CORBA::Object_var anObject = aNamingService->Resolve("/myStudyManager");
+ aStudyManager = SALOMEDS::StudyManager::_narrow(anObject);
+ }
+ return aStudyManager;
+ }
+
+
+ SALOMEDS::Study_var GetDSStudy(_PTR(Study) theStudy)
+ {
+ std::string aStudyName = theStudy->Name();
+ return GetStudyManager()->GetStudyByName(aStudyName.c_str());
+ }
+
+ SALOMEDS::SObject_var GetSObject( _PTR(SObject) obj )
+ {
+ _PTR(Study) aStudy = obj->GetStudy();
+ SALOMEDS::Study_var aSalomeDSStudy = GetDSStudy( aStudy );
+ std::string id = obj->GetID();
+ return aSalomeDSStudy->FindObjectID( id.c_str() );
+ }
+
+ _PTR(SObject) GetClientSObject( SALOMEDS::SObject_var obj,
+ _PTR(Study) study )
+ {
+ return study->FindObjectID( obj->GetID() );
+
+ }
}