summaryrefslogtreecommitdiff
path: root/svtools/source/productregistration/productregistration.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'svtools/source/productregistration/productregistration.cxx')
-rw-r--r--svtools/source/productregistration/productregistration.cxx482
1 files changed, 0 insertions, 482 deletions
diff --git a/svtools/source/productregistration/productregistration.cxx b/svtools/source/productregistration/productregistration.cxx
deleted file mode 100644
index a3312c107a52..000000000000
--- a/svtools/source/productregistration/productregistration.cxx
+++ /dev/null
@@ -1,482 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_svtools.hxx"
-
-#include "productregistration.hxx"
-#include "unotools/regoptions.hxx"
-#include "registrationdlg.hxx"
-#include <svtools/svtools.hrc>
-#include "cppuhelper/factory.hxx"
-#include <cppuhelper/implbase1.hxx>
-#include <com/sun/star/lang/XInitialization.hpp>
-#include <com/sun/star/system/XSystemShellExecute.hpp>
-#include <com/sun/star/system/SystemShellExecuteFlags.hpp>
-#include <com/sun/star/frame/DispatchResultState.hpp>
-#include <com/sun/star/frame/XDesktop.hpp>
-#include <com/sun/star/beans/XMaterialHolder.hpp>
-#include <com/sun/star/container/XHierarchicalNameAccess.hpp>
-#include <toolkit/helper/vclunohelper.hxx>
-#include <vcl/svapp.hxx>
-#include <vcl/msgbox.hxx>
-#include <osl/diagnose.h>
-
-#include <algorithm>
-#include <functional>
-#include <memory>
-
-#define PRODREG_IMPLNAME "com.sun.star.comp.setup.ProductRegistration"
-#define PRODREG_SERVNAME "com.sun.star.setup.ProductRegistration"
-
-using namespace ::com::sun::star::uno;
-using namespace ::com::sun::star::lang;
-using namespace ::com::sun::star::registry;
-using namespace ::com::sun::star::container;
-
-using rtl::OUString;
-
-//........................................................................
-namespace svt
-{
-//........................................................................
-
- using namespace ::com::sun::star::task;
- using namespace ::com::sun::star::system;
- using namespace ::com::sun::star::beans;
- using namespace ::com::sun::star::frame;
- using namespace ::com::sun::star::awt;
-
- //-------------------------------------------------------------------
-
- struct EqualsOUString : public ::std::unary_function< OUString, sal_Bool >
- {
- const OUString& m_rCompare;
- EqualsOUString( const OUString& _rCompare ) : m_rCompare( _rCompare ) { }
-
- sal_Bool operator() ( const OUString& _rCompare )
- {
- return m_rCompare.equals( _rCompare );
- }
- };
-
- //====================================================================
- //= OProductRegistration
- //====================================================================
-
- //--------------------------------------------------------------------
- OProductRegistration::OProductRegistration( const Reference< XMultiServiceFactory >& _rxORB )
- :m_xORB( _rxORB )
- {
- }
-
- //--------------------------------------------------------------------
- Reference< XInterface > OProductRegistration::Create( const Reference< XMultiServiceFactory >& _rxORB )
- {
- return static_cast< ::cppu::OWeakObject* >( new OProductRegistration( _rxORB ) );
- }
-
- //--------------------------------------------------------------------
- OUString SAL_CALL OProductRegistration::getImplementationName_Static( )
- {
- return OUString(RTL_CONSTASCII_USTRINGPARAM( PRODREG_IMPLNAME ));
- }
-
- //--------------------------------------------------------------------
- Sequence< OUString > SAL_CALL OProductRegistration::getSupportedServiceNames_Static( ) throw (RuntimeException)
- {
- Sequence< OUString > aServiceNames( 1 );
- aServiceNames[ 0 ] = OUString(RTL_CONSTASCII_USTRINGPARAM( PRODREG_SERVNAME ));
- return aServiceNames;
- }
-
- //--------------------------------------------------------------------
- OUString SAL_CALL OProductRegistration::getImplementationName( ) throw (RuntimeException)
- {
- return getImplementationName_Static( );
- }
-
- //--------------------------------------------------------------------
- sal_Bool SAL_CALL OProductRegistration::supportsService( const OUString& _rServiceName ) throw (RuntimeException)
- {
- Sequence< OUString > aServiceNames( getSupportedServiceNames( ) );
- const OUString* pNames = aServiceNames.getConstArray( );
- const OUString* pNamesEnd = aServiceNames.getConstArray( ) + aServiceNames.getLength();
-
- const OUString* pFound = ::std::find_if(
- pNames,
- pNamesEnd,
- EqualsOUString( _rServiceName )
- );
- return pFound != pNamesEnd;
- }
-
- //--------------------------------------------------------------------
- Sequence< OUString > SAL_CALL OProductRegistration::getSupportedServiceNames( ) throw (RuntimeException)
- {
- return getSupportedServiceNames_Static( );
- }
-
- //--------------------------------------------------------------------
- static Reference< XFrame > lcl_getActiveFrame( const Reference< XMultiServiceFactory >& xFactory )
- {
- try
- {
- Reference< XDesktop > xDesktop(
- xFactory->createInstance( OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.frame.Desktop") ) ),
- UNO_QUERY_THROW );
-
- Reference< XFrame > xFrame(xDesktop->getCurrentFrame());
- if( ! xFrame.is() )
- {
- // Perhaps the frames collection of the desktop knows about an "active frame"?
- Reference< XFramesSupplier > xFrames( xDesktop, UNO_QUERY_THROW );
- xFrame = xFrames->getActiveFrame();
- }
-
- return xFrame;
- }
- catch(const Exception& )
- {
- OSL_FAIL( "lcl_getActiveFrame: caught an exception!" );
- return Reference< XFrame >();
- }
- }
-
- //--------------------------------------------------------------------
- static Window* lcl_getPreferredDialogParent( const Reference< XFrame >& xFrame )
- {
- Window* pReturn = Application::GetDefDialogParent();
-
- try
- {
- if ( xFrame.is() )
- {
- Reference< XWindow > xWindow = xFrame->getContainerWindow();
- if ( xWindow.is() )
- pReturn = VCLUnoHelper::GetWindow( xWindow );
- }
- }
- catch( const Exception& )
- {
- OSL_FAIL( "lcl_getPreferredDialogParent: caught an exception!" );
- }
-
- return pReturn;
- }
-
- //--------------------------------------------------------------------
- static bool lcl_isEvalVersion( const Reference< XMultiServiceFactory >& _rxORB )
- {
- bool bIsEvaluationVersion = false;
-
- try
- {
- Reference < XMaterialHolder > xHolder(
- _rxORB->createInstance( OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.tab.tabreg" ) ) ),
- UNO_QUERY
- );
-
- if ( xHolder.is() )
- {
- Any aData = xHolder->getMaterial();
- Sequence < NamedValue > aSeq;
-
- if ( aData >>= aSeq )
- {
- // it's an evaluation version - a non-eval version wouldn't provide this "material"
- bIsEvaluationVersion = true;
- }
- }
- }
- catch( const Exception& )
- {
- OSL_FAIL( "lcl_isEvalVersion: caught an exception!" );
- }
-
- return bIsEvaluationVersion;
- }
-
- //--------------------------------------------------------------------
- static bool lcl_doNewStyleRegistration( const Reference< XMultiServiceFactory >& xFactory, bool online )
- {
- try
- {
- Reference< XMultiServiceFactory > xConfigProvider(
- xFactory->createInstance(
- OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.configuration.ConfigurationProvider" ) )
- ),
- UNO_QUERY_THROW
- );
-
- PropertyValue aNodePath;
- aNodePath.Name = OUString( RTL_CONSTASCII_USTRINGPARAM( "nodepath" ) );
- aNodePath.Value = makeAny( OUString( RTL_CONSTASCII_USTRINGPARAM( "/org.openoffice.Office.Jobs/Events" ) ) );
-
- Sequence< Any > lArguments(1);
- lArguments[0] = makeAny( aNodePath );
-
- Reference< XHierarchicalNameAccess > xNameAccess(
- xConfigProvider->createInstanceWithArguments(
- OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.configuration.ConfigurationAccess" ) ),
- lArguments
- ),
- UNO_QUERY_THROW
- );
-
- if( ! xNameAccess->hasByHierarchicalName( OUString( RTL_CONSTASCII_USTRINGPARAM( "onRegisterNow/JobList" ) ) ) )
- return false;
-
- Reference< XJobExecutor > xJobExecutor(
- xFactory->createInstance(
- OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.task.JobExecutor" ) )
- ),
- UNO_QUERY_THROW
- );
-
- xJobExecutor->trigger( online ? OUString( RTL_CONSTASCII_USTRINGPARAM( "onRegisterNow" ) ) :
- OUString( RTL_CONSTASCII_USTRINGPARAM( "onRegisterLater" ) ) );
-
- return true;
- }
- catch( const Exception& )
- {
- OSL_FAIL( "lcl_getOnlineRegistrationDispatch: caught an exception!" );
- return false;
- }
- }
-
- //--------------------------------------------------------------------
- void SAL_CALL OProductRegistration::trigger( const OUString& _rEvent ) throw (RuntimeException)
- {
- bool registerOnline = false;
-
- switch ( classify( _rEvent ) )
- {
- case etRegistrationRequired:
- registerOnline = true;
- break;
-
- default:
- break;
- }
-
- // prefer new style registration
- if( ! lcl_doNewStyleRegistration(m_xORB, registerOnline ) && registerOnline )
- doOnlineRegistration();
- }
-
- //--------------------------------------------------------------------
- Any SAL_CALL OProductRegistration::execute( const Sequence< NamedValue >& ) throw (IllegalArgumentException, Exception, RuntimeException)
- {
- Any aReturn;
-
- static sal_Bool bFirstEncounter( sal_True );
- if ( bFirstEncounter )
- { // during this session, this event was never triggered before ....
- bFirstEncounter = sal_False;
-
- sal_Bool bDeactivateJob = sal_True;
-
- // our config options
- utl::RegOptions aRegOptions;
- // check them for the permissions for the dialog
- utl::RegOptions::DialogPermission ePermission( aRegOptions.getDialogPermission() );
-
- if ( utl::RegOptions::dpDisabled != ePermission )
- { // the dialog is _not_ disabled
-
- // for this session, I'm no interested in the dialog registration anymore
- aRegOptions.markSessionDone( );
-
- if ( ( utl::RegOptions::dpNotThisSession == ePermission ) // first trigger session not reached
- || ( utl::RegOptions::dpRemindLater == ePermission ) // or at a later reminder date
- )
- { // the dialog should be executed during one of the next sessions
- bDeactivateJob = sal_False;
- }
- else
- {
- // if we're here, the dialog should be executed during this session
- OSL_ENSURE( utl::RegOptions::dpThisSession == ePermission, "OProductRegistration::execute: invalid permissions!" );
-
- {
- // this is some kind of HACK.
- // This registration dialog is intended to appear very very early during the
- // first office start after installation. Unfortunately, this is so early
- // that even SFX is not yet loaded, thus the SfxHelp class is not yet available,
- // thus, there is no help during the lifetime of the dialog.
- // To fake this, we explicitly load the necessary services when the user
- // really requests help herein.
- Reference < XInitialization > xOfficeWrapper(
- m_xORB->createInstance(
- OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.office.OfficeWrapper" ) )
- ),
- UNO_QUERY
- );
- if ( xOfficeWrapper.is() )
- xOfficeWrapper->initialize( Sequence < Any >() );
- }
-
- std::auto_ptr<ResMgr> pResMgr (ResMgr::CreateResMgr (
- CREATEVERSIONRESMGR_NAME(productregistration)));
-
- Reference< XFrame > xFrame = lcl_getActiveFrame( m_xORB );
- // execute it
- RegistrationDialog aDialog (
- lcl_getPreferredDialogParent( xFrame ),
- ResId( DLG_REGISTRATION_REQUEST, *pResMgr.get() ),
- lcl_isEvalVersion( m_xORB ) );
- aDialog.Execute();
-
- bool registerOnline = false;
-
- switch ( aDialog.getResponse() )
- {
- case RegistrationDialog::urRegisterNow:
- registerOnline = true;
- break;
-
- case RegistrationDialog::urRegisterLater:
- bDeactivateJob = sal_False;
- // remind again in seven days from now on ...
- aRegOptions.activateReminder( 7 );
- break;
-
- case RegistrationDialog::urRegisterNever:
- case RegistrationDialog::urAlreadyRegistered:
- // never register or already registered
- // -> deactivate the job, and nothing else
- break;
-
- default:
- OSL_FAIL( "OProductRegistration::execute: invalid response from the dialog!" );
- }
-
- // prefer new style registration
- if( ! lcl_doNewStyleRegistration(m_xORB, registerOnline) && registerOnline )
- doOnlineRegistration();
- }
- }
-
- Sequence< NamedValue > aJobResponse( 1 );
- aJobResponse[0].Name = OUString( RTL_CONSTASCII_USTRINGPARAM( "Deactivate" ));
- aJobResponse[0].Value <<= bDeactivateJob;
- aReturn <<= aJobResponse;
- }
-
- return aReturn;
- }
-
- //--------------------------------------------------------------------
- void OProductRegistration::doOnlineRegistration( )
- {
- sal_Bool bSuccess = sal_False;
- try
- {
- // create the Desktop component which can load components
- Reference< XSystemShellExecute > xSystemShell(
- m_xORB->createInstance( OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.system.SystemShellExecute" )) ),
- UNO_QUERY
- );
- OSL_ENSURE( xSystemShell.is(), "OProductRegistration::doOnlineRegistration: invalid SystemExecute component!" );
-
- // access the configuration to retrieve the URL we shall use for registration
- utl::RegOptions aOptions;
- OUString sRegistrationURL( aOptions.getRegistrationURL( ) );
- OSL_ENSURE( sRegistrationURL.getLength(), "OProductRegistration::doOnlineRegistration: invalid URL found!" );
-
- if ( xSystemShell.is() && sRegistrationURL.getLength() )
- {
- xSystemShell->execute( sRegistrationURL, OUString(), SystemShellExecuteFlags::DEFAULTS );
- bSuccess = sal_True;
- }
- }
- catch( const Exception& )
- {
- }
- if ( !bSuccess )
- {
- std::auto_ptr<ResMgr> pResMgr (ResMgr::CreateResMgr (
- CREATEVERSIONRESMGR_NAME(productregistration)));
-
- ErrorBox aRegistrationError(
- Application::GetDefDialogParent(),
- ResId( ERRBOX_REG_NOSYSBROWSER, *pResMgr.get() ));
- aRegistrationError.Execute();
-
- // try again later
- utl::RegOptions aRegOptions;
- aRegOptions.activateReminder( 7 );
- }
- }
-
- //--------------------------------------------------------------------
- OProductRegistration::EventType OProductRegistration::classify( const OUString& _rEventDesc )
- {
- EventType eReturn = etUnknown;
- if ( _rEventDesc.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("RegistrationRequired")) )
- {
- eReturn = etRegistrationRequired;
- }
- return eReturn;
- }
-
-//........................................................................
-} // namespace svt
-//........................................................................
-
-extern "C"
-{
-SAL_DLLPUBLIC_EXPORT void * SAL_CALL productregistration_component_getFactory (
- const sal_Char * pImplementationName, void * pServiceManager, void * /* pRegistryKey */)
-{
- void * pResult = 0;
- if (pServiceManager)
- {
- Reference< XSingleServiceFactory > xFactory;
- if (svt::OProductRegistration::getImplementationName_Static().compareToAscii (pImplementationName) == 0)
- {
- xFactory = cppu::createSingleFactory (
- reinterpret_cast< XMultiServiceFactory* >(pServiceManager),
- svt::OProductRegistration::getImplementationName_Static(),
- svt::OProductRegistration::Create,
- svt::OProductRegistration::getSupportedServiceNames_Static());
- }
- if (xFactory.is())
- {
- xFactory->acquire();
- pResult = xFactory.get();
- }
- }
- return pResult;
-}
-
-} // extern "C"
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */