/************************************************************************* * * $RCSfile: UITools.cxx,v $ * * $Revision: 1.4 $ * * last change: $Author: fs $ $Date: 2001-03-15 08:23:44 $ * * The Contents of this file are made available subject to the terms of * either of the following licenses * * - GNU Lesser General Public License Version 2.1 * - Sun Industry Standards Source License Version 1.1 * * Sun Microsystems Inc., October, 2000 * * GNU Lesser General Public License Version 2.1 * ============================================= * Copyright 2000 by Sun Microsystems, Inc. * 901 San Antonio Road, Palo Alto, CA 94303, USA * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License version 2.1, as published by the Free Software Foundation. * * This library 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 for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * MA 02111-1307 USA * * * Sun Industry Standards Source License Version 1.1 * ================================================= * The contents of this file are subject to the Sun Industry Standards * Source License Version 1.1 (the License); You may not use this file * except in compliance with the License. You may obtain a copy of the * License at http://www.openoffice.org/license.html. * * Software provided under this License is provided on an AS IS basis, * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. * See the License for the specific provisions governing your rights and * obligations concerning the Software. * * The Initial Developer of the Original Code is: Sun Microsystems, Inc. * * Copyright: 2000 by Sun Microsystems, Inc. * * All Rights Reserved. * * Contributor(s): _______________________________________ * * ************************************************************************/ #ifndef DBAUI_TOOLS_HXX #include "UITools.hxx" #endif #ifndef DBACCESS_SHARED_DBUSTRINGS_HRC #include "dbustrings.hrc" #endif #ifndef _CONNECTIVITY_DBTOOLS_HXX_ #include #endif #ifndef _COMPHELPER_EXTRACT_HXX_ #include #endif #ifndef _COM_SUN_STAR_SDB_XCOMPLETEDCONNECTION_HPP_ #include #endif #ifndef _COM_SUN_STAR_SDBC_XDATASOURCE_HPP_ #include #endif #ifndef _COM_SUN_STAR_SDB_SQLCONTEXT_HPP_ #include #endif #ifndef _COM_SUN_STAR_SDBCX_XKEYSSUPPLIER_HPP_ #include #endif #ifndef _COM_SUN_STAR_SDBCX_XCOLUMNSSUPPLIER_HPP_ #include #endif #ifndef _COM_SUN_STAR_TASK_XINTERACTIONHANDLER_HPP_ #include #endif #ifndef _COM_SUN_STAR_UI_XEXECUTABLEDIALOG_HPP_ #include #endif #ifndef _COM_SUN_STAR_BEANS_PROPERTYVALUE_HPP_ #include #endif #ifndef _COM_SUN_STAR_CONTAINER_XINDEXACCESS_HPP_ #include #endif #ifndef _TOOLKIT_HELPER_VCLUNOHELPER_HXX_ #include #endif #ifndef _TOOLKIT_AWT_VCLXWINDOW_HXX_ #include #endif #ifndef _VCL_STDTEXT_HXX #include #endif // ......................................................................... namespace dbaui { // ......................................................................... using namespace ::dbtools; using namespace ::com::sun::star::uno; using namespace ::com::sun::star::task; using namespace ::com::sun::star::sdbcx; using namespace ::com::sun::star::sdbc; using namespace ::com::sun::star::sdb; using namespace ::com::sun::star::beans; using namespace ::com::sun::star::container; using namespace ::com::sun::star::lang; using namespace ::com::sun::star::util; using namespace ::com::sun::star::ui; // ----------------------------------------------------------------------------- void composeTableName( const Reference< XDatabaseMetaData >& _rxMetaData, const Reference< XPropertySet >& _rxTable, ::rtl::OUString& _rComposedName, sal_Bool _bQuote) { OSL_ENSURE(_rxTable.is(),"Table can not be null!"); if(_rxTable.is()) { Reference< XPropertySetInfo > xInfo = _rxTable->getPropertySetInfo(); if(xInfo->hasPropertyByName(PROPERTY_CATALOGNAME) && xInfo->hasPropertyByName(PROPERTY_SCHEMANAME) && xInfo->hasPropertyByName(PROPERTY_NAME)) { ::rtl::OUString aCatalog,aSchema,aTable; _rxTable->getPropertyValue(PROPERTY_CATALOGNAME)>>= aCatalog; _rxTable->getPropertyValue(PROPERTY_SCHEMANAME) >>= aSchema; _rxTable->getPropertyValue(PROPERTY_NAME) >>= aTable; ::dbtools::composeTableName(_rxMetaData,aCatalog,aSchema,aTable,_rComposedName,_bQuote); } } } // ----------------------------------------------------------------------------- SQLExceptionInfo createConnection( const ::rtl::OUString& _rsDataSourceName, const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess >& _xDatabaseContext, const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rMF, ::com::sun::star::uno::Reference< ::com::sun::star::lang::XEventListener>& _rEvtLst, ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection>& _rOUTConnection ) { Any aValue; try { aValue = _xDatabaseContext->getByName(_rsDataSourceName); } catch(Exception&) { } SQLExceptionInfo aInfo; Reference xProp; aValue >>= xProp; if (!xProp.is()) { OSL_ENSURE(0,"createConnection: coult not retrieve the data source!"); return aInfo; } ::rtl::OUString sPwd, sUser; sal_Bool bPwdReq = sal_False; try { xProp->getPropertyValue(PROPERTY_PASSWORD) >>= sPwd; bPwdReq = ::cppu::any2bool(xProp->getPropertyValue(PROPERTY_ISPASSWORDREQUIRED)); xProp->getPropertyValue(PROPERTY_USER) >>= sUser; } catch(Exception&) { OSL_ENSURE(0,"createConnection: error while retrieving data source properties!"); } try { if(bPwdReq && !sPwd.getLength()) { // password required, but empty -> connect using an interaction handler Reference xConnectionCompletion(xProp, UNO_QUERY); if (!xConnectionCompletion.is()) { OSL_ENSURE(0,"createConnection: missing an interface ... need an error message here!"); } else { // instantiate the default SDB interaction handler Reference< XInteractionHandler > xHandler(_rMF->createInstance(SERVICE_SDB_INTERACTION_HANDLER), UNO_QUERY); if (!xHandler.is()) { OSL_ASSERT(0); // ShowServiceNotAvailableError(NULL, String(SERVICE_SDB_INTERACTION_HANDLER), sal_True); // TODO: a real parent! } else _rOUTConnection = xConnectionCompletion->connectWithCompletion(xHandler); } } else { Reference xDataSource(xProp,UNO_QUERY); _rOUTConnection = xDataSource->getConnection(sUser, sPwd); } // be notified when connection is in disposing Reference< XComponent > xComponent(_rOUTConnection, UNO_QUERY); if (xComponent.is() && _rEvtLst.is()) xComponent->addEventListener(_rEvtLst); } catch(SQLContext& e) { aInfo = SQLExceptionInfo(e); } catch(SQLWarning& e) { aInfo = SQLExceptionInfo(e); } catch(SQLException& e) { aInfo = SQLExceptionInfo(e); } catch(Exception&) { OSL_ENSURE(0,"SbaTableQueryBrowser::OnExpandEntry: could not connect - unknown exception!"); } // showError(aInfo); return aInfo; } // ----------------------------------------------------------------------------- void showError(const SQLExceptionInfo& _rInfo,Window* _pParent,const Reference< XMultiServiceFactory >& _xFactory) { if (_rInfo.isValid()) { try { Sequence< Any > aArgs(2); aArgs[0] <<= PropertyValue(PROPERTY_SQLEXCEPTION, 0, _rInfo.get(), PropertyState_DIRECT_VALUE); aArgs[1] <<= PropertyValue(PROPERTY_PARENTWINDOW, 0, makeAny(VCLUnoHelper::GetInterface(_pParent)), PropertyState_DIRECT_VALUE); static ::rtl::OUString s_sDialogServiceName = ::rtl::OUString::createFromAscii("com.sun.star.sdb.ErrorMessageDialog"); Reference< XExecutableDialog > xErrorDialog( _xFactory->createInstanceWithArguments(s_sDialogServiceName, aArgs), UNO_QUERY); if (xErrorDialog.is()) xErrorDialog->execute(); else ShowServiceNotAvailableError(_pParent, s_sDialogServiceName, sal_True); } catch(Exception&) { OSL_ENSURE(0,"showError: could not display the error message!"); } } } // ----------------------------------------------------------------------------- ::std::vector< Reference > getKeyColumns(const Reference& _rxTable, sal_Int32 _nKeyType) { // use keys and indexes for excat postioning // first the keys Reference xKeySup(_rxTable,UNO_QUERY); Reference xKeys; if(xKeySup.is()) xKeys = xKeySup->getKeys(); ::std::vector< Reference > vRet; if(xKeys.is()) { Reference xProp; for(sal_Int32 i=0;i< xKeys->getCount();++i) { xKeys->getByIndex(i) >>= xProp; sal_Int32 nKeyType = 0; xProp->getPropertyValue(PROPERTY_TYPE) >>= nKeyType; if(_nKeyType == nKeyType) { Reference xKeyColsSup(xProp,UNO_QUERY); OSL_ENSURE(xKeyColsSup.is(),"Columnsupplier is null!"); vRet.push_back(xKeyColsSup->getColumns()); } } } return vRet; } // ----------------------------------------------------------------------------- // ......................................................................... } // .........................................................................