1*caf5cd79SAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 3*caf5cd79SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4*caf5cd79SAndrew Rist * or more contributor license agreements. See the NOTICE file 5*caf5cd79SAndrew Rist * distributed with this work for additional information 6*caf5cd79SAndrew Rist * regarding copyright ownership. The ASF licenses this file 7*caf5cd79SAndrew Rist * to you under the Apache License, Version 2.0 (the 8*caf5cd79SAndrew Rist * "License"); you may not use this file except in compliance 9*caf5cd79SAndrew Rist * with the License. You may obtain a copy of the License at 10*caf5cd79SAndrew Rist * 11*caf5cd79SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12*caf5cd79SAndrew Rist * 13*caf5cd79SAndrew Rist * Unless required by applicable law or agreed to in writing, 14*caf5cd79SAndrew Rist * software distributed under the License is distributed on an 15*caf5cd79SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*caf5cd79SAndrew Rist * KIND, either express or implied. See the License for the 17*caf5cd79SAndrew Rist * specific language governing permissions and limitations 18*caf5cd79SAndrew Rist * under the License. 19*caf5cd79SAndrew Rist * 20*caf5cd79SAndrew Rist *************************************************************/ 21*caf5cd79SAndrew Rist 22*caf5cd79SAndrew Rist 23cdf0e10cSrcweir #ifndef CONNECTIVITY_PARAMETERS_HXX 24cdf0e10cSrcweir #define CONNECTIVITY_PARAMETERS_HXX 25cdf0e10cSrcweir 26cdf0e10cSrcweir #include <map> 27cdf0e10cSrcweir #include <vector> 28cdf0e10cSrcweir 29cdf0e10cSrcweir /** === begin UNO includes === **/ 30cdf0e10cSrcweir #include <com/sun/star/uno/XAggregation.hpp> 31cdf0e10cSrcweir #include <com/sun/star/form/XDatabaseParameterListener.hpp> 32cdf0e10cSrcweir #include <com/sun/star/sdbc/XConnection.hpp> 33cdf0e10cSrcweir #include <com/sun/star/task/XInteractionHandler.hpp> 34cdf0e10cSrcweir #include <com/sun/star/sdbc/XParameters.hpp> 35cdf0e10cSrcweir #include <com/sun/star/lang/XMultiServiceFactory.hpp> 36cdf0e10cSrcweir #include <com/sun/star/container/XIndexAccess.hpp> 37cdf0e10cSrcweir #include <com/sun/star/beans/XPropertySet.hpp> 38cdf0e10cSrcweir #include <com/sun/star/sdb/XSingleSelectQueryComposer.hpp> 39cdf0e10cSrcweir /** === end UNO includes === **/ 40cdf0e10cSrcweir 41cdf0e10cSrcweir #include "connectivity/dbtoolsdllapi.hxx" 42cdf0e10cSrcweir #include "connectivity/paramwrapper.hxx" 43cdf0e10cSrcweir #include <unotools/sharedunocomponent.hxx> 44cdf0e10cSrcweir #include <comphelper/implementationreference.hxx> 45cdf0e10cSrcweir #include <cppuhelper/interfacecontainer.hxx> 46cdf0e10cSrcweir 47cdf0e10cSrcweir //........................................................................ 48cdf0e10cSrcweir namespace dbtools 49cdf0e10cSrcweir { 50cdf0e10cSrcweir //........................................................................ 51cdf0e10cSrcweir 52cdf0e10cSrcweir typedef ::utl::SharedUNOComponent< ::com::sun::star::sdb::XSingleSelectQueryComposer, ::utl::DisposableComponent > 53cdf0e10cSrcweir SharedQueryComposer; 54cdf0e10cSrcweir 55cdf0e10cSrcweir //==================================================================== 56cdf0e10cSrcweir //= ParameterManager 57cdf0e10cSrcweir //==================================================================== 58cdf0e10cSrcweir class FilterManager; 59cdf0e10cSrcweir class OOO_DLLPUBLIC_DBTOOLS ParameterManager 60cdf0e10cSrcweir { 61cdf0e10cSrcweir public: 62cdf0e10cSrcweir /// classifies the origin of the data to fill a parameter 63cdf0e10cSrcweir enum ParameterClassification 64cdf0e10cSrcweir { 65cdf0e10cSrcweir /** parameters which are filled from the master-detail relationship, where the detail 66cdf0e10cSrcweir name is an explicit parameter name 67cdf0e10cSrcweir */ 68cdf0e10cSrcweir eLinkedByParamName, 69cdf0e10cSrcweir /** parameters which are filled from the master-detail relationship, where the detail 70cdf0e10cSrcweir name is a column name, so an implicit parameter had to be generated for it 71cdf0e10cSrcweir */ 72cdf0e10cSrcweir eLinkedByColumnName, 73cdf0e10cSrcweir /** parameters which are filled externally (i.e. by XParamaters::setXXX, or by the parameter listeners) 74cdf0e10cSrcweir */ 75cdf0e10cSrcweir eFilledExternally 76cdf0e10cSrcweir }; 77cdf0e10cSrcweir /** meta data about an inner parameter 78cdf0e10cSrcweir */ 79cdf0e10cSrcweir private: 80cdf0e10cSrcweir struct ParameterMetaData 81cdf0e10cSrcweir { 82cdf0e10cSrcweir /// the type of the parameter 83cdf0e10cSrcweir ParameterClassification eType; 84cdf0e10cSrcweir /// the column object for this parameter, as returned by the query composer 85cdf0e10cSrcweir ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > 86cdf0e10cSrcweir xComposerColumn; 87cdf0e10cSrcweir /// the indicies of inner parameters which need to be filled when this concrete parameter is set 88cdf0e10cSrcweir ::std::vector< sal_Int32 > aInnerIndexes; 89cdf0e10cSrcweir 90cdf0e10cSrcweir /// default ctor 91cdf0e10cSrcweir ParameterMetaData() 92cdf0e10cSrcweir :eType( eFilledExternally ) 93cdf0e10cSrcweir { 94cdf0e10cSrcweir } 95cdf0e10cSrcweir 96cdf0e10cSrcweir /// ctor with composer column 97cdf0e10cSrcweir ParameterMetaData( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& _rxColumn ) 98cdf0e10cSrcweir :eType ( eFilledExternally ) 99cdf0e10cSrcweir ,xComposerColumn ( _rxColumn ) 100cdf0e10cSrcweir { 101cdf0e10cSrcweir } 102cdf0e10cSrcweir }; 103cdf0e10cSrcweir 104cdf0e10cSrcweir typedef ::std::map< ::rtl::OUString, ParameterMetaData > ParameterInformation; 105cdf0e10cSrcweir 106cdf0e10cSrcweir private: 107cdf0e10cSrcweir ::osl::Mutex& m_rMutex; 108cdf0e10cSrcweir ::cppu::OInterfaceContainerHelper m_aParameterListeners; 109cdf0e10cSrcweir 110cdf0e10cSrcweir ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > 111cdf0e10cSrcweir m_xORB; 112cdf0e10cSrcweir 113cdf0e10cSrcweir ::com::sun::star::uno::WeakReference< ::com::sun::star::beans::XPropertySet > 114cdf0e10cSrcweir m_xComponent; // the database component whose parameters we're handling 115cdf0e10cSrcweir ::com::sun::star::uno::Reference< ::com::sun::star::uno::XAggregation > 116cdf0e10cSrcweir m_xAggregatedRowSet; // the aggregated row set - necessary for unwrapped access to some interfaces 117cdf0e10cSrcweir ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XParameters > 118cdf0e10cSrcweir m_xInnerParamUpdate; // write access to the inner parameters 119cdf0e10cSrcweir SharedQueryComposer m_xComposer; // query composer wrapping the statement which the *aggregate* is based on 120cdf0e10cSrcweir SharedQueryComposer m_xParentComposer; // query composer wrapping the statement of our parent database component 121cdf0e10cSrcweir ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexAccess > 122cdf0e10cSrcweir m_xInnerParamColumns; // index access to the parameter columns, as got from the query composer 123cdf0e10cSrcweir 124cdf0e10cSrcweir ::dbtools::param::ParametersContainerRef 125cdf0e10cSrcweir m_pOuterParameters; // the container of parameters which still need to be filled in by 126cdf0e10cSrcweir // external instances 127cdf0e10cSrcweir sal_Int32 m_nInnerCount; // overall number of parameters as required by the database component's aggregate 128cdf0e10cSrcweir 129cdf0e10cSrcweir ParameterInformation m_aParameterInformation; 130cdf0e10cSrcweir 131cdf0e10cSrcweir ::com::sun::star::uno::Sequence< ::rtl::OUString > m_aMasterFields; 132cdf0e10cSrcweir ::com::sun::star::uno::Sequence< ::rtl::OUString > m_aDetailFields; 133cdf0e10cSrcweir 134cdf0e10cSrcweir ::rtl::OUString m_sIdentifierQuoteString; 135cdf0e10cSrcweir ::rtl::OUString m_sSpecialCharacters; 136cdf0e10cSrcweir 137cdf0e10cSrcweir ::std::vector< bool > m_aParametersVisited; 138cdf0e10cSrcweir 139cdf0e10cSrcweir bool m_bUpToDate; 140cdf0e10cSrcweir 141cdf0e10cSrcweir public: 142cdf0e10cSrcweir /** ctor 143cdf0e10cSrcweir */ 144cdf0e10cSrcweir explicit ParameterManager( 145cdf0e10cSrcweir ::osl::Mutex& _rMutex, 146cdf0e10cSrcweir const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rxORB 147cdf0e10cSrcweir ); 148cdf0e10cSrcweir 149cdf0e10cSrcweir /// late ctor 150cdf0e10cSrcweir void initialize( 151cdf0e10cSrcweir const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& _rxComponent, 152cdf0e10cSrcweir const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XAggregation >& _rxComponentAggregate 153cdf0e10cSrcweir ); 154cdf0e10cSrcweir 155cdf0e10cSrcweir /// makes the object forgetting the references to the database component 156cdf0e10cSrcweir void dispose( ); 157cdf0e10cSrcweir 158cdf0e10cSrcweir /// clears the instance data 159cdf0e10cSrcweir void clearAllParameterInformation(); 160cdf0e10cSrcweir 161cdf0e10cSrcweir /// checks whether the parameter information are up-to-date 162cdf0e10cSrcweir inline bool isUpToDate() const { return m_bUpToDate; } 163cdf0e10cSrcweir 164cdf0e10cSrcweir /** updates all parameter information represented by the instance 165cdf0e10cSrcweir */ 166cdf0e10cSrcweir void updateParameterInfo( FilterManager& _rFilterManager ); 167cdf0e10cSrcweir 168cdf0e10cSrcweir /** fills parameter values, as extensive as possible 169cdf0e10cSrcweir 170cdf0e10cSrcweir <p>In particular, all values which can be filled from the master-detail relationship of 171cdf0e10cSrcweir between our database component and it's parent are filled in.</p> 172cdf0e10cSrcweir 173cdf0e10cSrcweir @param _rxCompletionHandler 174cdf0e10cSrcweir an interaction handler which should be used to fill all parameters which 175cdf0e10cSrcweir cannot be filled by other means. May be <NULL/> 176cdf0e10cSrcweir @param _rClearForNotifies 177cdf0e10cSrcweir the mutex guard to be (temporarily) cleared for notifications 178cdf0e10cSrcweir 179cdf0e10cSrcweir @precond 180cdf0e10cSrcweir the instance is alive, i.e. <member>isAlive</member> returns <TRUE/> 181cdf0e10cSrcweir 182cdf0e10cSrcweir @return 183cdf0e10cSrcweir <TRUE/> if and only if the parameter filling has <em>not</em> been cancelled by the user 184cdf0e10cSrcweir */ 185cdf0e10cSrcweir bool fillParameterValues( 186cdf0e10cSrcweir const ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionHandler >& _rxCompletionHandler, 187cdf0e10cSrcweir ::osl::ResettableMutexGuard& _rClearForNotifies 188cdf0e10cSrcweir ); 189cdf0e10cSrcweir 190cdf0e10cSrcweir /** sets all parameter values to null (via <member>XParameters::setNull</member>) 191cdf0e10cSrcweir 192cdf0e10cSrcweir @precond 193cdf0e10cSrcweir the instance is alive, i.e. <member>isAlive</member> returns <TRUE/> 194cdf0e10cSrcweir */ 195cdf0e10cSrcweir void setAllParametersNull() SAL_THROW( ( ::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException ) ); 196cdf0e10cSrcweir 197cdf0e10cSrcweir /** resets all detail columns which are, via a parameter, linked to a master column, to 198cdf0e10cSrcweir the value of this master column. 199cdf0e10cSrcweir 200cdf0e10cSrcweir For instance, if the database component is bound to a statement <code>SELECT * from invoice where inv_id = :cid</code>, 201cdf0e10cSrcweir and there is <em>one</em> master-detail link from 202cdf0e10cSrcweir 203cdf0e10cSrcweir @precond 204cdf0e10cSrcweir the instance is alive, i.e. <member>isAlive</member> returns <TRUE/> 205cdf0e10cSrcweir */ 206cdf0e10cSrcweir void resetParameterValues() SAL_THROW(()); 207cdf0e10cSrcweir 208cdf0e10cSrcweir /** tells the object that it's database component is being disposed 209cdf0e10cSrcweir 210cdf0e10cSrcweir The object then fires the <member>XEventListener::disposing</member> notification to 211cdf0e10cSrcweir the parameter listeners 212cdf0e10cSrcweir */ 213cdf0e10cSrcweir void disposing( const ::com::sun::star::lang::EventObject& _rDisposingEvent ); 214cdf0e10cSrcweir 215cdf0e10cSrcweir /** adds the given listener to the list of parameter listeners 216cdf0e10cSrcweir */ 217cdf0e10cSrcweir void addParameterListener( 218cdf0e10cSrcweir const ::com::sun::star::uno::Reference< ::com::sun::star::form::XDatabaseParameterListener >& _rxListener 219cdf0e10cSrcweir ); 220cdf0e10cSrcweir 221cdf0e10cSrcweir /** removes the given listener from the list of parameter listeners 222cdf0e10cSrcweir */ 223cdf0e10cSrcweir void removeParameterListener( 224cdf0e10cSrcweir const ::com::sun::star::uno::Reference< ::com::sun::star::form::XDatabaseParameterListener >& _rxListener 225cdf0e10cSrcweir ); 226cdf0e10cSrcweir 227cdf0e10cSrcweir // XParameters equivalents 228cdf0e10cSrcweir void setNull ( sal_Int32 _nIndex, sal_Int32 sqlType); 229cdf0e10cSrcweir void setObjectNull ( sal_Int32 _nIndex, sal_Int32 sqlType, const ::rtl::OUString& typeName); 230cdf0e10cSrcweir void setBoolean ( sal_Int32 _nIndex, sal_Bool x); 231cdf0e10cSrcweir void setByte ( sal_Int32 _nIndex, sal_Int8 x); 232cdf0e10cSrcweir void setShort ( sal_Int32 _nIndex, sal_Int16 x); 233cdf0e10cSrcweir void setInt ( sal_Int32 _nIndex, sal_Int32 x); 234cdf0e10cSrcweir void setLong ( sal_Int32 _nIndex, sal_Int64 x); 235cdf0e10cSrcweir void setFloat ( sal_Int32 _nIndex, float x); 236cdf0e10cSrcweir void setDouble ( sal_Int32 _nIndex, double x); 237cdf0e10cSrcweir void setString ( sal_Int32 _nIndex, const ::rtl::OUString& x); 238cdf0e10cSrcweir void setBytes ( sal_Int32 _nIndex, const ::com::sun::star::uno::Sequence< sal_Int8 >& x); 239cdf0e10cSrcweir void setDate ( sal_Int32 _nIndex, const ::com::sun::star::util::Date& x); 240cdf0e10cSrcweir void setTime ( sal_Int32 _nIndex, const ::com::sun::star::util::Time& x); 241cdf0e10cSrcweir void setTimestamp ( sal_Int32 _nIndex, const ::com::sun::star::util::DateTime& x); 242cdf0e10cSrcweir void setBinaryStream ( sal_Int32 _nIndex, const ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream>& x, sal_Int32 length); 243cdf0e10cSrcweir void setCharacterStream ( sal_Int32 _nIndex, const ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream>& x, sal_Int32 length); 244cdf0e10cSrcweir void setObject ( sal_Int32 _nIndex, const ::com::sun::star::uno::Any& x); 245cdf0e10cSrcweir void setObjectWithInfo ( sal_Int32 _nIndex, const ::com::sun::star::uno::Any& x, sal_Int32 targetSqlType, sal_Int32 scale); 246cdf0e10cSrcweir void setRef ( sal_Int32 _nIndex, const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XRef>& x); 247cdf0e10cSrcweir void setBlob ( sal_Int32 _nIndex, const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XBlob>& x); 248cdf0e10cSrcweir void setClob ( sal_Int32 _nIndex, const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XClob>& x); 249cdf0e10cSrcweir void setArray ( sal_Int32 _nIndex, const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XArray>& x); 250cdf0e10cSrcweir void clearParameters(); 251cdf0e10cSrcweir 252cdf0e10cSrcweir private: 253cdf0e10cSrcweir /// checkes whether the object is already initialized, and not yet disposed 254cdf0e10cSrcweir inline bool isAlive() const { return m_xComponent.get().is() && m_xInnerParamUpdate.is(); } 255cdf0e10cSrcweir 256cdf0e10cSrcweir /** creates a filter expression from a master-detail link where the detail denotes a column name 257cdf0e10cSrcweir */ 258cdf0e10cSrcweir ::rtl::OUString 259cdf0e10cSrcweir createFilterConditionFromColumnLink( 260cdf0e10cSrcweir const ::rtl::OUString& /* [in] */ _rMasterColumn, 261cdf0e10cSrcweir const ::rtl::OUString& /* [in] */ _rDetailColumn, 262cdf0e10cSrcweir ::rtl::OUString& /* [out] */ _rNewParamName 263cdf0e10cSrcweir ); 264cdf0e10cSrcweir 265cdf0e10cSrcweir /** initializes our query composer, and the collection of inner parameter columns 266cdf0e10cSrcweir 267cdf0e10cSrcweir @param _rxComponent 268cdf0e10cSrcweir the database component to initialize from. Must not be <NULL/> 269cdf0e10cSrcweir @return 270cdf0e10cSrcweir <TRUE/> if and only if the initialization was successfull 271cdf0e10cSrcweir 272cdf0e10cSrcweir @postcond 273cdf0e10cSrcweir if and only if <TRUE/> is returned, then <member>m_xInnerParamColumns</member> contains the collection of 274cdf0e10cSrcweir inner parameters 275cdf0e10cSrcweir */ 276cdf0e10cSrcweir bool initializeComposerByComponent( 277cdf0e10cSrcweir const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& _rxComponent 278cdf0e10cSrcweir ); 279cdf0e10cSrcweir 280cdf0e10cSrcweir /** collects initial meta information about inner paramaters (i.e. it initially fills 281cdf0e10cSrcweir <member>m_aParameterInformation</member>). 282cdf0e10cSrcweir 283cdf0e10cSrcweir @param _bSecondRun 284cdf0e10cSrcweir if <TRUE/>, this is the second run, because we ourself previously extended the filter of 285cdf0e10cSrcweir the RowSet 286cdf0e10cSrcweir 287cdf0e10cSrcweir @precond 288cdf0e10cSrcweir <member>m_xInnerParamColumns</member> is not <NULL/> 289cdf0e10cSrcweir */ 290cdf0e10cSrcweir void collectInnerParameters( bool _bSecondRun ); 291cdf0e10cSrcweir 292cdf0e10cSrcweir /** analyzes the master-detail links for our database component, and initializes m_aMasterFields and m_aDetailFields 293cdf0e10cSrcweir 294cdf0e10cSrcweir @param _rFilterManager 295cdf0e10cSrcweir the filter manager of the database component 296cdf0e10cSrcweir @param _rColumnsInLinkDetails 297cdf0e10cSrcweir will be set to <TRUE/> if and only if there were link pairs where the detail field denoted 298cdf0e10cSrcweir a column name of our database component 299cdf0e10cSrcweir 300cdf0e10cSrcweir @precond 301cdf0e10cSrcweir the instance is alive, i.e. <member>isAlive</member> returns <TRUE/> 302cdf0e10cSrcweir */ 303cdf0e10cSrcweir void analyzeFieldLinks( FilterManager& _rFilterManager, bool& /* [out] */ _rColumnsInLinkDetails ); 304cdf0e10cSrcweir 305cdf0e10cSrcweir /** classifies the link pairs 306cdf0e10cSrcweir 307cdf0e10cSrcweir @param _rxParentColumns 308cdf0e10cSrcweir the columns of the parent database component 309cdf0e10cSrcweir 310cdf0e10cSrcweir @param _rxColumns 311cdf0e10cSrcweir the columns of our own database component 312cdf0e10cSrcweir 313cdf0e10cSrcweir @param _out_rAdditionalFilterComponents 314cdf0e10cSrcweir the additional filter components which are required for master-detail relationships where 315cdf0e10cSrcweir the detail part denotes a column name. In such a case, an additional filter needs to be created, 316cdf0e10cSrcweir containing a new parameter. 317cdf0e10cSrcweir 318cdf0e10cSrcweir @precond 319cdf0e10cSrcweir <member>m_aMasterFields</member> and <member>m_aDetailFields</member> have the same length 320cdf0e10cSrcweir */ 321cdf0e10cSrcweir void classifyLinks( 322cdf0e10cSrcweir const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess >& _rxParentColumns, 323cdf0e10cSrcweir const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess >& _rxColumns, 324cdf0e10cSrcweir ::std::vector< ::rtl::OUString >& _out_rAdditionalFilterComponents 325cdf0e10cSrcweir ) SAL_THROW(( ::com::sun::star::uno::Exception )); 326cdf0e10cSrcweir 327cdf0e10cSrcweir /** finalizes our <member>m_pOuterParameters</member> so that it can be used for 328cdf0e10cSrcweir external parameter listeners 329cdf0e10cSrcweir 330cdf0e10cSrcweir @precond 331cdf0e10cSrcweir <member>m_pOuterParameters</member> is <NULL/> 332cdf0e10cSrcweir @precond 333cdf0e10cSrcweir <member>m_xInnerParamUpdate</member> is not <NULL/> 334cdf0e10cSrcweir */ 335cdf0e10cSrcweir void createOuterParameters(); 336cdf0e10cSrcweir 337cdf0e10cSrcweir /** fills in the parameters values which result from the master-detail relationship 338cdf0e10cSrcweir between the database component and it's parent 339cdf0e10cSrcweir 340cdf0e10cSrcweir @param _rxParentColumns 341cdf0e10cSrcweir the columns of the parameter database component. Must not be <NULL/> 342cdf0e10cSrcweir @precond 343cdf0e10cSrcweir the instance is alive, i.e. <member>isAlive</member> returns <TRUE/> 344cdf0e10cSrcweir */ 345cdf0e10cSrcweir void fillLinkedParameters( 346cdf0e10cSrcweir const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess >& _rxParentColumns 347cdf0e10cSrcweir ); 348cdf0e10cSrcweir 349cdf0e10cSrcweir /** completes all missing parameters via an interaction handler 350cdf0e10cSrcweir 351cdf0e10cSrcweir @precond 352cdf0e10cSrcweir the instance is alive, i.e. <member>isAlive</member> returns <TRUE/> 353cdf0e10cSrcweir 354cdf0e10cSrcweir @return 355cdf0e10cSrcweir <TRUE/> if and only if the parameter filling has <em>not</em> been cancelled by the user 356cdf0e10cSrcweir */ 357cdf0e10cSrcweir bool completeParameters( 358cdf0e10cSrcweir const ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionHandler >& _rxCompletionHandler, 359cdf0e10cSrcweir const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection > _rxConnection 360cdf0e10cSrcweir ); 361cdf0e10cSrcweir 362cdf0e10cSrcweir /** asks the parameter listeners to fill in final values 363cdf0e10cSrcweir 364cdf0e10cSrcweir @precond 365cdf0e10cSrcweir the instance is alive, i.e. <member>isAlive</member> returns <TRUE/> 366cdf0e10cSrcweir 367cdf0e10cSrcweir @return 368cdf0e10cSrcweir <TRUE/> if and only if the parameter filling has <em>not</em> been cancelled by the user 369cdf0e10cSrcweir */ 370cdf0e10cSrcweir bool consultParameterListeners( ::osl::ResettableMutexGuard& _rClearForNotifies ); 371cdf0e10cSrcweir 372cdf0e10cSrcweir /** mark an externally filled parameter asvisited 373cdf0e10cSrcweir */ 374cdf0e10cSrcweir void externalParameterVisited( sal_Int32 _nIndex ); 375cdf0e10cSrcweir 376cdf0e10cSrcweir private: 377cdf0e10cSrcweir /** retrieves the columns of the parent database component 378cdf0e10cSrcweir 379cdf0e10cSrcweir @precond 380cdf0e10cSrcweir the instance is alive, i.e. <member>isAlive</member> returns <TRUE/> 381cdf0e10cSrcweir @return 382cdf0e10cSrcweir <TRUE/> if and only if the columns could be successfully retrieved 383cdf0e10cSrcweir */ 384cdf0e10cSrcweir bool getParentColumns( 385cdf0e10cSrcweir ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess >& /* [out] */ _out_rxParentColumns, 386cdf0e10cSrcweir bool _bFromComposer 387cdf0e10cSrcweir ); 388cdf0e10cSrcweir 389cdf0e10cSrcweir /** retrieves the columns of our database component 390cdf0e10cSrcweir 391cdf0e10cSrcweir @param _bFromComposer 392cdf0e10cSrcweir if <TRUE/>, the columns are obtained from the composer, else from the living database component itself 393cdf0e10cSrcweir @return 394cdf0e10cSrcweir <TRUE/> if and only if the columns could be successfully retrieved 395cdf0e10cSrcweir */ 396cdf0e10cSrcweir bool getColumns( 397cdf0e10cSrcweir ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess >& /* [out] */ _rxColumns, 398cdf0e10cSrcweir bool _bFromComposer 399cdf0e10cSrcweir ) SAL_THROW(( ::com::sun::star::uno::Exception )); 400cdf0e10cSrcweir 401cdf0e10cSrcweir /** retrieves the active connection of the database component 402cdf0e10cSrcweir */ 403cdf0e10cSrcweir bool getConnection( 404cdf0e10cSrcweir ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection >& /* [out] */ _rxConnection 405cdf0e10cSrcweir ); 406cdf0e10cSrcweir 407cdf0e10cSrcweir /** caches some info about the connection of our database component 408cdf0e10cSrcweir */ 409cdf0e10cSrcweir void cacheConnectionInfo() SAL_THROW(( )); 410cdf0e10cSrcweir 411cdf0e10cSrcweir private: 412cdf0e10cSrcweir ParameterManager(); // never implemented 413cdf0e10cSrcweir ParameterManager( const ParameterManager& ); // never implemented 414cdf0e10cSrcweir ParameterManager& operator=( const ParameterManager& ); // never implemented 415cdf0e10cSrcweir }; 416cdf0e10cSrcweir 417cdf0e10cSrcweir //........................................................................ 418cdf0e10cSrcweir } // namespacefrm 419cdf0e10cSrcweir //........................................................................ 420cdf0e10cSrcweir 421cdf0e10cSrcweir #endif // CONNECTIVITY_PARAMETERS_HXX 422cdf0e10cSrcweir 423