1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 24 // MARKER(update_precomp.py): autogen include statement, do not remove 25 #include "precompiled_extensions.hxx" 26 #include "admininvokationimpl.hxx" 27 #include <tools/debug.hxx> 28 #include <com/sun/star/beans/PropertyValue.hpp> 29 #include <com/sun/star/ui/dialogs/XExecutableDialog.hpp> 30 #include <com/sun/star/awt/XWindow.hpp> 31 #include <vcl/stdtext.hxx> 32 #ifndef _TOOLKIT_HELPER_VCLUNOHELPER_HXX_ 33 #include <toolkit/unohlp.hxx> 34 #endif 35 #ifndef EXTENSIONS_ABPRESID_HRC 36 #include "abpresid.hrc" 37 #endif 38 #include "componentmodule.hxx" 39 #include <vcl/waitobj.hxx> 40 41 42 //......................................................................... 43 namespace abp 44 { 45 //......................................................................... 46 47 using namespace ::com::sun::star::uno; 48 using namespace ::com::sun::star::lang; 49 using namespace ::com::sun::star::beans; 50 using namespace ::com::sun::star::awt; 51 using namespace ::com::sun::star::ui::dialogs; 52 53 //===================================================================== 54 //= OAdminDialogInvokation 55 //===================================================================== 56 //--------------------------------------------------------------------- OAdminDialogInvokation(const Reference<XMultiServiceFactory> & _rxORB,const::com::sun::star::uno::Reference<::com::sun::star::beans::XPropertySet> _xDataSource,Window * _pMessageParent)57 OAdminDialogInvokation::OAdminDialogInvokation(const Reference< XMultiServiceFactory >& _rxORB 58 , const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > _xDataSource 59 , Window* _pMessageParent) 60 :m_xORB(_rxORB) 61 ,m_xDataSource(_xDataSource) 62 ,m_pMessageParent(_pMessageParent) 63 { 64 DBG_ASSERT(m_xORB.is(), "OAdminDialogInvokation::OAdminDialogInvokation: invalid service factory!"); 65 DBG_ASSERT(m_xDataSource.is(), "OAdminDialogInvokation::OAdminDialogInvokation: invalid preferred name!"); 66 DBG_ASSERT(m_pMessageParent, "OAdminDialogInvokation::OAdminDialogInvokation: invalid message parent!"); 67 } 68 69 //--------------------------------------------------------------------- invokeAdministration(sal_Bool _bFixedType)70 sal_Bool OAdminDialogInvokation::invokeAdministration( sal_Bool _bFixedType ) 71 { 72 if (!m_xORB.is()) 73 return sal_False; 74 75 try 76 { 77 // the service name of the administration dialog 78 const static ::rtl::OUString s_sAdministrationServiceName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.sdb.DatasourceAdministrationDialog")); 79 const static ::rtl::OUString s_sDataSourceTypeChangeDialog = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.sdb.DataSourceTypeChangeDialog")); 80 81 // the parameters for the call 82 Sequence< Any > aArguments(3); 83 Any* pArguments = aArguments.getArray(); 84 85 // the parent window 86 Reference< XWindow > xDialogParent = VCLUnoHelper::GetInterface(m_pMessageParent); 87 *pArguments++ <<= PropertyValue(::rtl::OUString::createFromAscii("ParentWindow"), -1, makeAny(xDialogParent), PropertyState_DIRECT_VALUE); 88 89 // the title of the dialog 90 String sAdminDialogTitle(ModuleRes(RID_STR_ADMINDIALOGTITLE)); 91 *pArguments++ <<= PropertyValue(::rtl::OUString::createFromAscii("Title"), -1, makeAny(::rtl::OUString(sAdminDialogTitle)), PropertyState_DIRECT_VALUE); 92 93 // the name of the new data source 94 *pArguments++ <<= PropertyValue(::rtl::OUString::createFromAscii("InitialSelection"), -1, makeAny(m_xDataSource), PropertyState_DIRECT_VALUE); 95 96 // create the dialog 97 Reference< XExecutableDialog > xDialog; 98 { 99 // creating the dialog service is potentially expensive (if all the libraries invoked need to be loaded) 100 // so we display a wait cursor 101 WaitObject aWaitCursor(m_pMessageParent); 102 xDialog = Reference< XExecutableDialog >( m_xORB->createInstanceWithArguments( _bFixedType ? s_sAdministrationServiceName : s_sDataSourceTypeChangeDialog, aArguments ), UNO_QUERY ); 103 104 // just for a smoother UI: What the dialog does upon execution, is (amongst other things) creating 105 // the DriverManager service 106 // If this context has never been accessed before, this may be expensive (it includes loading of 107 // at least one library). 108 // As this wizard is intended to run on the first office start, it is very likely that the 109 // context needs to be freshly created 110 // Thus, we access the context here (within the WaitCursor), which means the user sees a waitcursor 111 // while his/her office blocks a few seconds .... 112 m_xORB->createInstance( ::rtl::OUString::createFromAscii( "com.sun.star.sdbc.DriverManager" ) ); 113 } 114 115 if (xDialog.is()) 116 { // execute it 117 if (xDialog->execute()) 118 return sal_True; 119 } 120 else 121 ShowServiceNotAvailableError(m_pMessageParent, s_sAdministrationServiceName, sal_True); 122 } 123 catch(const Exception&) 124 { 125 DBG_ERROR("OAdminDialogInvokation::invokeAdministration: caught an exception while executing the dialog!"); 126 } 127 return sal_False; 128 } 129 130 //......................................................................... 131 } // namespace abp 132 //......................................................................... 133 134