Salome HOME
Copyright update 2022
[modules/gui.git] / src / Session / Session_ServerCheck.cxx
index 3cb7fa8a55f377a0f7dd19ec48c33e952c365c3d..75a2feffb65f82e525de3cc11a17be992d373e43 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2015  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2022  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
 #include CORBA_CLIENT_HEADER(SALOME_ModuleCatalog)
 #include CORBA_CLIENT_HEADER(SALOME_Component)
 
-#include "Utils_ORB_INIT.hxx"
 #include "Utils_SINGLETON.hxx"
 #include "SALOME_NamingService.hxx"
 #include "Basics_Utils.hxx"
 #include "utilities.h"
+#include "Qtx.h"
 
 #include <QApplication> 
 #include <QWaitCondition>
@@ -86,7 +86,8 @@ const int __DEFAULT__DELAY__ = 50000;
   \internal
 */
 
-class Session_ServerCheck::Locker
+template<class MY_CLS>
+class Session_ServerCheck<MY_CLS>::Locker
 {
 public:
   /*!
@@ -134,7 +135,8 @@ private:
   \param mutex a mutex used to serialize progress operations (splash)
   \param wc a wait condition used in combination with \a mutex
 */
-Session_ServerCheck::Session_ServerCheck( QMutex* mutex, QWaitCondition* wc )
+template<class MY_NS>
+Session_ServerCheck<MY_NS>::Session_ServerCheck( QMutex* mutex, QWaitCondition* wc )
 : QThread(),
   myMutex( mutex ),
   myWC( wc ),
@@ -168,7 +170,8 @@ Session_ServerCheck::Session_ServerCheck( QMutex* mutex, QWaitCondition* wc )
 /*!
   \brief Destructor
 */
-Session_ServerCheck::~Session_ServerCheck()
+template<class MY_NS>
+Session_ServerCheck<MY_NS>::~Session_ServerCheck()
 {
   terminate();
   while( isRunning() );
@@ -178,7 +181,8 @@ Session_ServerCheck::~Session_ServerCheck()
   \brief Get current information message.
   \return current message
 */
-QString Session_ServerCheck::currentMessage()
+template<class MY_NS>
+QString Session_ServerCheck<MY_NS>::currentMessage()
 {
   static QStringList messages;
   if ( messages.isEmpty() ) {
@@ -203,7 +207,8 @@ QString Session_ServerCheck::currentMessage()
   \brief Get error message.
   \return error message or null string of there was no any error
 */
-QString Session_ServerCheck::error()
+template<class MY_NS>
+QString Session_ServerCheck<MY_NS>::error()
 {
   QMutexLocker locker( &myDataMutex );
   return myError;
@@ -213,7 +218,8 @@ QString Session_ServerCheck::error()
   \brief Get current step.
   \return current step
 */
-int Session_ServerCheck::currentStep()
+template<class MY_NS>
+int Session_ServerCheck<MY_NS>::currentStep()
 {
   QMutexLocker locker( &myDataMutex );
   return myCurrentStep;
@@ -223,7 +229,8 @@ int Session_ServerCheck::currentStep()
   \brief Get total number of check steps.
   \return total number of steps
 */
-int Session_ServerCheck::totalSteps()
+template<class MY_NS>
+int Session_ServerCheck<MY_NS>::totalSteps()
 {
   QMutexLocker locker( &myDataMutex );
   int cnt = 5;                       // base servers
@@ -237,7 +244,8 @@ int Session_ServerCheck::totalSteps()
   \brief Modify current step.
   \param step new current step value
 */
-void Session_ServerCheck::setStep( const int step )
+template<class MY_NS>
+void Session_ServerCheck<MY_NS>::setStep( const int step )
 {
   QMutexLocker locker( &myDataMutex );
   myCurrentStep = step;
@@ -247,7 +255,8 @@ void Session_ServerCheck::setStep( const int step )
   \brief Set error message.
   \param msg error message
 */
-void Session_ServerCheck::setError( const QString& msg )
+template<class MY_NS>
+void Session_ServerCheck<MY_NS>::setError( const QString& msg )
 {
   QMutexLocker locker( &myDataMutex );
   myError = msg;
@@ -256,35 +265,24 @@ void Session_ServerCheck::setError( const QString& msg )
 /*!
   \brief Thread loop function. Performs SALOME servers check.
 */
-void Session_ServerCheck::run()
+template<class MY_NS>
+void Session_ServerCheck<MY_NS>::run()
 {
   // start check servers
   int current = 0;
   QString error;
-
-  QStringList args = QApplication::arguments();
-  int argc = args.size();
-  std::vector<std::string> args1(argc);
-  char** argv = new char*[argc];
-  for ( int i = 0; i < argc; ++i ) {
-    args1[i] = args[i].toStdString();
-    argv[i]  = const_cast<char*>( args1[i].c_str() );
-  }
-
-  bool OK = true;
+  Qtx::CmdLineArgs args;
   
   // 1. Check naming service
-  for ( int i = 0; (i < myAttempts) && OK; i++ ) {
+  for ( int i = 0; i < myAttempts; i++ ) {
     Locker locker( this );
 
     setStep( current * myAttempts + i );
 
     try {
-      ORB_INIT& init = *SINGLETON_<ORB_INIT>::Instance();
-      CORBA::ORB_var orb = init( argc, argv );
-      CORBA::Object_var obj = orb->resolve_initial_references( "NameService" );
-      CosNaming::NamingContext_var _root_context = CosNaming::NamingContext::_narrow( obj );
-      if ( !CORBA::is_nil( _root_context ) ) {
+      bool forceOK = false;
+      CosNaming::NamingContext_var _root_context = MY_NS::checkTrueNamingServiceIfExpected(args.argc(), args.argv(),forceOK);
+      if ( forceOK ||  !CORBA::is_nil( _root_context ) ) {
         setStep( ++current * myAttempts );
         break;
       }
@@ -297,24 +295,21 @@ void Session_ServerCheck::run()
     }
 
     if ( i == myAttempts-1 ) {
-      setError( tr( "Unable to contact the naming service.\n" ) );
-      OK = false;
-      //return;
+      setError( tr( "Unable to contact the naming service." ) + "\n" );
+      return;
     }
   }
 
+  QString errfmt = "\n%1";
+
   // 2. Check registry server
-  for ( int i = 0; (i < myAttempts) && OK ; i++ ) {
+  for ( int i = 0; i < myAttempts ; i++ ) {
     Locker locker( this );
 
     setStep( current * myAttempts + i );
 
     try {
-      CORBA::ORB_var orb = CORBA::ORB_init( argc, argv );
-      SALOME_NamingService &NS = *SINGLETON_<SALOME_NamingService>::Instance();
-      ASSERT( SINGLETON_<SALOME_NamingService>::IsAlreadyExisting() );
-      NS.init_orb( orb );
-      CORBA::Object_var obj = NS.Resolve( "/Registry" );
+      CORBA::Object_var obj = MY_NS::forServerChecker("/Registry", args.argc(), args.argv());
       Registry::Components_var registry = Registry::Components::_narrow( obj );
       if ( !CORBA::is_nil( registry ) ) {
         MESSAGE( "/Registry is found" );
@@ -346,29 +341,24 @@ void Session_ServerCheck::run()
     }
 
     if ( i == myAttempts-1 ) {
-      setError( tr( "Registry server is not found.\n%1" ).arg ( error ) );
-      OK = false;
-      //return;
+      setError( tr( "Registry server is not found." ) + errfmt.arg( error ) );
+      return;
     }
   }
 
   // 3. Check data server
-  for ( int i = 0; (i < myAttempts) && OK ; i++ ) {
+  for ( int i = 0; i < myAttempts ; i++ ) {
     Locker locker( this );
 
     setStep( current * myAttempts + i );
 
     try {
-      CORBA::ORB_var orb = CORBA::ORB_init( argc, argv );
-      SALOME_NamingService &NS = *SINGLETON_<SALOME_NamingService>::Instance();
-      ASSERT( SINGLETON_<SALOME_NamingService>::IsAlreadyExisting() );
-      NS.init_orb( orb );
-      CORBA::Object_var obj = NS.Resolve( "/myStudyManager" );
-      SALOMEDS::StudyManager_var studyManager = SALOMEDS::StudyManager::_narrow( obj );
-      if ( !CORBA::is_nil( studyManager ) ) {
-        MESSAGE( "/myStudyManager is found" );
-        studyManager->ping();
-        MESSAGE( "StudyManager was activated" );
+      CORBA::Object_var obj = MY_NS::forServerChecker("/Study", args.argc(), args.argv());
+      SALOMEDS::Study_var study = SALOMEDS::Study::_narrow( obj );
+      if ( !CORBA::is_nil( study ) ) {
+        MESSAGE( "/Study is found" );
+        study->ping();
+        MESSAGE( "Study was activated" );
         setStep( ++current * myAttempts );
         break;
       }
@@ -395,24 +385,19 @@ void Session_ServerCheck::run()
     }
 
     if ( i == myAttempts-1 ) {
-      setError( tr( "Study server is not found.\n%1" ).arg ( error ) );
-      OK = false;
-      //return;
+      setError( tr( "Study server is not found." ) + errfmt.arg( error ) );
+      return;
     }
   }
   
   // 4. Check module catalogue server
-  for ( int i = 0; (i < myAttempts) && OK ; i++ ) {
+  for ( int i = 0; i < myAttempts ; i++ ) {
     Locker locker( this );
 
     setStep( current * myAttempts + i );
 
     try {
-      CORBA::ORB_var orb = CORBA::ORB_init( argc, argv );
-      SALOME_NamingService &NS = *SINGLETON_<SALOME_NamingService>::Instance();
-      ASSERT( SINGLETON_<SALOME_NamingService>::IsAlreadyExisting() );
-      NS.init_orb( orb );
-      CORBA::Object_var obj = NS.Resolve( "/Kernel/ModulCatalog" );
+      CORBA::Object_var obj = MY_NS::forServerChecker("/Kernel/ModulCatalog", args.argc(), args.argv());
       SALOME_ModuleCatalog::ModuleCatalog_var catalog = SALOME_ModuleCatalog::ModuleCatalog::_narrow( obj );
       if ( !CORBA::is_nil( catalog ) ){
         MESSAGE( "/Kernel/ModulCatalog is found" );
@@ -444,24 +429,19 @@ void Session_ServerCheck::run()
     }
 
     if ( i == myAttempts-1 ) {
-      setError( tr( "Module catalogue server is not found.\n%1" ).arg ( error ) );
-      OK = false;
-      //return;
+      setError( tr( "Module catalogue server is not found." ) + errfmt.arg( error ) );
+      return;
     }
   }
 
   // 5. Check data server
-  for ( int i = 0; (i < myAttempts) && OK ; i++ ) {
+  for ( int i = 0; i < myAttempts ; i++ ) {
     Locker locker( this );
 
     setStep( current * myAttempts + i );
 
     try {
-      CORBA::ORB_var orb = CORBA::ORB_init( argc, argv );
-      SALOME_NamingService &NS = *SINGLETON_<SALOME_NamingService>::Instance();
-      ASSERT( SINGLETON_<SALOME_NamingService>::IsAlreadyExisting() );
-      NS.init_orb( orb );
-      CORBA::Object_var obj = NS.Resolve( "/Kernel/Session" );
+      CORBA::Object_var obj = MY_NS::forServerChecker("/Kernel/Session", args.argc(), args.argv());
       SALOME::Session_var session = SALOME::Session::_narrow( obj );
       if ( !CORBA::is_nil( session ) ) {
         MESSAGE( "/Kernel/Session is found" );
@@ -493,26 +473,21 @@ void Session_ServerCheck::run()
     }
 
     if ( i == myAttempts-1 ) {
-      setError( tr( "Session server is not found.\n%1" ).arg ( error ) );
-      OK = false;
-      //return;
+      setError( tr( "Session server is not found." ) + errfmt.arg( error ) );
+      return;
     }
   }
 
   // 6. Check C++ container
   if ( myCheckCppContainer ) {
-    for ( int i = 0; (i < myAttempts) && OK ; i++ ) {
+    for ( int i = 0; i < myAttempts ; i++ ) {
       Locker locker( this );
       
       setStep( current * myAttempts + i );
 
       try {
-        CORBA::ORB_var orb = CORBA::ORB_init( argc, argv );
-        SALOME_NamingService &NS = *SINGLETON_<SALOME_NamingService>::Instance();
-        ASSERT( SINGLETON_<SALOME_NamingService>::IsAlreadyExisting() );
-        NS.init_orb( orb );
         QString containerName = QString( "/Containers/%1/FactoryServer" ).arg( Kernel_Utils::GetHostname().c_str() );
-        CORBA::Object_var obj = NS.Resolve( containerName.toLatin1() );
+        CORBA::Object_var obj = MY_NS::forServerChecker(containerName.toLatin1(), args.argc(), args.argv());
         Engines::Container_var FScontainer = Engines::Container::_narrow( obj );
         if ( !CORBA::is_nil( FScontainer ) ) {
           MESSAGE( containerName.toLatin1().constData() << " is found" );
@@ -544,27 +519,22 @@ void Session_ServerCheck::run()
       }
       
       if ( i == myAttempts-1 ) {
-        setError( tr( "C++ container is not found.\n%1" ).arg ( error ) );
-        OK = false;
-        //return;
+        setError( tr( "C++ container is not found." ) + errfmt.arg( error ) );
+        return;
       }
     }
   }
 
   // 7. Check Python container
   if ( myCheckPyContainer ) {
-    for ( int i = 0; (i < myAttempts) && OK ; i++ ) {
+    for ( int i = 0; i < myAttempts ; i++ ) {
       Locker locker( this );
       
       setStep( current * myAttempts + i );
 
       try {
-        CORBA::ORB_var orb = CORBA::ORB_init( argc, argv );
-        SALOME_NamingService &NS = *SINGLETON_<SALOME_NamingService>::Instance();
-        ASSERT( SINGLETON_<SALOME_NamingService>::IsAlreadyExisting() );
-        NS.init_orb( orb );
         QString containerName = QString( "/Containers/%1/FactoryServerPy" ).arg( Kernel_Utils::GetHostname().c_str() );
-        CORBA::Object_var obj = NS.Resolve( containerName.toLatin1() );
+        CORBA::Object_var obj = MY_NS::forServerChecker(containerName.toLatin1(), args.argc(), args.argv());
         Engines::Container_var FSPcontainer = Engines::Container::_narrow( obj );
         if ( !CORBA::is_nil( FSPcontainer ) ) {
           MESSAGE( containerName.toLatin1().constData() << " is found" );
@@ -596,27 +566,22 @@ void Session_ServerCheck::run()
       }
 
       if ( i == myAttempts-1 ) {
-        setError( tr( "Python container is not found.\n%1" ).arg ( error ) );
-        OK = false;
-        //return;
+        setError( tr( "Python container is not found." ) + errfmt.arg( error ) );
+        return;
       }
     }
   }
 
   // 8. Check supervision container
   if ( myCheckSVContainer ) {
-    for ( int i = 0; (i < myAttempts) && OK ; i++ ) {
+    for ( int i = 0; i < myAttempts ; i++ ) {
       Locker locker( this );
       
       setStep( current * myAttempts + i );
 
       try {
-        CORBA::ORB_var orb = CORBA::ORB_init( argc, argv );
-        SALOME_NamingService &NS = *SINGLETON_<SALOME_NamingService>::Instance();
-        ASSERT( SINGLETON_<SALOME_NamingService>::IsAlreadyExisting() );
-        NS.init_orb( orb );
         QString containerName = QString( "/Containers/%1/SuperVisionContainer" ).arg( Kernel_Utils::GetHostname().c_str() );
-        CORBA::Object_var obj = NS.Resolve( containerName.toLatin1() );
+        CORBA::Object_var obj = MY_NS::forServerChecker(containerName.toLatin1(), args.argc(), args.argv());
         Engines::Container_var SVcontainer = Engines::Container::_narrow( obj );
         if ( !CORBA::is_nil( SVcontainer ) ) {
           MESSAGE( containerName.toLatin1().constData() << " is found" );
@@ -648,12 +613,14 @@ void Session_ServerCheck::run()
       }
     
       if ( i == myAttempts-1 ) {
-        setError( tr( "Supervision container is not found.\n%1" ).arg ( error ) );
-        OK = false;
-        //return;
+        setError( tr( "Supervision container is not found." ) + errfmt.arg( error ) );
+        return;
       }
     }
   }
-
-  delete [] argv;
 }
+
+#include "Session_NS_wrapper.hxx"
+
+template class Session_ServerCheck<OldStyleNS>;
+template class Session_ServerCheck<NewStyleNS>;