Salome HOME
updated copyright message
[modules/kernel.git] / src / SALOMEDSImpl / SALOMEDSImpl_Study.cxx
index e0814bab1cbdba125d84602545e03a093a6d0347..cc063bd8f74772be6699aeeb22df66b10e69b93c 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2023  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -109,7 +109,7 @@ namespace {
  *  Purpose  : SALOMEDSImpl_Study constructor
  */
 //============================================================================
-SALOMEDSImpl_Study::SALOMEDSImpl_Study()
+SALOMEDSImpl_Study::SALOMEDSImpl_Study() : _doc(NULL)
 {
   _appli = new DF_Application();
   _clipboard = _appli->NewDocument("SALOME_STUDY");
@@ -137,6 +137,9 @@ SALOMEDSImpl_Study::~SALOMEDSImpl_Study()
 //============================================================================
 void SALOMEDSImpl_Study::Init()
 {
+  if (_doc)
+    return; // noop: already initialized
+
   static int _id = 0;
   std::stringstream sstrm;
   sstrm << ++_id;
@@ -172,9 +175,12 @@ void SALOMEDSImpl_Study::Init()
 //============================================================================
 void SALOMEDSImpl_Study::Clear()
 {
-  delete _builder;
-  delete _cb;
-  delete _useCaseBuilder;
+  if (_builder) delete _builder;
+  _builder = NULL;
+  if (_cb) delete _cb;
+  _cb = NULL;
+  if (_useCaseBuilder) delete _useCaseBuilder;
+  _useCaseBuilder = NULL;
   URL("");
   _appli->Close(_doc);
   _doc = NULL;
@@ -367,8 +373,8 @@ bool SALOMEDSImpl_Study::Impl_SaveProperties(HDFgroup *hdf_group)
 
   int aLength = 0, aLength1 = 0, anIndex, i, unitsSize = 0, commentSize = 0;
 
-  for(i=1; i<=aNames.size(); i++)
-    aLength += aNames[i-1].size() + 1;
+  for(i=1; i<=(int)aNames.size(); i++)
+    aLength += (int)aNames[i-1].size() + 1; //!< TODO: conversion from size_t to int
 
   std::map< std::string, std::vector<std::string> >::const_iterator it;
   for (it = allVersions.begin(); it != allVersions.end(); ++it ) {
@@ -380,11 +386,11 @@ bool SALOMEDSImpl_Study::Impl_SaveProperties(HDFgroup *hdf_group)
       vlist += *vlit;
     }
     versions[ it->first ] = vlist;
-    aLength1 += it->first.size() + vlist.size() + 2;
+    aLength1 += int(it->first.size() + vlist.size() + 2); //!< TODO: conversion from size_t to int
   }
 
-  unitsSize = units.size();
-  commentSize = comment.size();
+  unitsSize = (int)units.size(); //!< TODO: conversion from size_t to int
+  commentSize = (int)comment.size(); //!< TODO: conversion from size_t to int
 
   //string format:
   //locked flag, modified flag,
@@ -407,7 +413,7 @@ bool SALOMEDSImpl_Study::Impl_SaveProperties(HDFgroup *hdf_group)
 
   sprintf(aProperty,"%c%c", (char)aProp->GetCreationMode(),  (aProp->IsLocked())?'l':'u');
 
-  aLength = aNames.size();
+  aLength = (int)aNames.size(); //!< TODO: conversion from size_t to int
   int a = 2;
   for(anIndex = 0; anIndex<aLength; anIndex++) {
     sprintf(&(aProperty[a]),"%2d%2d%2d%2d%4d%s",
@@ -417,7 +423,7 @@ bool SALOMEDSImpl_Study::Impl_SaveProperties(HDFgroup *hdf_group)
             (int)(aMonths[anIndex]),
             (int)(aYears[anIndex]),
             aNames[anIndex].c_str());
-    a = strlen(aProperty);
+    a = (int)strlen(aProperty); //!< TODO: conversion from size_t to int
     aProperty[a++] = 1;
   }
 
@@ -427,7 +433,7 @@ bool SALOMEDSImpl_Study::Impl_SaveProperties(HDFgroup *hdf_group)
   //Write units if need
   if(units.size() > 0) {
     sprintf(&(aProperty[a]),"%s",units.c_str());
-    a = strlen(aProperty);
+    a = (int)strlen(aProperty); //!< TODO: conversion from size_t to int
   }
 
   aProperty[a++] = 1;
@@ -435,7 +441,7 @@ bool SALOMEDSImpl_Study::Impl_SaveProperties(HDFgroup *hdf_group)
   //Write comments if need
   if(comment.size() > 0) {
     sprintf(&(aProperty[a]),"%s",comment.c_str());
-    a = strlen(aProperty);
+    a = (int)strlen(aProperty); //!< TODO: conversion from size_t to int
   }
 
   aProperty[a++] = 30; //delimiter of the component versions
@@ -445,7 +451,7 @@ bool SALOMEDSImpl_Study::Impl_SaveProperties(HDFgroup *hdf_group)
     sprintf(&(aProperty[a]),"%s=%s",
             (char*)(versionsIt->first.c_str()),
             (char*)(versionsIt->second.c_str()));
-    a = a + versionsIt->first.size() + versionsIt->second.size() + 1;
+    a = a + (int)versionsIt->first.size() + (int)versionsIt->second.size() + 1; //!< TODO: conversion from size_t to int
     aProperty[a++] = 1;
   }
 
@@ -477,7 +483,7 @@ bool SALOMEDSImpl_Study::Impl_SaveAs(const std::string& aStudyUrl,
   // Set "C" locale temporarily to avoid possible localization problems
   Kernel_Utils::Localizer loc;
 
-  // HDF File will be composed of differents part :
+  // HDF File will be composed of different part :
   // * For each ComponentDataType, all data created by the component
   //   Information in data group hdf_group_datacomponent
   // * Study Structure -> Exactly what is contained in Document
@@ -534,10 +540,10 @@ bool SALOMEDSImpl_Study::Impl_SaveAs(const std::string& aStudyUrl,
             }
           }
         }
-       else {
-         aDriver = aFactory->GetDriverByIOR(IOREngine);
-       }
-       aMapTypeDriver[aCompType] = aDriver;
+        else {
+          aDriver = aFactory->GetDriverByIOR(IOREngine);
+        }
+        aMapTypeDriver[aCompType] = aDriver;
       }
       catch(...) {
         _errorCode = "Can not restore information to resave it";
@@ -550,7 +556,7 @@ bool SALOMEDSImpl_Study::Impl_SaveAs(const std::string& aStudyUrl,
     URL(aStudyUrl);
 
     // To change for Save
-    // Do not have to do a new file but just a Open??? Rewrite all information after erasing evrything??
+    // Do not have to do a new file but just a Open??? Rewrite all information after erasing everything??
     hdf_file = new HDFfile((char*)aUrl.c_str());
     hdf_file->CreateOnDisk();
 
@@ -570,8 +576,8 @@ bool SALOMEDSImpl_Study::Impl_SaveAs(const std::string& aStudyUrl,
       std::string componentDataType = sco.ComponentDataType();
       std::string IOREngine;
       if (sco.ComponentIOR(IOREngine)) {
-       // Engine should be already in the map as it was to added before
-       SALOMEDSImpl_Driver* Engine = aMapTypeDriver[componentDataType];
+        // Engine should be already in the map as it was to added before
+        SALOMEDSImpl_Driver* Engine = aMapTypeDriver[componentDataType];
         if (Engine != NULL) {
           SALOMEDSImpl_TMPFile* aStream = NULL;
           long length = 0;
@@ -672,7 +678,7 @@ bool SALOMEDSImpl_Study::Impl_SaveAs(const std::string& aStudyUrl,
     std::string varType;
     std::string varIndex;
 
-    for (int i=0 ;i < myNoteBookVars.size(); i++ ) {
+    for (int i=0 ;i < (int)myNoteBookVars.size(); i++ ) {
       // For each variable create HDF group
       hdf_notebook_var = new HDFgroup((char*)myNoteBookVars[i]->Name().c_str(),hdf_notebook_vars);
       hdf_notebook_var->CreateOnDisk();
@@ -767,14 +773,24 @@ bool SALOMEDSImpl_Study::Impl_SaveAs(const std::string& aStudyUrl,
   std::string aStudyTmpDir = SALOMEDSImpl_Tool::GetDirFromPath(aUrl);
 
 #ifdef WIN32
-  aCmd = "dir /B \"" + aStudyTmpDir +"\" > " + aTmpFile;
+  aCmd = "dir /B \"" + aStudyTmpDir +"\" > \"" + aTmpFile + "\"";
 #else
   aCmd ="ls -1 \"" + aStudyTmpDir +"\" > " + aTmpFile;
 #endif
+#if defined(WIN32) && defined(UNICODE)
+  std::wstring awCmd = Kernel_Utils::utf8_decode_s(aCmd);
+  _wsystem( awCmd.c_str() );
+#else  
   system(aCmd.c_str());
+#endif
 
   // Iterate and move files in the temporary directory
+#if defined(WIN32) && defined(UNICODE)
+  std::wstring awTmpFile = Kernel_Utils::utf8_decode_s(aTmpFile);
+  FILE* fp = _wfopen(awTmpFile.c_str(), L"rb");
+#else
   FILE* fp = fopen(aTmpFile.c_str(), "rb");
+#endif
   if (!fp) {
     URL( anOldName ); // VSR: restore previous url if operation is failed
     return false;
@@ -785,12 +801,27 @@ bool SALOMEDSImpl_Study::Impl_SaveAs(const std::string& aStudyUrl,
     if ((fgets(buffer, 2046, fp)) == NULL) break;
     size_t aLen = strlen(buffer);
     if (buffer[aLen-1] == '\n') buffer[aLen-1] = char(0);
-#ifdef WIN32
-    aCmd = "move /Y \"" + aStudyTmpDir + std::string(buffer) + "\" \"" + SALOMEDSImpl_Tool::GetDirFromPath(aStudyUrl) +"\"";
+
+#ifdef WIN32    
+    // Force removing readonly attribute from a file under Windows, because of a but in the HDF
+    std::string aReadOlnyRmCmd = "attrib -r \"" + aStudyTmpDir + std::string(buffer)+ "\" > nul 2>&1";
+#ifdef UNICODE
+    std::wstring awReadOlnyRmCmd = Kernel_Utils::utf8_decode_s(aReadOlnyRmCmd);
+    _wsystem(awReadOlnyRmCmd.c_str());
+#else  
+    system(aReadOlnyRmCmd.c_str());
+#endif
+
+    aCmd = "move /Y \"" + aStudyTmpDir + std::string(buffer) + "\" \"" + SALOMEDSImpl_Tool::GetDirFromPath(aStudyUrl) +"\" > nul 2>&1";
 #else
     aCmd = "mv -f \"" + aStudyTmpDir + std::string(buffer) + "\" \"" + SALOMEDSImpl_Tool::GetDirFromPath(aStudyUrl)+"\"";
 #endif
+#if defined(WIN32) && defined(UNICODE)
+    std::wstring awCmd = Kernel_Utils::utf8_decode_s(aCmd);
+    errors = _wsystem(awCmd.c_str());
+#else  
     errors = system(aCmd.c_str());
+#endif
   }
 
   delete []buffer;
@@ -798,14 +829,27 @@ bool SALOMEDSImpl_Study::Impl_SaveAs(const std::string& aStudyUrl,
 
   // Perform cleanup
 #ifdef WIN32
-  DeleteFileA(aTmpFile.c_str());
+#ifdef UNICODE
+  std::wstring aTmpFileToDelete = Kernel_Utils::utf8_decode_s(aTmpFile);
+#else
+  std::string aTmpFileToDelete = aTmpFile;
+#endif
+  DeleteFile(aTmpFileToDelete.c_str());
 #else
   unlink(aTmpFile.c_str());
 #endif
 
 #ifdef WIN32
-  RemoveDirectoryA(aTmpFileDir.c_str());
-  RemoveDirectoryA(aStudyTmpDir.c_str());
+#ifdef UNICODE
+  std::wstring aTmpFileDirToDelete = Kernel_Utils::utf8_decode_s( aTmpFileDir );
+  std::wstring aStudyTmpDirToDelete = Kernel_Utils::utf8_decode_s( aStudyTmpDir );
+#else
+  std::string aTmpFileDirToDelete = aTmpFileDir;
+  std::string aStudyTmpDirToDelete = aStudyTmpDir;
+#endif  
+  RemoveDirectory( aTmpFileDirToDelete.c_str() );
+  RemoveDirectory( aStudyTmpDirToDelete.c_str() );
 #else
   rmdir(aTmpFileDir.c_str());
   rmdir(aStudyTmpDir.c_str());
@@ -913,7 +957,7 @@ bool SALOMEDSImpl_Study::CopyLabel(SALOMEDSImpl_Driver* theEngine,
   }
   // iterate attributes
   std::vector<DF_Attribute*> attrList = theSource.GetAttributes();
-  for(int i = 0, len = attrList.size(); i<len; i++) {
+  for(int i = 0, len = (int)attrList.size(); i<len; i++) { //!< TODO: conversion from size_t to int
     DF_Attribute* anAttr = attrList[i];
     std::string type = SALOMEDSImpl_GenericAttribute::Impl_GetType(anAttr);
     if (type.substr(0, 17) == std::string("AttributeTreeNode")) continue; // never copy tree node attribute
@@ -1078,7 +1122,7 @@ DF_Label SALOMEDSImpl_Study::PasteLabel(SALOMEDSImpl_Driver* theEngine,
 
     if (theEngine->CanPaste(aCompName, anObjID->Value())) {
       std::string aTMPStr = aNameAttribute->Value();
-      int aLen = aTMPStr.size();
+      int aLen = (int)aTMPStr.size(); //!< TODO: conversion from size_t to int
       unsigned char* aStream = NULL;
       if(aLen > 0) {
         aStream = new unsigned char[aLen+10];
@@ -1105,7 +1149,7 @@ DF_Label SALOMEDSImpl_Study::PasteLabel(SALOMEDSImpl_Driver* theEngine,
 
   // iterate attributes
   std::vector<DF_Attribute*> attrList = theSource.GetAttributes();
-  for(int i = 0, len = attrList.size(); i<len; i++) {
+  for(int i = 0, len = (int)attrList.size(); i<len; i++) { //!< TODO: conversion from size_t to int
     DF_Attribute* anAttr = attrList[i];
     if (aTargetLabel.FindAttribute(anAttr->ID())) {
       aTargetLabel.ForgetAttribute(anAttr->ID());
@@ -1432,7 +1476,7 @@ SALOMEDSImpl_SObject SALOMEDSImpl_Study::FindObjectByPath(const std::string& the
 
   std::string aPath(thePath), aToken;
   SALOMEDSImpl_SObject aSO;
-  int aLength = aPath.size();
+  int aLength = (int)aPath.size(); //!< TODO: conversion from size_t to int
   bool isRelative = false;
 
   if(aLength == 0) {  //Empty path - return the current context
@@ -1457,7 +1501,7 @@ SALOMEDSImpl_SObject SALOMEDSImpl_Study::FindObjectByPath(const std::string& the
   }
 
   std::vector<std::string> vs = SALOMEDSImpl_Tool::splitString(aPath, '/');
-  for(int i = 0, len = vs.size(); i<len; i++) {
+  for(int i = 0, len = (int)vs.size(); i<len; i++) { //!< TODO: conversion from size_t to int
 
     aToken = vs[i];
     if(aToken.size() == 0) break;
@@ -1775,7 +1819,7 @@ std::string SALOMEDSImpl_Study::_GetStudyVariablesScript()
   std::string set_method = _GetNoteBookAccessor()+".set(";
   std::string varName;
   std::string varValue;
-  for(int i = 0 ; i < myNoteBookVars.size();i++ ) {
+  for(int i = 0 ; i < (int)myNoteBookVars.size();i++ ) {
     varName = myNoteBookVars[i]->Name();
     varValue = myNoteBookVars[i]->SaveToScript();
     dump+=set_method+"\""+varName+"\", "+varValue+")\n";
@@ -1880,7 +1924,7 @@ std::string SALOMEDSImpl_Study::GetLastModificationDate()
   std::vector<int> aMinutes, aHours, aDays, aMonths, aYears;
   aProp->GetModifications(aNames, aMinutes, aHours, aDays, aMonths, aYears);
 
-  int aLastIndex = aNames.size()-1;
+  int aLastIndex = (int)aNames.size()-1; //!< TODO: conversion from size_t to int
   char aResult[20];
   sprintf(aResult, "%2.2d/%2.2d/%4.4d %2.2d:%2.2d",
           (int)(aDays[aLastIndex]),(int)(aMonths[aLastIndex]), (int)(aYears[aLastIndex]),
@@ -1898,7 +1942,7 @@ std::vector<std::string> SALOMEDSImpl_Study::GetModificationsDate()
   std::vector<int> aMinutes, aHours, aDays, aMonths, aYears;
   aProp->GetModifications(aNames, aMinutes, aHours, aDays, aMonths, aYears);
 
-  int anIndex, aLength = aNames.size();
+  int anIndex, aLength = (int)aNames.size(); //!< TODO: conversion from size_t to int
   std::vector<std::string> aDates;
 
   for (anIndex = 1; anIndex < aLength; anIndex++) {
@@ -2041,25 +2085,30 @@ bool SALOMEDSImpl_Study::DumpStudy(const std::string& thePath,
   }
 
   std::vector<std::string> aSeq;
-  std::string aCompType, aFactoryType;
+  std::string aFactoryType;
 
   //Build a list of all components in the Study
   SALOMEDSImpl_SComponentIterator itcomponent = NewComponentIterator();
 
-  for (; itcomponent.More(); itcomponent.Next()) {
-    SALOMEDSImpl_SComponent sco = itcomponent.Value();
-    aCompType = sco.ComponentDataType();
-   if (aCompType == "GEOM")
-      aSeq.insert(aSeq.begin(), aCompType);
-    else
-      aSeq.push_back(aCompType);
+  for (; itcomponent.More(); itcomponent.Next())
+    aSeq.push_back(itcomponent.Value().ComponentDataType());
+
+  std::vector<std::string>::iterator it;
+  if ( (it = std::find( aSeq.begin(), aSeq.end(), "GEOM" )) != aSeq.end() ) {
+    aSeq.erase( it );
+    aSeq.insert(aSeq.begin(), "GEOM" );
   }
+  if ( (it = std::find( aSeq.begin(), aSeq.end(), "SHAPER" )) != aSeq.end() ) {
+    aSeq.erase( it );
+    aSeq.insert(aSeq.begin(), "SHAPER" );
+  }
+
   // re-arrange modules in the sequence, if specific order is given via SALOME_MODULES_ORDER environment variable.
   if ( getenv("SALOME_MODULES_ORDER") != 0 ) {
     std::string order = getenv("SALOME_MODULES_ORDER");
     std::vector<std::string> mlist;
     while ( !order.empty() ) {
-      size_t idx = order.find( "," );
+      size_t idx = order.find( ":" );
       std::string m = order.substr(0, idx);
       order = order.substr( ( idx == std::string::npos ) ? order.size() : idx+1 );
       if ( m.empty() || std::find( mlist.begin(), mlist.end(), m ) != mlist.end() ) continue;
@@ -2085,7 +2134,12 @@ bool SALOMEDSImpl_Study::DumpStudy(const std::string& thePath,
 
   //Create a file that will contain a main Study script
   std::fstream fp;
+#if defined(WIN32) && defined(UNICODE)
+  std::wstring aConverterFN = Kernel_Utils::utf8_decode_s(aFileName);
+  fp.open(aConverterFN.c_str(), std::ios::out);
+#else
   fp.open(aFileName.c_str(), std::ios::out);
+#endif
 
 #ifdef WIN32
   bool isOpened = fp.is_open();
@@ -2097,6 +2151,7 @@ bool SALOMEDSImpl_Study::DumpStudy(const std::string& thePath,
     _errorCode = std::string("Can't create a file ")+aFileName;
     return false;
   }
+  _dumpPath = thePath;
 
   std::stringstream sfp;
 
@@ -2138,10 +2193,10 @@ bool SALOMEDSImpl_Study::DumpStudy(const std::string& thePath,
 
   // dump all components and create the components specific scripts
   bool isOk = true;
-  int aLength = aSeq.size();
+  int aLength = (int)aSeq.size(); //!< TODO: conversion from size_t to int
   for(int i = 1; i <= aLength; i++) {
 
-    aCompType = aSeq[i-1];
+    std::string aCompType = aSeq[i-1];
     SALOMEDSImpl_SComponent sco = FindComponent(aCompType);
     SALOMEDSImpl_Driver* aDriver = NULL;
     // if there is an associated Engine call its method for saving
@@ -2179,14 +2234,14 @@ bool SALOMEDSImpl_Study::DumpStudy(const std::string& thePath,
       isOk = false;
 
     std::stringstream sfp2;
-    
+
     //Output the Python script generated by the component in the newly created file.
     if ( isMultiFile )
       sfp2 << GetDumpStudyComment( aCompType.c_str() ) << std::endl;
     else
       sfp2 << GetComponentHeader( aCompType.c_str() ) << std::endl;
     sfp2 << aStream->Data();
-    
+
     if ( isMultiFile ) {
       //Create a file that will contain the component specific script
       std::fstream fp2;
@@ -2199,24 +2254,29 @@ bool SALOMEDSImpl_Study::DumpStudy(const std::string& thePath,
       aScriptName += theBaseName;
       aScriptName += "_";
       aScriptName += aCompType;
-      
+
       aFileName += aScriptName+ std::string(".py");
       aSeqOfFileNames.push_back(aFileName);
-      
+
+#if defined(WIN32) && defined(UNICODE)
+      std::wstring aConverterFN2 = Kernel_Utils::utf8_decode_s(aFileName);
+      fp2.open(aConverterFN2.c_str(), std::ios::out);
+#else
       fp2.open(aFileName.c_str(), std::ios::out);
-      
+#endif
+
 #ifdef WIN32
       isOpened = fp2.is_open();
 #else
       isOpened = fp2.rdbuf()->is_open();
 #endif
-      
+
       if(!isOpened) {
         _errorCode = std::string("Can't create a file ")+aFileName;
         SALOMEDSImpl_Tool::RemoveTemporaryFiles(thePath, aSeqOfFileNames, false);
         return false;
       }
-     
+
       // replace '\t' symbols
       fp2 << replace_tabs( sfp2.str() );
 
@@ -2242,12 +2302,21 @@ bool SALOMEDSImpl_Study::DumpStudy(const std::string& thePath,
 
   // replace '\t' symbols
   fp << replace_tabs( sfp.str() );
-  
+
   fp.close();
 
+  _dumpPath.clear();
+
   return isOk;
 }
 
+// Returns the folder of the python script which is currently dumped
+std::string SALOMEDSImpl_Study::GetDumpPath()
+{
+  return _dumpPath;
+}
+
+
 //=======================================================================
 //function : GetDumpStudyComment
 //purpose  : return a header comment for a DumpStudy script
@@ -2316,7 +2385,7 @@ void dumpSO(const SALOMEDSImpl_SObject& theSO,
   std::string aTab(Tab), anID(theSO.GetID());
   fp << aTab << anID << std::endl;
   std::vector<DF_Attribute*> attribs = theSO.GetLabel().GetAttributes();
-  for(int i = 0; i<attribs.size(); i++) {
+  for(int i = 0; i<(int)attribs.size(); i++) {
     SALOMEDSImpl_GenericAttribute* anAttr = dynamic_cast<SALOMEDSImpl_GenericAttribute*>(attribs[i]);
 
     if(!anAttr) {
@@ -2463,7 +2532,7 @@ bool SALOMEDSImpl_Study::IsStudyLocked()
 void SALOMEDSImpl_Study::UnLockStudy(const char* theLockerID)
 {
   std::vector<std::string>::iterator vsI = _lockers.begin();
-  int length = _lockers.size();
+  int length = (int)_lockers.size(); //!< TODO: conversion from size_t to int
   bool isFound = false;
   std::string id(theLockerID);
   for(int i = 0; i<length; i++, vsI++) {
@@ -2552,7 +2621,7 @@ void SALOMEDSImpl_Study::SetStringVariable(const std::string& theVarName,
 //============================================================================
 void SALOMEDSImpl_Study::SetStringVariableAsDouble(const std::string& theVarName,
                                                    const double theValue,
-                                                   const SALOMEDSImpl_GenericVariable::VariableTypes theType)
+                                                   const SALOMEDSImpl_GenericVariable::VariableTypes /*theType*/)
 {
   SALOMEDSImpl_GenericVariable* aGVar = GetVariable(theVarName);
   if(SALOMEDSImpl_ScalarVariable* aSVar = dynamic_cast<SALOMEDSImpl_ScalarVariable*>(aGVar))
@@ -2628,7 +2697,7 @@ std::vector<std::string> SALOMEDSImpl_Study::GetVariableNames() const
 {
   std::vector<std::string> aResult;
 
-  for(int i = 0; i < myNoteBookVars.size(); i++)
+  for(int i = 0; i < (int)myNoteBookVars.size(); i++)
     aResult.push_back(myNoteBookVars[i]->Name());
 
   return aResult;
@@ -2652,7 +2721,7 @@ void SALOMEDSImpl_Study::AddVariable(SALOMEDSImpl_GenericVariable* theVariable)
 SALOMEDSImpl_GenericVariable* SALOMEDSImpl_Study::GetVariable(const std::string& theName) const
 {
   SALOMEDSImpl_GenericVariable* aResult = NULL;
-  for(int i = 0; i < myNoteBookVars.size();i++) {
+  for(int i = 0; i < (int)myNoteBookVars.size();i++) {
     if(theName.compare(myNoteBookVars[i]->Name()) == 0) {
       aResult = myNoteBookVars[i];
       break;
@@ -2750,10 +2819,10 @@ bool SALOMEDSImpl_Study::FindVariableAttribute(SALOMEDSImpl_StudyBuilder* theStu
       std::string aString = aStringAttr->Value();
 
       std::vector< std::vector<std::string> > aSections = ParseVariables( aString );
-      for( int i = 0, n = aSections.size(); i < n; i++ )
+      for( int i = 0, n = (int)aSections.size(); i < n; i++ ) //!< TODO: conversion from size_t to int
       {
         std::vector<std::string> aVector = aSections[i];
-        for( int j = 0, m = aVector.size(); j < m; j++ )
+        for( int j = 0, m = (int)aVector.size(); j < m; j++ ) //!< TODO: conversion from size_t to int
         {
           std::string aStr = aVector[j];
           if( aStr.compare( theName ) == 0 )
@@ -2806,10 +2875,10 @@ void SALOMEDSImpl_Study::ReplaceVariableAttribute(SALOMEDSImpl_StudyBuilder* the
       std::string aNewString, aCurrentString = aStringAttr->Value();
 
       std::vector< std::vector<std::string> > aSections = ParseVariables( aCurrentString );
-      for( int i = 0, n = aSections.size(); i < n; i++ )
+      for( int i = 0, n = (int)aSections.size(); i < n; i++ ) //!< TODO: conversion from size_t to int
       {
         std::vector<std::string> aVector = aSections[i];
-        for( int j = 0, m = aVector.size(); j < m; j++ )
+        for( int j = 0, m = (int)aVector.size(); j < m; j++ ) //!< TODO: conversion from size_t to int
         {
           std::string aStr = aVector[j];
           if( aStr.compare( theSource ) == 0 )
@@ -2923,7 +2992,7 @@ bool SALOMEDSImpl_Study::removeSO_Notification (const SALOMEDSImpl_SObject& theS
                pass the mofification reason
  */
 //============================================================================
-bool SALOMEDSImpl_Study::modifySO_Notification (const SALOMEDSImpl_SObject& theSObject, int reason) 
+bool SALOMEDSImpl_Study::modifySO_Notification (const SALOMEDSImpl_SObject& theSObject, int reason)
 {
   if(_notifier)
     return _notifier->modifySO_Notification(theSObject, reason);
@@ -2936,7 +3005,7 @@ bool SALOMEDSImpl_Study::modifySO_Notification (const SALOMEDSImpl_SObject& theS
  *  Purpose  : register a notifier
  */
 //============================================================================
-void SALOMEDSImpl_Study::setNotifier(SALOMEDSImpl_AbstractCallback* notifier) 
+void SALOMEDSImpl_Study::setNotifier(SALOMEDSImpl_AbstractCallback* notifier)
 {
   _notifier=notifier;
 }
@@ -2998,7 +3067,7 @@ static void SaveAttributes(const SALOMEDSImpl_SObject& aSO, HDFgroup *hdf_group_
   hdf_size size[1];
   std::vector<DF_Attribute*> attrList = aSO.GetLabel().GetAttributes();
   DF_Attribute* anAttr = NULL;
-  for(int i = 0, len = attrList.size(); i<len; i++) {
+  for(int i = 0, len = (int)attrList.size(); i<len; i++) { //!< TODO: conversion from size_t to int
     anAttr = attrList[i];
     //The following attributes are not supposed to be written to the file
     std::string type = SALOMEDSImpl_GenericAttribute::Impl_GetType(anAttr);
@@ -3192,4 +3261,3 @@ void ReadNoteBookVariables(SALOMEDSImpl_Study* theStudy, HDFgroup* theGroup)
 
   theGroup->CloseOnDisk();
 }
-