Tag: odbmacros_2_5 User: fs Date: 2008-02-27 14:42:52+0000 Modified: dba/dbaccess/source/ext/macromigration/macromigrationdialog.cxx dba/dbaccess/source/ext/macromigration/macromigrationdialog.hxx
Log: some logging; proper final summary (provided by the logger) File Changes: Directory: /dba/dbaccess/source/ext/macromigration/ =================================================== File [changed]: macromigrationdialog.cxx Url: http://dba.openoffice.org/source/browse/dba/dbaccess/source/ext/macromigration/macromigrationdialog.cxx?r1=1.1.2.8.2.2&r2=1.1.2.8.2.3 Delta lines: +85 -22 --------------------- --- macromigrationdialog.cxx 2008-02-14 22:25:00+0000 1.1.2.8.2.2 +++ macromigrationdialog.cxx 2008-02-27 14:42:49+0000 1.1.2.8.2.3 @@ -4,9 +4,9 @@ * * $RCSfile: macromigrationdialog.cxx,v $ * - * $Revision: 1.1.2.8.2.2 $ + * $Revision: 1.1.2.8.2.3 $ * - * last change: $Author: fs $ $Date: 2008/02/14 22:25:00 $ + * last change: $Author: fs $ $Date: 2008/02/27 14:42:49 $ * * The Contents of this file are made available subject to * the terms of GNU Lesser General Public License Version 2.1. @@ -43,6 +43,7 @@ #include "macromigrationdialog.hxx" #include "macromigrationpages.hxx" #include "migrationengine.hxx" +#include "migrationlog.hxx" /** === begin UNO includes === **/ #include <com/sun/star/sdb/application/XDatabaseDocumentUI.hpp> @@ -52,6 +53,7 @@ /** === end UNO includes === **/ #include <cppuhelper/exc_hlp.hxx> +#include <svtools/filenotation.hxx> #include <tools/diagnose_ex.h> //........................................................................ @@ -88,14 +90,35 @@ /** === end UNO using === **/ //==================================================================== + //= MacroMigrationDialog_Data + //==================================================================== + struct MacroMigrationDialog_Data + { + ::comphelper::ComponentContext aContext; + MigrationLog aLogger; + Reference< XOfficeDatabaseDocument > xDocument; + bool bMigrationIsRunning; + + MacroMigrationDialog_Data( + const ::comphelper::ComponentContext& _rContext, + const Reference< XOfficeDatabaseDocument >& _rxDocument ) + :aContext( _rContext ) + ,aLogger() + ,xDocument( _rxDocument ) + ,bMigrationIsRunning( false ) + { + } + }; + + + //==================================================================== //= MacroMigrationDialog //==================================================================== //-------------------------------------------------------------------- MacroMigrationDialog::MacroMigrationDialog( Window* _pParent, const ::comphelper::ComponentContext& _rContext, const Reference< XOfficeDatabaseDocument >& _rxDocument ) :MacroMigrationDialog_Base( _pParent, MacroMigrationResId( DLG_MACRO_MIGRATION ) ) - ,m_aContext( _rContext ) - ,m_xDocument( _rxDocument ) + ,m_pData( new MacroMigrationDialog_Data( _rContext, _rxDocument ) ) { String sTitlePrepare( MacroMigrationResId( STR_STATE_CLOSE_SUB_DOCS ) ); String sTitleStoreAs( MacroMigrationResId( STR_STATE_BACKUP_DBDOC ) ); @@ -118,7 +141,7 @@ enableButtons( WZB_FINISH, true ); ActivatePage(); - OSL_PRECOND( m_xDocument.is(), "MacroMigrationDialog::MacroMigrationDialog: illegal document!" ); + OSL_PRECOND( m_pData->xDocument.is(), "MacroMigrationDialog::MacroMigrationDialog: illegal document!" ); } //-------------------------------------------------------------------- @@ -127,6 +150,26 @@ } //-------------------------------------------------------------------- + const ::comphelper::ComponentContext& MacroMigrationDialog::getComponentContext() const + { + return m_pData->aContext; + } + + //-------------------------------------------------------------------- + const Reference< XOfficeDatabaseDocument >& MacroMigrationDialog::getDocument() const + { + return m_pData->xDocument; + } + + //-------------------------------------------------------------------- + BOOL MacroMigrationDialog::Close() + { + if ( m_pData->bMigrationIsRunning ) + return FALSE; + return MacroMigrationDialog_Base::Close(); + } + + //-------------------------------------------------------------------- void MacroMigrationDialog::enterState( WizardState _nState ) { MacroMigrationDialog_Base::enterState( _nState ); @@ -156,15 +199,18 @@ enableButtons( WZB_FINISH | WZB_CANCEL | WZB_PREVIOUS | WZB_NEXT, false ); - bool bSuccess = impl_autoStartMigration(); - - enableButtons( ( bSuccess ? WZB_FINISH | WZB_NEXT : 0 ), true ); - enableState( STATE_SUMMARY, bSuccess ); - updateTravelUI(); + // prevent closing + m_pData->bMigrationIsRunning = true; + // start the migration asynchronously + PostUserEvent( LINK( this, MacroMigrationDialog, OnStartMigration ) ); } break; case STATE_SUMMARY: + // enable the previous step - we can't return to the actual migration, it already happened (or failed) + enableState( STATE_MIGRATE, false ); + updateTravelUI(); + dynamic_cast< ResultPage& >( *GetPage( STATE_SUMMARY ) ).displaySummary( m_pData->aLogger.getCompleteLog() ); break; default: @@ -218,14 +264,25 @@ } //-------------------------------------------------------------------- - bool MacroMigrationDialog::impl_autoStartMigration() const + IMPL_LINK( MacroMigrationDialog, OnStartMigration, void*, /*_pNotInterestedIn*/ ) { + // initialize migration engine and progress ProgressPage& rProgressPage( dynamic_cast< ProgressPage& >( *GetPage( STATE_MIGRATE ) ) ); - MigrationEngine aEngine( m_aContext, m_xDocument, rProgressPage ); - + MigrationEngine aEngine( m_pData->aContext, m_pData->xDocument, rProgressPage, m_pData->aLogger ); rProgressPage.setDocumentCounts( aEngine.getFormCount(), aEngine.getReportCount() ); - return aEngine.migrateAll(); + // do the migration + bool bSuccess = aEngine.migrateAll(); + + // re-enable the UI + enableButtons( ( bSuccess ? WZB_FINISH | WZB_NEXT : 0 ), true ); + enableState( STATE_SUMMARY, bSuccess ); + updateTravelUI(); + + m_pData->bMigrationIsRunning = false; + + // outta here + return 0L; } //-------------------------------------------------------------------- @@ -240,8 +297,8 @@ //-------------------------------------------------------------------- bool MacroMigrationDialog::impl_closeSubDocs_nothrow() { - OSL_PRECOND( m_xDocument.is(), "MacroMigrationDialog::impl_closeSubDocs_nothrow: no document!" ); - if ( !m_xDocument.is() ) + OSL_PRECOND( m_pData->xDocument.is(), "MacroMigrationDialog::impl_closeSubDocs_nothrow: no document!" ); + if ( !m_pData->xDocument.is() ) return false; impl_showCloseDocsError( false ); @@ -252,7 +309,7 @@ ::std::vector< Reference< XController > > aControllers; // collect all controllers of our document - Reference< XModel2 > xDocument( m_xDocument, UNO_QUERY_THROW ); + Reference< XModel2 > xDocument( m_pData->xDocument, UNO_QUERY_THROW ); Reference< XEnumeration > xControllerEnum( xDocument->getControllers(), UNO_SET_THROW ); while ( xControllerEnum->hasMoreElements() ) aControllers.push_back( Reference< XController >( xControllerEnum->nextElement(), UNO_QUERY_THROW ) ); @@ -286,24 +343,30 @@ //-------------------------------------------------------------------- bool MacroMigrationDialog::impl_backupDocument_nothrow() const { + const SaveDBDocPage& rBackupPage = dynamic_cast< const SaveDBDocPage& >( *GetPage( STATE_BACKUP_DBDOC ) ); + ::rtl::OUString sBackupLocation( rBackupPage.getBackupLocation() ); + Any aError; try { - const SaveDBDocPage& rBackupPage = dynamic_cast< const SaveDBDocPage& >( *GetPage( STATE_BACKUP_DBDOC ) ); - ::rtl::OUString sLocation( rBackupPage.getBackupLocation() ); - const Reference< XStorable > xDocument( getDocument(), UNO_QUERY_THROW ); - xDocument->storeToURL( sLocation, Sequence< PropertyValue >() ); + xDocument->storeToURL( sBackupLocation, Sequence< PropertyValue >() ); } catch( const Exception& ) { aError = ::cppu::getCaughtException(); } if ( !aError.hasValue() ) + { + ::svt::OFileNotation aFileNotation( sBackupLocation ); + m_pData->aLogger.backedUpDocument( aFileNotation.get( ::svt::OFileNotation::N_SYSTEM ) ); return true; + } // display the error to the user - DocumentErrorHandling::reportError( m_aContext, m_xDocument, aError ); + DocumentErrorHandling::reportError( m_pData->aContext, m_pData->xDocument, aError ); + + // TODO: log the error return false; } File [changed]: macromigrationdialog.hxx Url: http://dba.openoffice.org/source/browse/dba/dbaccess/source/ext/macromigration/macromigrationdialog.hxx?r1=1.1.2.4.2.1&r2=1.1.2.4.2.2 Delta lines: +16 -10 --------------------- --- macromigrationdialog.hxx 2008-02-14 22:25:00+0000 1.1.2.4.2.1 +++ macromigrationdialog.hxx 2008-02-27 14:42:50+0000 1.1.2.4.2.2 @@ -4,9 +4,9 @@ * * $RCSfile: macromigrationdialog.hxx,v $ * - * $Revision: 1.1.2.4.2.1 $ + * $Revision: 1.1.2.4.2.2 $ * - * last change: $Author: fs $ $Date: 2008/02/14 22:25:00 $ + * last change: $Author: fs $ $Date: 2008/02/27 14:42:50 $ * * The Contents of this file are made available subject to * the terms of GNU Lesser General Public License Version 2.1. @@ -43,6 +43,8 @@ #include <comphelper/componentcontext.hxx> #include <svtools/roadmapwizard.hxx> +#include <memory> + //........................................................................ namespace dbmm { @@ -51,6 +53,7 @@ //==================================================================== //= MacroMigrationDialog //==================================================================== + struct MacroMigrationDialog_Data; typedef ::svt::RoadmapWizard MacroMigrationDialog_Base; class MacroMigrationDialog : public MacroMigrationDialog_Base { @@ -62,10 +65,10 @@ ); virtual ~MacroMigrationDialog(); - inline const ::comphelper::ComponentContext& - getComponentContext() const { return m_aContext; } - inline const ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XOfficeDatabaseDocument >& - getDocument() const { return m_xDocument; } + const ::comphelper::ComponentContext& + getComponentContext() const; + const ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XOfficeDatabaseDocument >& + getDocument() const; protected: // OWizardMachine overridables @@ -75,16 +78,19 @@ virtual WizardState determineNextState( WizardState _nCurrentState ) const; virtual sal_Bool onFinish( sal_Int32 _nResult ); + // Dialog overridables + virtual BOOL Close(); + private: void impl_showCloseDocsError( bool _bShow ); bool impl_closeSubDocs_nothrow(); bool impl_backupDocument_nothrow() const; - bool impl_autoStartMigration() const; private: - ::comphelper::ComponentContext m_aContext; - ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XOfficeDatabaseDocument > - m_xDocument; + DECL_LINK( OnStartMigration, void* ); + + private: + ::std::auto_ptr< MacroMigrationDialog_Data > m_pData; }; //........................................................................ --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
