LCOV - code coverage report
Current view: top level - dbaccess/source/ext/macromigration - migrationlog.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 0 208 0.0 %
Date: 2012-08-25 Functions: 0 25 0.0 %
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 0 0 -

           Branch data     Line data    Source code
       1                 :            : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
       2                 :            : /*
       3                 :            :  * This file is part of the LibreOffice project.
       4                 :            :  *
       5                 :            :  * This Source Code Form is subject to the terms of the Mozilla Public
       6                 :            :  * License, v. 2.0. If a copy of the MPL was not distributed with this
       7                 :            :  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
       8                 :            :  *
       9                 :            :  * This file incorporates work covered by the following license notice:
      10                 :            :  *
      11                 :            :  *   Licensed to the Apache Software Foundation (ASF) under one or more
      12                 :            :  *   contributor license agreements. See the NOTICE file distributed
      13                 :            :  *   with this work for additional information regarding copyright
      14                 :            :  *   ownership. The ASF licenses this file to you under the Apache
      15                 :            :  *   License, Version 2.0 (the "License"); you may not use this file
      16                 :            :  *   except in compliance with the License. You may obtain a copy of
      17                 :            :  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
      18                 :            :  */
      19                 :            : 
      20                 :            : 
      21                 :            : #include "dbmm_module.hxx"
      22                 :            : #include "dbmm_global.hrc"
      23                 :            : #include "migrationerror.hxx"
      24                 :            : #include "migrationlog.hxx"
      25                 :            : 
      26                 :            : 
      27                 :            : #include <comphelper/anytostring.hxx>
      28                 :            : #include <tools/string.hxx>
      29                 :            : #include <rtl/ustrbuf.hxx>
      30                 :            : 
      31                 :            : #include <vector>
      32                 :            : #include <map>
      33                 :            : #include <list>
      34                 :            : 
      35                 :            : //........................................................................
      36                 :            : namespace dbmm
      37                 :            : {
      38                 :            : //........................................................................
      39                 :            : 
      40                 :            :     /** === begin UNO using === **/
      41                 :            :     /** === end UNO using === **/
      42                 :            : 
      43                 :            :     //====================================================================
      44                 :            :     //= LibraryEntry
      45                 :            :     //====================================================================
      46                 :          0 :     struct LibraryEntry
      47                 :            :     {
      48                 :            :         ScriptType      eType;
      49                 :            :         ::rtl::OUString sOldName;
      50                 :            :         ::rtl::OUString sNewName;
      51                 :            : 
      52                 :            :         LibraryEntry()
      53                 :            :             :eType( eBasic )
      54                 :            :             ,sOldName()
      55                 :            :             ,sNewName()
      56                 :            :         {
      57                 :            :         }
      58                 :            : 
      59                 :          0 :         LibraryEntry( const ScriptType& _eType, const ::rtl::OUString& _rOldName, const ::rtl::OUString& _rNewName )
      60                 :            :             :eType( _eType )
      61                 :            :             ,sOldName( _rOldName )
      62                 :          0 :             ,sNewName( _rNewName )
      63                 :            :         {
      64                 :          0 :         }
      65                 :            :     };
      66                 :            : 
      67                 :            :     //====================================================================
      68                 :            :     //= DocumentEntry
      69                 :            :     //====================================================================
      70                 :          0 :     struct DocumentEntry
      71                 :            :     {
      72                 :            :         SubDocumentType                 eType;
      73                 :            :         ::rtl::OUString                 sName;
      74                 :            :         ::std::vector< LibraryEntry >   aMovedLibraries;
      75                 :            : 
      76                 :          0 :         DocumentEntry()
      77                 :            :             :eType( eForm )
      78                 :            :             ,sName()
      79                 :          0 :             ,aMovedLibraries()
      80                 :            :         {
      81                 :          0 :         }
      82                 :            : 
      83                 :          0 :         DocumentEntry( const SubDocumentType _eType, const ::rtl::OUString& _rName )
      84                 :            :             :eType( _eType )
      85                 :          0 :             ,sName( _rName )
      86                 :            :         {
      87                 :          0 :         }
      88                 :            :     };
      89                 :            : 
      90                 :            :     //====================================================================
      91                 :            :     //= DocumentLogs
      92                 :            :     //====================================================================
      93                 :            :     typedef ::std::map< DocumentID, DocumentEntry > DocumentLogs;
      94                 :            : 
      95                 :            :     //====================================================================
      96                 :            :     //= ErrorLog
      97                 :            :     //====================================================================
      98                 :            :     typedef ::std::list< MigrationError >   ErrorLog;
      99                 :            : 
     100                 :            :     //====================================================================
     101                 :            :     //= MigrationLog_Data
     102                 :            :     //====================================================================
     103                 :          0 :     struct MigrationLog_Data
     104                 :            :     {
     105                 :            :         ::rtl::OUString sBackupLocation;
     106                 :            :         DocumentLogs    aDocumentLogs;
     107                 :            :         ErrorLog        aFailures;
     108                 :            :         ErrorLog        aWarnings;
     109                 :            :     };
     110                 :            : 
     111                 :            :     //====================================================================
     112                 :            :     //= MigrationLog
     113                 :            :     //====================================================================
     114                 :            :     //--------------------------------------------------------------------
     115                 :          0 :     MigrationLog::MigrationLog()
     116                 :          0 :         :m_pData( new MigrationLog_Data )
     117                 :            :     {
     118                 :          0 :     }
     119                 :            : 
     120                 :            :     //--------------------------------------------------------------------
     121                 :          0 :     MigrationLog::~MigrationLog()
     122                 :            :     {
     123                 :          0 :     }
     124                 :            : 
     125                 :            :     //--------------------------------------------------------------------
     126                 :          0 :     void MigrationLog::logFailure( const MigrationError& _rError )
     127                 :            :     {
     128                 :          0 :         m_pData->aFailures.push_back( _rError );
     129                 :          0 :     }
     130                 :            : 
     131                 :            :     //--------------------------------------------------------------------
     132                 :          0 :     void MigrationLog::logRecoverable( const MigrationError& _rError )
     133                 :            :     {
     134                 :          0 :         m_pData->aWarnings.push_back( _rError );
     135                 :          0 :     }
     136                 :            : 
     137                 :            :     //--------------------------------------------------------------------
     138                 :          0 :     bool MigrationLog::hadFailure() const
     139                 :            :     {
     140                 :          0 :         return !m_pData->aFailures.empty();
     141                 :            :     }
     142                 :            : 
     143                 :            :     //--------------------------------------------------------------------
     144                 :          0 :     void MigrationLog::backedUpDocument( const ::rtl::OUString& _rNewDocumentLocation )
     145                 :            :     {
     146                 :          0 :         m_pData->sBackupLocation = _rNewDocumentLocation;
     147                 :          0 :     }
     148                 :            : 
     149                 :            :     //--------------------------------------------------------------------
     150                 :          0 :     DocumentID MigrationLog::startedDocument( const SubDocumentType _eType, const ::rtl::OUString& _rName )
     151                 :            :     {
     152                 :            : #if OSL_DEBUG_LEVEL > 0
     153                 :            :         bool bAlreadyKnown = false;
     154                 :            :         for (   DocumentLogs::const_iterator doc = m_pData->aDocumentLogs.begin();
     155                 :            :                 doc != m_pData->aDocumentLogs.end() && !bAlreadyKnown;
     156                 :            :                 ++doc
     157                 :            :             )
     158                 :            :         {
     159                 :            :             bAlreadyKnown = ( doc->second.eType == _eType ) && ( doc->second.sName == _rName );
     160                 :            :         }
     161                 :            :         OSL_ENSURE( !bAlreadyKnown, "MigrationLog::startedDocument: document is already known!" );
     162                 :            : #endif
     163                 :            : 
     164                 :          0 :         DocumentID nID = (DocumentID)( m_pData->aDocumentLogs.size() + 1 );
     165                 :          0 :         while ( m_pData->aDocumentLogs.find( nID ) != m_pData->aDocumentLogs.end() )
     166                 :          0 :             ++nID;
     167                 :            : 
     168                 :          0 :         m_pData->aDocumentLogs[ nID ] = DocumentEntry( _eType, _rName );
     169                 :            : 
     170                 :          0 :         return nID;
     171                 :            :     }
     172                 :            : 
     173                 :            :     //--------------------------------------------------------------------
     174                 :          0 :     void MigrationLog::movedLibrary( const DocumentID _nDocID, const ScriptType _eScriptType,
     175                 :            :             const ::rtl::OUString& _rOriginalLibName, const ::rtl::OUString& _rNewLibName )
     176                 :            :     {
     177                 :            :         OSL_ENSURE( m_pData->aDocumentLogs.find( _nDocID ) != m_pData->aDocumentLogs.end(),
     178                 :            :             "MigrationLog::movedLibrary: document is not known!" );
     179                 :            : 
     180                 :          0 :         DocumentEntry& rDocEntry = m_pData->aDocumentLogs[ _nDocID ];
     181                 :          0 :         rDocEntry.aMovedLibraries.push_back( LibraryEntry( _eScriptType, _rOriginalLibName, _rNewLibName ) );
     182                 :          0 :     }
     183                 :            : 
     184                 :            :     //--------------------------------------------------------------------
     185                 :          0 :     void MigrationLog::finishedDocument( const DocumentID _nDocID )
     186                 :            :     {
     187                 :            :         OSL_ENSURE( m_pData->aDocumentLogs.find( _nDocID ) != m_pData->aDocumentLogs.end(),
     188                 :            :             "MigrationLog::finishedDocument: document is not known!" );
     189                 :            : 
     190                 :          0 :         DocumentEntry& rDocEntry = m_pData->aDocumentLogs[ _nDocID ];
     191                 :            :         (void)rDocEntry;
     192                 :            :         // nothing to do here
     193                 :          0 :     }
     194                 :            : 
     195                 :            :     //--------------------------------------------------------------------
     196                 :          0 :     const ::rtl::OUString& MigrationLog::getNewLibraryName( DocumentID _nDocID, ScriptType _eScriptType,
     197                 :            :         const ::rtl::OUString& _rOriginalLibName ) const
     198                 :            :     {
     199                 :          0 :         static ::rtl::OUString s_sEmptyString;
     200                 :            : 
     201                 :          0 :         DocumentLogs::const_iterator docPos = m_pData->aDocumentLogs.find( _nDocID );
     202                 :          0 :         if ( docPos == m_pData->aDocumentLogs.end() )
     203                 :            :         {
     204                 :            :             OSL_FAIL( "MigrationLog::getNewLibraryName: document is not known!" );
     205                 :          0 :             return s_sEmptyString;
     206                 :            :         }
     207                 :            : 
     208                 :          0 :         const DocumentEntry& rDocEntry( docPos->second );
     209                 :          0 :         for (   ::std::vector< LibraryEntry >::const_iterator lib = rDocEntry.aMovedLibraries.begin();
     210                 :          0 :                 lib != rDocEntry.aMovedLibraries.end();
     211                 :            :                 ++lib
     212                 :            :             )
     213                 :            :         {
     214                 :          0 :             if  (   ( _eScriptType == lib->eType )
     215                 :          0 :                 &&  ( _rOriginalLibName == lib->sOldName )
     216                 :            :                 )
     217                 :          0 :                 return lib->sNewName;
     218                 :            :         }
     219                 :            : 
     220                 :            :         OSL_FAIL( "MigrationLog::getNewLibraryName: doc is known, but library isn't!" );
     221                 :          0 :         return s_sEmptyString;
     222                 :            :     }
     223                 :            : 
     224                 :            :     //--------------------------------------------------------------------
     225                 :            :     namespace
     226                 :            :     {
     227                 :            :         //----------------------------------------------------------------
     228                 :          0 :         static void lcl_appendErrorDescription( ::rtl::OUStringBuffer& _inout_rBuffer, const MigrationError& _rError )
     229                 :            :         {
     230                 :          0 :             const sal_Char* pAsciiErrorDescription( NULL );
     231                 :          0 :             ::std::vector< rtl::OUString > aParameterNames;
     232                 :          0 :             switch ( _rError.eType )
     233                 :            :             {
     234                 :            :             case ERR_OPENING_SUB_DOCUMENT_FAILED:
     235                 :          0 :                 pAsciiErrorDescription = "opening '#doc#' failed";
     236                 :            :                 aParameterNames.push_back(
     237                 :          0 :                     rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("#doc#")));
     238                 :          0 :                 break;
     239                 :            : 
     240                 :            :             case ERR_CLOSING_SUB_DOCUMENT_FAILED:
     241                 :          0 :                 pAsciiErrorDescription = "closing '#doc#' failed";
     242                 :            :                 aParameterNames.push_back(
     243                 :          0 :                     rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("#doc#")));
     244                 :          0 :                 break;
     245                 :            : 
     246                 :            :             case ERR_STORAGE_COMMIT_FAILED:
     247                 :          0 :                 pAsciiErrorDescription = "committing the changes for document '#doc#' failed";
     248                 :            :                 aParameterNames.push_back(
     249                 :          0 :                     rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("#doc#")));
     250                 :          0 :                 break;
     251                 :            : 
     252                 :            :             case ERR_STORING_DATABASEDOC_FAILED:
     253                 :          0 :                 pAsciiErrorDescription = "storing the database document failed";
     254                 :          0 :                 break;
     255                 :            : 
     256                 :            :             case ERR_COLLECTING_DOCUMENTS_FAILED:
     257                 :          0 :                 pAsciiErrorDescription = "collecting the forms/reports of the database document failed";
     258                 :          0 :                 break;
     259                 :            : 
     260                 :            :             case ERR_UNEXPECTED_LIBSTORAGE_ELEMENT:
     261                 :          0 :                 pAsciiErrorDescription = "unexpected #lib# storage element in document '#doc#', named '#element#'";
     262                 :            :                 aParameterNames.push_back(
     263                 :          0 :                     rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("#doc#")));
     264                 :            :                 aParameterNames.push_back(
     265                 :          0 :                     rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("#libstore#")));
     266                 :            :                 aParameterNames.push_back(
     267                 :          0 :                     rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("#element#")));
     268                 :          0 :                 break;
     269                 :            : 
     270                 :            :             case ERR_CREATING_DBDOC_SCRIPT_STORAGE_FAILED:
     271                 :          0 :                 pAsciiErrorDescription = "creating the database document's storage for #scripttype# scripts failed";
     272                 :            :                 aParameterNames.push_back(
     273                 :          0 :                     rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("#scripttype#")));
     274                 :          0 :                 break;
     275                 :            : 
     276                 :            :             case ERR_COMMITTING_SCRIPT_STORAGES_FAILED:
     277                 :          0 :                 pAsciiErrorDescription = "saving the #scripttype# scripts for document '#doc#' failed";
     278                 :            :                 aParameterNames.push_back(
     279                 :          0 :                     rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("#scripttype#")));
     280                 :            :                 aParameterNames.push_back(
     281                 :          0 :                     rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("#doc#")));
     282                 :          0 :                 break;
     283                 :            : 
     284                 :            :             case ERR_GENERAL_SCRIPT_MIGRATION_FAILURE:
     285                 :          0 :                 pAsciiErrorDescription = "general error while migrating #scripttype# scripts of document '#doc#'";
     286                 :            :                 aParameterNames.push_back(
     287                 :          0 :                     rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("#scripttype#")));
     288                 :            :                 aParameterNames.push_back(
     289                 :          0 :                     rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("#doc#")));
     290                 :          0 :                 break;
     291                 :            : 
     292                 :            :             case ERR_GENERAL_MACRO_MIGRATION_FAILURE:
     293                 :          0 :                 pAsciiErrorDescription = "general error during macro migration of document '#doc#'";
     294                 :            :                 aParameterNames.push_back(
     295                 :          0 :                     rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("#doc#")));
     296                 :          0 :                 break;
     297                 :            : 
     298                 :            :             case ERR_UNKNOWN_SCRIPT_TYPE:
     299                 :          0 :                 pAsciiErrorDescription = "unknown script type: #type#";
     300                 :            :                 aParameterNames.push_back(
     301                 :          0 :                     rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("#type#")));
     302                 :          0 :                 break;
     303                 :            : 
     304                 :            :             case ERR_UNKNOWN_SCRIPT_LANGUAGE:
     305                 :          0 :                 pAsciiErrorDescription = "unknown script language: #lang#";
     306                 :            :                 aParameterNames.push_back(
     307                 :          0 :                     rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("#lang#")));
     308                 :          0 :                 break;
     309                 :            : 
     310                 :            :             case ERR_UNKNOWN_SCRIPT_NAME_FORMAT:
     311                 :          0 :                 pAsciiErrorDescription = "unknown script name format: #script#";
     312                 :            :                 aParameterNames.push_back(
     313                 :          0 :                     rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("#script#")));
     314                 :          0 :                 break;
     315                 :            : 
     316                 :            :             case ERR_SCRIPT_TRANSLATION_FAILURE:
     317                 :          0 :                 pAsciiErrorDescription = "analyzing/translating the script URL failed; script type: #type#; script: #code#";
     318                 :            :                 aParameterNames.push_back(
     319                 :          0 :                     rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("#type#")));
     320                 :            :                 aParameterNames.push_back(
     321                 :          0 :                     rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("#code#")));
     322                 :          0 :                 break;
     323                 :            : 
     324                 :            :             case ERR_INVALID_SCRIPT_DESCRIPTOR_FORMAT:
     325                 :          0 :                 pAsciiErrorDescription = "invalid script descriptor format";
     326                 :          0 :                 break;
     327                 :            : 
     328                 :            :             case ERR_ADJUSTING_DOCUMENT_EVENTS_FAILED:
     329                 :          0 :                 pAsciiErrorDescription = "adjusting events for document '#doc#' failed";
     330                 :            :                 aParameterNames.push_back(
     331                 :          0 :                     rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("#doc#")));
     332                 :          0 :                 break;
     333                 :            : 
     334                 :            :             case ERR_ADJUSTING_DIALOG_EVENTS_FAILED:
     335                 :          0 :                 pAsciiErrorDescription = "adjusting events for dialog #lib#.#dlg# in document '#doc#' failed";
     336                 :            :                 aParameterNames.push_back(
     337                 :          0 :                     rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("#doc#")));
     338                 :            :                 aParameterNames.push_back(
     339                 :          0 :                     rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("#lib#")));
     340                 :            :                 aParameterNames.push_back(
     341                 :          0 :                     rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("#dlg#")));
     342                 :          0 :                 break;
     343                 :            : 
     344                 :            :             case ERR_ADJUSTING_FORMCOMP_EVENTS_FAILED:
     345                 :          0 :                 pAsciiErrorDescription = "adjusting form component events for '#doc#' failed";
     346                 :            :                 aParameterNames.push_back(
     347                 :          0 :                     rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("#doc#")));
     348                 :          0 :                 break;
     349                 :            : 
     350                 :            :             case ERR_BIND_SCRIPT_STORAGE_FAILED:
     351                 :          0 :                 pAsciiErrorDescription = "binding to the script storage failed for document '#doc#'";
     352                 :            :                 aParameterNames.push_back(
     353                 :          0 :                     rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("#doc#")));
     354                 :          0 :                 break;
     355                 :            : 
     356                 :            :             case ERR_REMOVE_SCRIPTS_STORAGE_FAILED:
     357                 :          0 :                 pAsciiErrorDescription = "removing a scripts storage failed for document '#doc#'";
     358                 :            :                 aParameterNames.push_back(
     359                 :          0 :                     rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("#doc#")));
     360                 :          0 :                 break;
     361                 :            : 
     362                 :            :             case ERR_DOCUMENT_BACKUP_FAILED:
     363                 :          0 :                 pAsciiErrorDescription = "backing up the document to #location# failed";
     364                 :            :                 aParameterNames.push_back(
     365                 :          0 :                     rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("#location#")));
     366                 :          0 :                 break;
     367                 :            : 
     368                 :            :             case ERR_UNKNOWN_SCRIPT_FOLDER:
     369                 :          0 :                 pAsciiErrorDescription = "unknown script folder '#name#' in document '#doc#'";
     370                 :            :                 aParameterNames.push_back(
     371                 :          0 :                     rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("#doc#")));
     372                 :            :                 aParameterNames.push_back(
     373                 :          0 :                     rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("#name#")));
     374                 :          0 :                 break;
     375                 :            : 
     376                 :            :             case ERR_EXAMINING_SCRIPTS_FOLDER_FAILED:
     377                 :          0 :                 pAsciiErrorDescription = "examining the 'Scripts' folder failed for document '#doc#'";
     378                 :            :                 aParameterNames.push_back(
     379                 :          0 :                     rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("#doc#")));
     380                 :          0 :                 break;
     381                 :            : 
     382                 :            :             case ERR_PASSWORD_VERIFICATION_FAILED:
     383                 :          0 :                 pAsciiErrorDescription = "password verification failed for document '#doc#', #libtype# library '#name#'";
     384                 :            :                 aParameterNames.push_back(
     385                 :          0 :                     rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("#doc#")));
     386                 :            :                 aParameterNames.push_back(
     387                 :          0 :                     rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("#libtype#")));
     388                 :            :                 aParameterNames.push_back(
     389                 :          0 :                     rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("#name#")));
     390                 :          0 :                 break;
     391                 :            : 
     392                 :            :             case ERR_NEW_STYLE_REPORT:
     393                 :          0 :                 pAsciiErrorDescription = "#doc# could not be processed, since you don't have the Oracle Report Builder (TM) extension installed.";
     394                 :            :                 aParameterNames.push_back(
     395                 :          0 :                     rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("#doc#")));
     396                 :          0 :                 break;
     397                 :            : 
     398                 :            :                 // do *not* add a default case here: Without a default, some compilers will warn you when
     399                 :            :                 // you miss a newly-introduced enum value here
     400                 :            :             }
     401                 :            :             OSL_ENSURE( pAsciiErrorDescription, "lcl_appendErrorDescription: no error message!" );
     402                 :          0 :             if ( pAsciiErrorDescription )
     403                 :            :             {
     404                 :          0 :                 ::rtl::OUString sSubstituted( ::rtl::OUString::createFromAscii( pAsciiErrorDescription ) );
     405                 :            :                 OSL_ENSURE( aParameterNames.size() == _rError.aErrorDetails.size(),
     406                 :            :                     "lcl_appendErrorDescription: unexpected number of error message parameters!" );
     407                 :            : 
     408                 :          0 :                 for ( size_t i=0; i < ::std::min( aParameterNames.size(), _rError.aErrorDetails.size() ); ++i )
     409                 :            :                 {
     410                 :            :                     sSubstituted = sSubstituted.replaceFirst(
     411                 :          0 :                         aParameterNames[i], _rError.aErrorDetails[i]);
     412                 :            :                 }
     413                 :            : 
     414                 :          0 :                 _inout_rBuffer.append( sSubstituted );
     415                 :          0 :             }
     416                 :          0 :         }
     417                 :            : 
     418                 :            :         //----------------------------------------------------------------
     419                 :          0 :         void lcl_describeErrors( ::rtl::OUStringBuffer& _rBuffer, const ErrorLog& _rErrors, const sal_uInt16 _nHeadingResId )
     420                 :            :         {
     421                 :          0 :             _rBuffer.appendAscii( "=== " );
     422                 :          0 :             _rBuffer.append     ( String( MacroMigrationResId( _nHeadingResId ) ) );
     423                 :          0 :             _rBuffer.appendAscii( " ===\n" );
     424                 :            : 
     425                 :          0 :             String sException( MacroMigrationResId( STR_EXCEPTION ) );
     426                 :            : 
     427                 :          0 :             for (   ErrorLog::const_iterator error = _rErrors.begin();
     428                 :          0 :                     error != _rErrors.end();
     429                 :            :                     ++error
     430                 :            :                 )
     431                 :            :             {
     432                 :          0 :                 _rBuffer.append( sal_Unicode( '-' ) );
     433                 :          0 :                 _rBuffer.append( sal_Unicode( ' ' ) );
     434                 :          0 :                 lcl_appendErrorDescription( _rBuffer, *error );
     435                 :          0 :                 _rBuffer.append( sal_Unicode( '\n' ) );
     436                 :            : 
     437                 :          0 :                 if ( !error->aCaughtException.hasValue() )
     438                 :          0 :                     continue;
     439                 :            : 
     440                 :          0 :                 _rBuffer.append( sException );
     441                 :          0 :                 _rBuffer.append( ::comphelper::anyToString( error->aCaughtException ) );
     442                 :          0 :                 _rBuffer.append( sal_Unicode( '\n' ) );
     443                 :          0 :                 _rBuffer.append( sal_Unicode( '\n' ) );
     444                 :          0 :             }
     445                 :          0 :         }
     446                 :            :     }
     447                 :            : 
     448                 :            :     //--------------------------------------------------------------------
     449                 :          0 :     bool MigrationLog::movedAnyLibrary( const DocumentID _nDocID )
     450                 :            :     {
     451                 :          0 :         DocumentLogs::const_iterator docPos = m_pData->aDocumentLogs.find( _nDocID );
     452                 :          0 :         if ( docPos == m_pData->aDocumentLogs.end() )
     453                 :            :         {
     454                 :            :             OSL_FAIL( "MigrationLog::movedAnyLibrary: document is not known!" );
     455                 :          0 :             return false;
     456                 :            :         }
     457                 :          0 :         return !docPos->second.aMovedLibraries.empty();
     458                 :            :     }
     459                 :            : 
     460                 :            :     //--------------------------------------------------------------------
     461                 :          0 :     ::rtl::OUString MigrationLog::getCompleteLog() const
     462                 :            :     {
     463                 :          0 :         ::rtl::OUStringBuffer aBuffer;
     464                 :            : 
     465                 :          0 :         if ( !m_pData->sBackupLocation.isEmpty() )
     466                 :            :         {
     467                 :          0 :             String sBackedUp( MacroMigrationResId( STR_SAVED_COPY_TO ) );
     468                 :          0 :             sBackedUp.SearchAndReplaceAllAscii( "$location$", m_pData->sBackupLocation );
     469                 :            : 
     470                 :          0 :             aBuffer.appendAscii( "=== " );
     471                 :          0 :             aBuffer.append     ( String( MacroMigrationResId( STR_DATABASE_DOCUMENT ) ) );
     472                 :          0 :             aBuffer.appendAscii( " ===\n" );
     473                 :          0 :             aBuffer.append     ( sBackedUp );
     474                 :          0 :             aBuffer.appendAscii( "\n\n" );
     475                 :            :         }
     476                 :            : 
     477                 :          0 :         if ( !m_pData->aFailures.empty() )
     478                 :            :         {
     479                 :          0 :             lcl_describeErrors( aBuffer, m_pData->aFailures
     480                 :          0 :                 , STR_ERRORS );
     481                 :            :         }
     482                 :            :         else
     483                 :            :         {
     484                 :          0 :             String sMovedLibTemplate( MacroMigrationResId( STR_MOVED_LIBRARY ) );
     485                 :            : 
     486                 :          0 :             for (   DocumentLogs::const_iterator doc = m_pData->aDocumentLogs.begin();
     487                 :          0 :                     doc != m_pData->aDocumentLogs.end();
     488                 :            :                     ++doc
     489                 :            :                 )
     490                 :            :             {
     491                 :          0 :                 const DocumentEntry& rDoc( doc->second );
     492                 :            : 
     493                 :          0 :                 if ( rDoc.aMovedLibraries.empty() )
     494                 :          0 :                     continue;
     495                 :            : 
     496                 :          0 :                 String sDocTitle( MacroMigrationResId( rDoc.eType == eForm ? STR_FORM : STR_REPORT ) );
     497                 :          0 :                 sDocTitle.SearchAndReplaceAllAscii( "$name$", rDoc.sName );
     498                 :            : 
     499                 :          0 :                 aBuffer.appendAscii( "=== " );
     500                 :          0 :                 aBuffer.append     ( sDocTitle );
     501                 :          0 :                 aBuffer.appendAscii( " ===\n" );
     502                 :            : 
     503                 :          0 :                 for (   ::std::vector< LibraryEntry >::const_iterator lib = rDoc.aMovedLibraries.begin();
     504                 :          0 :                         lib != rDoc.aMovedLibraries.end();
     505                 :            :                         ++lib
     506                 :            :                     )
     507                 :            :                 {
     508                 :          0 :                     String sMovedLib( sMovedLibTemplate );
     509                 :          0 :                     sMovedLib.SearchAndReplaceAllAscii( "$type$", getScriptTypeDisplayName( lib->eType ) );
     510                 :          0 :                     sMovedLib.SearchAndReplaceAllAscii( "$old$", lib->sOldName );
     511                 :          0 :                     sMovedLib.SearchAndReplaceAllAscii( "$new$", lib->sNewName );
     512                 :            : 
     513                 :          0 :                     aBuffer.append( sMovedLib );
     514                 :          0 :                     aBuffer.append( sal_Unicode( '\n' ) );
     515                 :          0 :                 }
     516                 :            : 
     517                 :          0 :                 aBuffer.append( sal_Unicode( '\n' ) );
     518                 :          0 :             }
     519                 :            :         }
     520                 :            : 
     521                 :          0 :         if ( !m_pData->aWarnings.empty() )
     522                 :            :         {
     523                 :          0 :             lcl_describeErrors( aBuffer, m_pData->aWarnings, STR_WARNINGS );
     524                 :            :         }
     525                 :            : 
     526                 :          0 :         return aBuffer.makeStringAndClear();
     527                 :            :     }
     528                 :            : 
     529                 :            : //........................................................................
     530                 :            : } // namespace dbmm
     531                 :            : //........................................................................
     532                 :            : 
     533                 :            : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10