1 /************************************************************************* 2 * 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * Copyright 2008 by Sun Microsystems, Inc. 6 * 7 * OpenOffice.org - a multi-platform office productivity suite 8 * 9 * $RCSfile: View.cxx,v $ 10 * $Revision: 1.3 $ 11 * 12 * This file is part of OpenOffice.org. 13 * 14 * OpenOffice.org is free software: you can redistribute it and/or modify 15 * it under the terms of the GNU Lesser General Public License version 3 16 * only, as published by the Free Software Foundation. 17 * 18 * OpenOffice.org is distributed in the hope that it will be useful, 19 * but WITHOUT ANY WARRANTY; without even the implied warranty of 20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 21 * GNU Lesser General Public License version 3 for more details 22 * (a copy is included in the LICENSE file that accompanied this code). 23 * 24 * You should have received a copy of the GNU Lesser General Public License 25 * version 3 along with OpenOffice.org. If not, see 26 * <http://www.openoffice.org/license.html> 27 * for a copy of the LGPLv3 License. 28 * 29 ************************************************************************/ 30 31 // MARKER(update_precomp.py): autogen include statement, do not remove 32 #include "precompiled_dbaccess.hxx" 33 34 #include "View.hxx" 35 #include "dbastrings.hrc" 36 37 #include "connectivity/dbexception.hxx" 38 #include "connectivity/dbtools.hxx" 39 40 /** === begin UNO includes === **/ 41 #include <com/sun/star/lang/WrappedTargetException.hpp> 42 #include <com/sun/star/lang/DisposedException.hpp> 43 #include <com/sun/star/sdbc/XRow.hpp> 44 /** === end UNO includes === **/ 45 46 #include <cppuhelper/exc_hlp.hxx> 47 #include <tools/diagnose_ex.h> 48 #include <unotools/sharedunocomponent.hxx> 49 50 //........................................................................ 51 namespace dbaccess 52 { 53 //........................................................................ 54 55 /** === begin UNO using === **/ 56 using namespace ::com::sun::star::uno; 57 using ::com::sun::star::sdbc::XDatabaseMetaData; 58 using ::com::sun::star::sdbc::SQLException; 59 using ::com::sun::star::sdbc::XConnection; 60 using ::com::sun::star::lang::WrappedTargetException; 61 using ::com::sun::star::lang::XMultiServiceFactory; 62 using ::com::sun::star::sdbc::XResultSet; 63 using ::com::sun::star::sdbc::XStatement; 64 using ::com::sun::star::lang::DisposedException; 65 using ::com::sun::star::sdbc::XRow; 66 /** === end UNO using === **/ 67 68 ::rtl::OUString lcl_getServiceNameForSetting(const Reference< ::com::sun::star::sdbc::XConnection >& _xConnection,const ::rtl::OUString& i_sSetting) 69 { 70 ::rtl::OUString sSupportService; 71 Any aValue; 72 if ( dbtools::getDataSourceSetting(_xConnection,i_sSetting,aValue) ) 73 { 74 aValue >>= sSupportService; 75 } 76 return sSupportService; 77 } 78 //==================================================================== 79 //= View 80 //==================================================================== 81 //-------------------------------------------------------------------- 82 View::View( const Reference< XConnection >& _rxConnection, sal_Bool _bCaseSensitive, 83 const ::rtl::OUString& _rCatalogName,const ::rtl::OUString& _rSchemaName, const ::rtl::OUString& _rName ) 84 :View_Base( _bCaseSensitive, _rName, _rxConnection->getMetaData(), 0, ::rtl::OUString(), _rSchemaName, _rCatalogName ) 85 { 86 m_nCommandHandle = getProperty(PROPERTY_COMMAND).Handle; 87 try 88 { 89 Reference<XMultiServiceFactory> xFac(_rxConnection,UNO_QUERY_THROW); 90 static const ::rtl::OUString s_sViewAccess(RTL_CONSTASCII_USTRINGPARAM("ViewAccessServiceName")); 91 m_xViewAccess.set(xFac->createInstance(lcl_getServiceNameForSetting(_rxConnection,s_sViewAccess)),UNO_QUERY); 92 } 93 catch(const Exception& ) 94 { 95 DBG_UNHANDLED_EXCEPTION(); 96 } 97 } 98 99 //-------------------------------------------------------------------- 100 View::~View() 101 { 102 } 103 104 //-------------------------------------------------------------------- 105 IMPLEMENT_FORWARD_REFCOUNT( View, View_Base ) 106 IMPLEMENT_GET_IMPLEMENTATION_ID( View ) 107 // ------------------------------------------------------------------------- 108 Any SAL_CALL View::queryInterface( const Type & _rType ) throw(RuntimeException) 109 { 110 if(_rType == getCppuType( (Reference<XAlterView>*)0) && !m_xViewAccess.is() ) 111 return Any(); 112 Any aReturn = View_Base::queryInterface( _rType ); 113 if ( !aReturn.hasValue() ) 114 aReturn = View_IBASE::queryInterface( _rType ); 115 return aReturn; 116 } 117 // ------------------------------------------------------------------------- 118 Sequence< Type > SAL_CALL View::getTypes( ) throw(RuntimeException) 119 { 120 Type aAlterType = getCppuType( (Reference<XAlterView>*)0); 121 122 Sequence< Type > aTypes( ::comphelper::concatSequences(View_Base::getTypes(),View_IBASE::getTypes()) ); 123 ::std::vector<Type> aOwnTypes; 124 aOwnTypes.reserve(aTypes.getLength()); 125 126 const Type* pIter = aTypes.getConstArray(); 127 const Type* pEnd = pIter + aTypes.getLength(); 128 for(;pIter != pEnd ;++pIter) 129 { 130 if( (*pIter != aAlterType || m_xViewAccess.is()) ) 131 aOwnTypes.push_back(*pIter); 132 } 133 134 Type* pTypes = aOwnTypes.empty() ? 0 : &aOwnTypes[0]; 135 return Sequence< Type >(pTypes, aOwnTypes.size()); 136 } 137 138 //-------------------------------------------------------------------- 139 void SAL_CALL View::alterCommand( const ::rtl::OUString& _rNewCommand ) throw (SQLException, RuntimeException) 140 { 141 OSL_ENSURE(m_xViewAccess.is(),"Illegal call to AlterView!"); 142 m_xViewAccess->alterCommand(this,_rNewCommand); 143 } 144 145 //-------------------------------------------------------------------- 146 void SAL_CALL View::getFastPropertyValue( Any& _rValue, sal_Int32 _nHandle ) const 147 { 148 if ( _nHandle == m_nCommandHandle && m_xViewAccess.is() ) 149 { 150 // retrieve the very current command, don't rely on the base classes cached value 151 // (which we initialized empty, anyway) 152 _rValue <<= m_xViewAccess->getCommand(const_cast<View*>(this)); 153 return; 154 } 155 156 View_Base::getFastPropertyValue( _rValue, _nHandle ); 157 } 158 // ----------------------------------------------------------------------------- 159 //........................................................................ 160 } // namespace dbaccess 161 //........................................................................ 162