1*cdf0e10cSrcweir /************************************************************************* 2*cdf0e10cSrcweir * 3*cdf0e10cSrcweir * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4*cdf0e10cSrcweir * 5*cdf0e10cSrcweir * Copyright 2000, 2010 Oracle and/or its affiliates. 6*cdf0e10cSrcweir * 7*cdf0e10cSrcweir * OpenOffice.org - a multi-platform office productivity suite 8*cdf0e10cSrcweir * 9*cdf0e10cSrcweir * This file is part of OpenOffice.org. 10*cdf0e10cSrcweir * 11*cdf0e10cSrcweir * OpenOffice.org is free software: you can redistribute it and/or modify 12*cdf0e10cSrcweir * it under the terms of the GNU Lesser General Public License version 3 13*cdf0e10cSrcweir * only, as published by the Free Software Foundation. 14*cdf0e10cSrcweir * 15*cdf0e10cSrcweir * OpenOffice.org is distributed in the hope that it will be useful, 16*cdf0e10cSrcweir * but WITHOUT ANY WARRANTY; without even the implied warranty of 17*cdf0e10cSrcweir * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18*cdf0e10cSrcweir * GNU Lesser General Public License version 3 for more details 19*cdf0e10cSrcweir * (a copy is included in the LICENSE file that accompanied this code). 20*cdf0e10cSrcweir * 21*cdf0e10cSrcweir * You should have received a copy of the GNU Lesser General Public License 22*cdf0e10cSrcweir * version 3 along with OpenOffice.org. If not, see 23*cdf0e10cSrcweir * <http://www.openoffice.org/license.html> 24*cdf0e10cSrcweir * for a copy of the LGPLv3 License. 25*cdf0e10cSrcweir * 26*cdf0e10cSrcweir ************************************************************************/ 27*cdf0e10cSrcweir 28*cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 29*cdf0e10cSrcweir #include "precompiled_connectivity.hxx" 30*cdf0e10cSrcweir 31*cdf0e10cSrcweir 32*cdf0e10cSrcweir #include "connectivity/sdbcx/VKey.hxx" 33*cdf0e10cSrcweir #include <com/sun/star/lang/DisposedException.hpp> 34*cdf0e10cSrcweir #include <com/sun/star/sdbc/KeyRule.hpp> 35*cdf0e10cSrcweir #include <comphelper/sequence.hxx> 36*cdf0e10cSrcweir #include "connectivity/sdbcx/VColumn.hxx" 37*cdf0e10cSrcweir #include "connectivity/sdbcx/VCollection.hxx" 38*cdf0e10cSrcweir #include "TConnection.hxx" 39*cdf0e10cSrcweir // ------------------------------------------------------------------------- 40*cdf0e10cSrcweir using namespace connectivity; 41*cdf0e10cSrcweir using namespace connectivity::sdbcx; 42*cdf0e10cSrcweir using namespace ::com::sun::star::beans; 43*cdf0e10cSrcweir using namespace ::com::sun::star::uno; 44*cdf0e10cSrcweir using namespace ::com::sun::star::sdbc; 45*cdf0e10cSrcweir using namespace ::com::sun::star::sdbcx; 46*cdf0e10cSrcweir using namespace ::com::sun::star::container; 47*cdf0e10cSrcweir using namespace ::com::sun::star::lang; 48*cdf0e10cSrcweir 49*cdf0e10cSrcweir // ----------------------------------------------------------------------------- 50*cdf0e10cSrcweir ::rtl::OUString SAL_CALL OKey::getImplementationName( ) throw (::com::sun::star::uno::RuntimeException) 51*cdf0e10cSrcweir { 52*cdf0e10cSrcweir if(isNew()) 53*cdf0e10cSrcweir return ::rtl::OUString::createFromAscii("com.sun.star.sdbcx.VKeyDescription"); 54*cdf0e10cSrcweir return ::rtl::OUString::createFromAscii("com.sun.star.sdbcx.VKey"); 55*cdf0e10cSrcweir } 56*cdf0e10cSrcweir // ----------------------------------------------------------------------------- 57*cdf0e10cSrcweir ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL OKey::getSupportedServiceNames( ) throw(::com::sun::star::uno::RuntimeException) 58*cdf0e10cSrcweir { 59*cdf0e10cSrcweir ::com::sun::star::uno::Sequence< ::rtl::OUString > aSupported(1); 60*cdf0e10cSrcweir if(isNew()) 61*cdf0e10cSrcweir aSupported[0] = ::rtl::OUString::createFromAscii("com.sun.star.sdbcx.KeyDescription"); 62*cdf0e10cSrcweir else 63*cdf0e10cSrcweir aSupported[0] = ::rtl::OUString::createFromAscii("com.sun.star.sdbcx.Key"); 64*cdf0e10cSrcweir 65*cdf0e10cSrcweir return aSupported; 66*cdf0e10cSrcweir } 67*cdf0e10cSrcweir // ----------------------------------------------------------------------------- 68*cdf0e10cSrcweir sal_Bool SAL_CALL OKey::supportsService( const ::rtl::OUString& _rServiceName ) throw(::com::sun::star::uno::RuntimeException) 69*cdf0e10cSrcweir { 70*cdf0e10cSrcweir Sequence< ::rtl::OUString > aSupported(getSupportedServiceNames()); 71*cdf0e10cSrcweir const ::rtl::OUString* pSupported = aSupported.getConstArray(); 72*cdf0e10cSrcweir const ::rtl::OUString* pEnd = pSupported + aSupported.getLength(); 73*cdf0e10cSrcweir for (;pSupported != pEnd && !pSupported->equals(_rServiceName); ++pSupported) 74*cdf0e10cSrcweir ; 75*cdf0e10cSrcweir 76*cdf0e10cSrcweir return pSupported != pEnd; 77*cdf0e10cSrcweir } 78*cdf0e10cSrcweir // ------------------------------------------------------------------------- 79*cdf0e10cSrcweir OKey::OKey(sal_Bool _bCase) : ODescriptor_BASE(m_aMutex) 80*cdf0e10cSrcweir , ODescriptor(ODescriptor_BASE::rBHelper,_bCase,sal_True) 81*cdf0e10cSrcweir , m_aProps(new KeyProperties()) 82*cdf0e10cSrcweir , m_pColumns(NULL) 83*cdf0e10cSrcweir { 84*cdf0e10cSrcweir } 85*cdf0e10cSrcweir // ------------------------------------------------------------------------- 86*cdf0e10cSrcweir OKey::OKey(const ::rtl::OUString& _Name,const TKeyProperties& _rProps,sal_Bool _bCase) 87*cdf0e10cSrcweir : ODescriptor_BASE(m_aMutex) 88*cdf0e10cSrcweir ,ODescriptor(ODescriptor_BASE::rBHelper,_bCase) 89*cdf0e10cSrcweir ,m_aProps(_rProps) 90*cdf0e10cSrcweir ,m_pColumns(NULL) 91*cdf0e10cSrcweir { 92*cdf0e10cSrcweir m_Name = _Name; 93*cdf0e10cSrcweir } 94*cdf0e10cSrcweir //OKey::OKey( const ::rtl::OUString& _Name, 95*cdf0e10cSrcweir // const ::rtl::OUString& _ReferencedTable, 96*cdf0e10cSrcweir // sal_Int32 _Type, 97*cdf0e10cSrcweir // sal_Int32 _UpdateRule, 98*cdf0e10cSrcweir // sal_Int32 _DeleteRule, 99*cdf0e10cSrcweir // sal_Bool _bCase) : ODescriptor_BASE(m_aMutex) 100*cdf0e10cSrcweir // ,ODescriptor(ODescriptor_BASE::rBHelper,_bCase) 101*cdf0e10cSrcweir // ,m_ReferencedTable(_ReferencedTable) 102*cdf0e10cSrcweir // ,m_Type(_Type) 103*cdf0e10cSrcweir // ,m_UpdateRule(_UpdateRule) 104*cdf0e10cSrcweir // ,m_DeleteRule(_DeleteRule) 105*cdf0e10cSrcweir // ,m_pColumns(NULL) 106*cdf0e10cSrcweir //{ 107*cdf0e10cSrcweir // m_Name = _Name; 108*cdf0e10cSrcweir //} 109*cdf0e10cSrcweir // ------------------------------------------------------------------------- 110*cdf0e10cSrcweir OKey::~OKey( ) 111*cdf0e10cSrcweir { 112*cdf0e10cSrcweir delete m_pColumns; 113*cdf0e10cSrcweir } 114*cdf0e10cSrcweir // ------------------------------------------------------------------------- 115*cdf0e10cSrcweir Any SAL_CALL OKey::queryInterface( const Type & rType ) throw(RuntimeException) 116*cdf0e10cSrcweir { 117*cdf0e10cSrcweir Any aRet = ODescriptor::queryInterface( rType); 118*cdf0e10cSrcweir if(!aRet.hasValue()) 119*cdf0e10cSrcweir { 120*cdf0e10cSrcweir if(!isNew()) 121*cdf0e10cSrcweir aRet = OKey_BASE::queryInterface(rType); 122*cdf0e10cSrcweir if(!aRet.hasValue()) 123*cdf0e10cSrcweir aRet = ODescriptor_BASE::queryInterface( rType); 124*cdf0e10cSrcweir } 125*cdf0e10cSrcweir 126*cdf0e10cSrcweir return aRet; 127*cdf0e10cSrcweir } 128*cdf0e10cSrcweir // ------------------------------------------------------------------------- 129*cdf0e10cSrcweir Sequence< Type > SAL_CALL OKey::getTypes( ) throw(RuntimeException) 130*cdf0e10cSrcweir { 131*cdf0e10cSrcweir if(isNew()) 132*cdf0e10cSrcweir return ::comphelper::concatSequences(ODescriptor::getTypes(),ODescriptor_BASE::getTypes()); 133*cdf0e10cSrcweir 134*cdf0e10cSrcweir return ::comphelper::concatSequences(ODescriptor::getTypes(),ODescriptor_BASE::getTypes(),OKey_BASE::getTypes()); 135*cdf0e10cSrcweir } 136*cdf0e10cSrcweir // ------------------------------------------------------------------------- 137*cdf0e10cSrcweir void OKey::construct() 138*cdf0e10cSrcweir { 139*cdf0e10cSrcweir ODescriptor::construct(); 140*cdf0e10cSrcweir 141*cdf0e10cSrcweir sal_Int32 nAttrib = isNew() ? 0 : PropertyAttribute::READONLY; 142*cdf0e10cSrcweir 143*cdf0e10cSrcweir registerProperty(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_REFERENCEDTABLE), PROPERTY_ID_REFERENCEDTABLE, nAttrib,&m_aProps->m_ReferencedTable, ::getCppuType(reinterpret_cast< ::rtl::OUString*>(NULL))); 144*cdf0e10cSrcweir registerProperty(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_TYPE), PROPERTY_ID_TYPE, nAttrib,&m_aProps->m_Type, ::getCppuType(reinterpret_cast<sal_Int32*>(NULL))); 145*cdf0e10cSrcweir registerProperty(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_UPDATERULE), PROPERTY_ID_UPDATERULE, nAttrib,&m_aProps->m_UpdateRule, ::getCppuType(reinterpret_cast<sal_Int32*>(NULL))); 146*cdf0e10cSrcweir registerProperty(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_DELETERULE), PROPERTY_ID_DELETERULE, nAttrib,&m_aProps->m_DeleteRule, ::getCppuType(reinterpret_cast<sal_Int32*>(NULL))); 147*cdf0e10cSrcweir } 148*cdf0e10cSrcweir // ------------------------------------------------------------------------- 149*cdf0e10cSrcweir void SAL_CALL OKey::disposing() 150*cdf0e10cSrcweir { 151*cdf0e10cSrcweir OPropertySetHelper::disposing(); 152*cdf0e10cSrcweir 153*cdf0e10cSrcweir ::osl::MutexGuard aGuard(m_aMutex); 154*cdf0e10cSrcweir 155*cdf0e10cSrcweir if(m_pColumns) 156*cdf0e10cSrcweir m_pColumns->disposing(); 157*cdf0e10cSrcweir 158*cdf0e10cSrcweir ODescriptor_BASE::disposing(); 159*cdf0e10cSrcweir } 160*cdf0e10cSrcweir // ------------------------------------------------------------------------- 161*cdf0e10cSrcweir ::cppu::IPropertyArrayHelper* OKey::createArrayHelper( sal_Int32 /*_nId*/ ) const 162*cdf0e10cSrcweir { 163*cdf0e10cSrcweir return doCreateArrayHelper(); 164*cdf0e10cSrcweir } 165*cdf0e10cSrcweir // ------------------------------------------------------------------------- 166*cdf0e10cSrcweir ::cppu::IPropertyArrayHelper & OKey::getInfoHelper() 167*cdf0e10cSrcweir { 168*cdf0e10cSrcweir return *const_cast<OKey*>(this)->getArrayHelper(isNew() ? 1 : 0); 169*cdf0e10cSrcweir } 170*cdf0e10cSrcweir // ------------------------------------------------------------------------- 171*cdf0e10cSrcweir Reference< ::com::sun::star::container::XNameAccess > SAL_CALL OKey::getColumns( ) throw(RuntimeException) 172*cdf0e10cSrcweir { 173*cdf0e10cSrcweir ::osl::MutexGuard aGuard(m_aMutex); 174*cdf0e10cSrcweir checkDisposed(ODescriptor_BASE::rBHelper.bDisposed); 175*cdf0e10cSrcweir 176*cdf0e10cSrcweir try 177*cdf0e10cSrcweir { 178*cdf0e10cSrcweir if ( !m_pColumns ) 179*cdf0e10cSrcweir refreshColumns(); 180*cdf0e10cSrcweir } 181*cdf0e10cSrcweir catch( const RuntimeException& ) 182*cdf0e10cSrcweir { 183*cdf0e10cSrcweir // allowed to leave this method 184*cdf0e10cSrcweir throw; 185*cdf0e10cSrcweir } 186*cdf0e10cSrcweir catch( const Exception& ) 187*cdf0e10cSrcweir { 188*cdf0e10cSrcweir // allowed 189*cdf0e10cSrcweir } 190*cdf0e10cSrcweir 191*cdf0e10cSrcweir return const_cast<OKey*>(this)->m_pColumns; 192*cdf0e10cSrcweir } 193*cdf0e10cSrcweir // ------------------------------------------------------------------------- 194*cdf0e10cSrcweir Reference< XPropertySet > SAL_CALL OKey::createDataDescriptor( ) throw(RuntimeException) 195*cdf0e10cSrcweir { 196*cdf0e10cSrcweir ::osl::MutexGuard aGuard(m_aMutex); 197*cdf0e10cSrcweir checkDisposed(ODescriptor_BASE::rBHelper.bDisposed); 198*cdf0e10cSrcweir 199*cdf0e10cSrcweir 200*cdf0e10cSrcweir return this; 201*cdf0e10cSrcweir } 202*cdf0e10cSrcweir // ----------------------------------------------------------------------------- 203*cdf0e10cSrcweir ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo > SAL_CALL OKey::getPropertySetInfo( ) throw(::com::sun::star::uno::RuntimeException) 204*cdf0e10cSrcweir { 205*cdf0e10cSrcweir return ::cppu::OPropertySetHelper::createPropertySetInfo(getInfoHelper()); 206*cdf0e10cSrcweir } 207*cdf0e10cSrcweir // ----------------------------------------------------------------------------- 208*cdf0e10cSrcweir ::rtl::OUString SAL_CALL OKey::getName( ) throw(::com::sun::star::uno::RuntimeException) 209*cdf0e10cSrcweir { 210*cdf0e10cSrcweir return m_Name; 211*cdf0e10cSrcweir } 212*cdf0e10cSrcweir // ----------------------------------------------------------------------------- 213*cdf0e10cSrcweir void SAL_CALL OKey::setName( const ::rtl::OUString& /*aName*/ ) throw(::com::sun::star::uno::RuntimeException) 214*cdf0e10cSrcweir { 215*cdf0e10cSrcweir } 216*cdf0e10cSrcweir // ----------------------------------------------------------------------------- 217*cdf0e10cSrcweir // XInterface 218*cdf0e10cSrcweir void SAL_CALL OKey::acquire() throw() 219*cdf0e10cSrcweir { 220*cdf0e10cSrcweir ODescriptor_BASE::acquire(); 221*cdf0e10cSrcweir } 222*cdf0e10cSrcweir // ----------------------------------------------------------------------------- 223*cdf0e10cSrcweir void SAL_CALL OKey::release() throw() 224*cdf0e10cSrcweir { 225*cdf0e10cSrcweir ODescriptor_BASE::release(); 226*cdf0e10cSrcweir } 227*cdf0e10cSrcweir // ----------------------------------------------------------------------------- 228*cdf0e10cSrcweir 229