1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ 2 /* 3 * This file is part of the LibreOffice project. 4 * 5 * This Source Code Form is subject to the terms of the Mozilla Public 6 * License, v. 2.0. If a copy of the MPL was not distributed with this 7 * file, You can obtain one at http://mozilla.org/MPL/2.0/. 8 * 9 * This file incorporates work covered by the following license notice: 10 * 11 * Licensed to the Apache Software Foundation (ASF) under one or more 12 * contributor license agreements. See the NOTICE file distributed 13 * with this work for additional information regarding copyright 14 * ownership. The ASF licenses this file to you under the Apache 15 * License, Version 2.0 (the "License"); you may not use this file 16 * except in compliance with the License. You may obtain a copy of 17 * the License at http://www.apache.org/licenses/LICENSE-2.0 . 18 */ 19 #ifndef INCLUDED_DBACCESS_SOURCE_CORE_INC_DATABASEDATAPROVIDER_HXX 20 #define INCLUDED_DBACCESS_SOURCE_CORE_INC_DATABASEDATAPROVIDER_HXX 21 22 #include <sal/config.h> 23 24 #include <com/sun/star/uno/XComponentContext.hpp> 25 #include <com/sun/star/lang/XServiceInfo.hpp> 26 #include <com/sun/star/chart2/data/XDatabaseDataProvider.hpp> 27 #include <com/sun/star/chart2/XInternalDataProvider.hpp> 28 #include <com/sun/star/chart/XComplexDescriptionAccess.hpp> 29 #include <com/sun/star/sdbc/XRowSet.hpp> 30 #include <com/sun/star/sdbc/XParameters.hpp> 31 #include <com/sun/star/container/XChild.hpp> 32 33 #include <cppuhelper/compbase.hxx> 34 #include <cppuhelper/basemutex.hxx> 35 #include <cppuhelper/propertysetmixin.hxx> 36 #include <cppuhelper/implementationentry.hxx> 37 38 #include <connectivity/parameters.hxx> 39 #include <connectivity/filtermanager.hxx> 40 41 42 namespace dbaccess 43 { 44 45 typedef ::cppu::WeakComponentImplHelper< css::chart2::data::XDatabaseDataProvider 46 , css::container::XChild 47 , css::chart::XComplexDescriptionAccess 48 , css::lang::XServiceInfo > TDatabaseDataProvider; 49 50 class DatabaseDataProvider: private ::cppu::BaseMutex, 51 public TDatabaseDataProvider, 52 public ::cppu::PropertySetMixin< css::chart2::data::XDatabaseDataProvider > 53 { 54 public: 55 explicit DatabaseDataProvider(css::uno::Reference< css::uno::XComponentContext > const & context); 56 57 // css::lang::XServiceInfo - static methods 58 /// @throws css::uno::RuntimeException 59 static css::uno::Sequence< OUString > getSupportedServiceNames_Static(); 60 /// @throws css::uno::RuntimeException 61 static OUString getImplementationName_Static(); 62 static css::uno::Reference< css::uno::XInterface > 63 Create(css::uno::Reference< css::uno::XComponentContext > const & context); 64 65 private: 66 // css::uno::XInterface: 67 virtual css::uno::Any SAL_CALL queryInterface(css::uno::Type const & type) override; acquire()68 virtual void SAL_CALL acquire() throw () override 69 { TDatabaseDataProvider::acquire(); } release()70 virtual void SAL_CALL release() throw () override 71 { TDatabaseDataProvider::release(); } 72 73 // css::lang::XServiceInfo 74 virtual OUString SAL_CALL getImplementationName( ) override; 75 virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) override; 76 virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames( ) override; 77 78 // css::chart2::data::XDataProvider: 79 virtual sal_Bool SAL_CALL createDataSourcePossible(const css::uno::Sequence< css::beans::PropertyValue > & aArguments) override; 80 virtual css::uno::Reference< css::chart2::data::XDataSource > SAL_CALL createDataSource(const css::uno::Sequence< css::beans::PropertyValue > & aArguments) override; 81 virtual css::uno::Sequence< css::beans::PropertyValue > SAL_CALL detectArguments(const css::uno::Reference< css::chart2::data::XDataSource > & xDataSource) override; 82 virtual sal_Bool SAL_CALL createDataSequenceByRangeRepresentationPossible(const OUString & aRangeRepresentation) override; 83 virtual css::uno::Reference< css::chart2::data::XDataSequence > SAL_CALL createDataSequenceByRangeRepresentation(const OUString & aRangeRepresentation) override; 84 85 virtual css::uno::Reference<css::chart2::data::XDataSequence> SAL_CALL 86 createDataSequenceByValueArray( 87 const OUString& aRole, const OUString & aRangeRepresentation) override; 88 89 virtual css::uno::Reference< css::sheet::XRangeSelection > SAL_CALL getRangeSelection() override; 90 91 // css::chart2::data::XRangeXMLConversion: 92 virtual OUString SAL_CALL convertRangeToXML(const OUString & aRangeRepresentation) override; 93 virtual OUString SAL_CALL convertRangeFromXML(const OUString & aXMLRange) override; 94 95 // css::lang::XInitialization: 96 virtual void SAL_CALL initialize(const css::uno::Sequence< css::uno::Any > & aArguments) override; 97 98 // css::beans::XPropertySet: 99 virtual css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo() override; 100 virtual void SAL_CALL setPropertyValue(const OUString & aPropertyName, const css::uno::Any & aValue) override; 101 virtual css::uno::Any SAL_CALL getPropertyValue(const OUString & PropertyName) override; 102 virtual void SAL_CALL addPropertyChangeListener(const OUString & aPropertyName, const css::uno::Reference< css::beans::XPropertyChangeListener > & xListener) override; 103 virtual void SAL_CALL removePropertyChangeListener(const OUString & aPropertyName, const css::uno::Reference< css::beans::XPropertyChangeListener > & aListener) override; 104 virtual void SAL_CALL addVetoableChangeListener(const OUString & PropertyName, const css::uno::Reference< css::beans::XVetoableChangeListener > & aListener) override; 105 virtual void SAL_CALL removeVetoableChangeListener(const OUString & PropertyName, const css::uno::Reference< css::beans::XVetoableChangeListener > & aListener) override; 106 107 // css::chart2::data::XDatabaseDataProvider: 108 virtual css::uno::Sequence< OUString > SAL_CALL getMasterFields() override; 109 virtual void SAL_CALL setMasterFields(const css::uno::Sequence< OUString > & the_value) override; 110 virtual css::uno::Sequence< OUString > SAL_CALL getDetailFields() override; 111 virtual void SAL_CALL setDetailFields(const css::uno::Sequence< OUString > & the_value) override; 112 virtual OUString SAL_CALL getCommand() override; 113 virtual void SAL_CALL setCommand(const OUString & the_value) override; 114 virtual ::sal_Int32 SAL_CALL getCommandType() override; 115 virtual void SAL_CALL setCommandType(::sal_Int32 the_value) override; 116 virtual OUString SAL_CALL getFilter() override; 117 virtual void SAL_CALL setFilter(const OUString & the_value) override; 118 virtual sal_Bool SAL_CALL getApplyFilter() override; 119 virtual void SAL_CALL setApplyFilter( sal_Bool _applyfilter ) override; 120 virtual OUString SAL_CALL getHavingClause() override; 121 virtual void SAL_CALL setHavingClause( const OUString& _havingclause ) override; 122 virtual OUString SAL_CALL getGroupBy() override; 123 virtual void SAL_CALL setGroupBy( const OUString& _groupby ) override; 124 virtual OUString SAL_CALL getOrder() override; 125 virtual void SAL_CALL setOrder( const OUString& _order ) override; 126 virtual sal_Bool SAL_CALL getEscapeProcessing() override; 127 virtual void SAL_CALL setEscapeProcessing(sal_Bool the_value) override; 128 virtual ::sal_Int32 SAL_CALL getRowLimit() override; 129 virtual void SAL_CALL setRowLimit( ::sal_Int32 _rowlimit ) override; 130 virtual css::uno::Reference< css::sdbc::XConnection > SAL_CALL getActiveConnection() override; 131 virtual void SAL_CALL setActiveConnection(const css::uno::Reference< css::sdbc::XConnection > & the_value) override; 132 virtual OUString SAL_CALL getDataSourceName() override; 133 virtual void SAL_CALL setDataSourceName( const OUString& _datasourcename ) override; 134 135 // css::sdbc::XParameters 136 virtual void SAL_CALL setNull(sal_Int32 parameterIndex, sal_Int32 sqlType) override; 137 virtual void SAL_CALL setObjectNull(sal_Int32 parameterIndex, sal_Int32 sqlType, const OUString& typeName) override; 138 virtual void SAL_CALL setBoolean(sal_Int32 parameterIndex, sal_Bool x) override; 139 virtual void SAL_CALL setByte(sal_Int32 parameterIndex, sal_Int8 x) override; 140 virtual void SAL_CALL setShort(sal_Int32 parameterIndex, sal_Int16 x) override; 141 virtual void SAL_CALL setInt(sal_Int32 parameterIndex, sal_Int32 x) override; 142 virtual void SAL_CALL setLong(sal_Int32 parameterIndex, sal_Int64 x) override; 143 virtual void SAL_CALL setFloat(sal_Int32 parameterIndex, float x) override; 144 virtual void SAL_CALL setDouble(sal_Int32 parameterIndex, double x) override; 145 virtual void SAL_CALL setString(sal_Int32 parameterIndex, const OUString& x) override; 146 virtual void SAL_CALL setBytes(sal_Int32 parameterIndex, const css::uno::Sequence< sal_Int8 >& x) override; 147 virtual void SAL_CALL setDate(sal_Int32 parameterIndex, const css::util::Date& x) override; 148 virtual void SAL_CALL setTime(sal_Int32 parameterIndex, const css::util::Time& x) override; 149 virtual void SAL_CALL setTimestamp(sal_Int32 parameterIndex, const css::util::DateTime& x) override; 150 virtual void SAL_CALL setBinaryStream(sal_Int32 parameterIndex, const css::uno::Reference< css::io::XInputStream>& x, sal_Int32 length) override; 151 virtual void SAL_CALL setCharacterStream(sal_Int32 parameterIndex, const css::uno::Reference< css::io::XInputStream>& x, sal_Int32 length) override; 152 virtual void SAL_CALL setObject(sal_Int32 parameterIndex, const css::uno::Any& x) override; 153 virtual void SAL_CALL setObjectWithInfo(sal_Int32 parameterIndex, const css::uno::Any& x, sal_Int32 targetSqlType, sal_Int32 scale) override; 154 virtual void SAL_CALL setRef(sal_Int32 parameterIndex, const css::uno::Reference< css::sdbc::XRef>& x) override; 155 virtual void SAL_CALL setBlob(sal_Int32 parameterIndex, const css::uno::Reference< css::sdbc::XBlob>& x) override; 156 virtual void SAL_CALL setClob(sal_Int32 parameterIndex, const css::uno::Reference< css::sdbc::XClob>& x) override; 157 virtual void SAL_CALL setArray(sal_Int32 parameterIndex, const css::uno::Reference< css::sdbc::XArray>& x) override; 158 virtual void SAL_CALL clearParameters() override; 159 160 // css::sdbc::XRowSet 161 virtual void SAL_CALL execute() override; 162 virtual void SAL_CALL addRowSetListener(const css::uno::Reference< css::sdbc::XRowSetListener>& _rxListener) override; 163 virtual void SAL_CALL removeRowSetListener(const css::uno::Reference< css::sdbc::XRowSetListener>& _rxListener) override; 164 165 // css::sdbc::XResultSet 166 virtual sal_Bool SAL_CALL next() override; 167 virtual sal_Bool SAL_CALL isBeforeFirst() override; 168 virtual sal_Bool SAL_CALL isAfterLast() override; 169 virtual sal_Bool SAL_CALL isFirst() override; 170 virtual sal_Bool SAL_CALL isLast() override; 171 virtual void SAL_CALL beforeFirst() override; 172 virtual void SAL_CALL afterLast() override; 173 virtual sal_Bool SAL_CALL first() override; 174 virtual sal_Bool SAL_CALL last() override; 175 virtual sal_Int32 SAL_CALL getRow() override; 176 virtual sal_Bool SAL_CALL absolute(sal_Int32 row) override; 177 virtual sal_Bool SAL_CALL relative(sal_Int32 rows) override; 178 virtual sal_Bool SAL_CALL previous() override; 179 virtual void SAL_CALL refreshRow() override; 180 virtual sal_Bool SAL_CALL rowUpdated() override; 181 virtual sal_Bool SAL_CALL rowInserted() override; 182 virtual sal_Bool SAL_CALL rowDeleted() override; 183 virtual css::uno::Reference< css::uno::XInterface > SAL_CALL getStatement() override; 184 185 // container::XChild 186 virtual css::uno::Reference< css::uno::XInterface > SAL_CALL getParent( ) override; 187 virtual void SAL_CALL setParent( const css::uno::Reference< css::uno::XInterface >& Parent ) override; 188 189 // ____ XComplexDescriptionAccess ____ 190 virtual css::uno::Sequence< css::uno::Sequence< OUString > > SAL_CALL getComplexRowDescriptions() override; 191 virtual void SAL_CALL setComplexRowDescriptions( const css::uno::Sequence< css::uno::Sequence< OUString > >& aRowDescriptions ) override; 192 virtual css::uno::Sequence< css::uno::Sequence< OUString > > SAL_CALL getComplexColumnDescriptions() override; 193 virtual void SAL_CALL setComplexColumnDescriptions( const css::uno::Sequence< css::uno::Sequence< OUString > >& aColumnDescriptions ) override; 194 195 // ____ XChartDataArray (base of XComplexDescriptionAccess) ____ 196 virtual css::uno::Sequence< css::uno::Sequence< double > > SAL_CALL getData() override; 197 virtual void SAL_CALL setData( const css::uno::Sequence< css::uno::Sequence< double > >& aData ) override; 198 virtual css::uno::Sequence< OUString > SAL_CALL getRowDescriptions() override; 199 virtual void SAL_CALL setRowDescriptions( const css::uno::Sequence< OUString >& aRowDescriptions ) override; 200 virtual css::uno::Sequence< OUString > SAL_CALL getColumnDescriptions() override; 201 virtual void SAL_CALL setColumnDescriptions( const css::uno::Sequence< OUString >& aColumnDescriptions ) override; 202 203 // ____ XChartData (base of XChartDataArray) ____ 204 virtual void SAL_CALL addChartDataChangeEventListener(const css::uno::Reference< css::chart::XChartDataChangeEventListener >& aListener ) override; 205 virtual void SAL_CALL removeChartDataChangeEventListener(const css::uno::Reference< css::chart::XChartDataChangeEventListener >& aListener ) override; 206 virtual double SAL_CALL getNotANumber() override; 207 virtual sal_Bool SAL_CALL isNotANumber(double nNumber ) override; 208 private: 209 DatabaseDataProvider(DatabaseDataProvider const &) = delete; 210 DatabaseDataProvider& operator =(DatabaseDataProvider const &) = delete; 211 ~DatabaseDataProvider()212 virtual ~DatabaseDataProvider() override {} 213 214 // This function is called upon disposing the component, 215 // if your component needs special work when it becomes 216 // disposed, do it here. 217 virtual void SAL_CALL disposing() override; 218 219 void impl_fillRowSet_throw(); 220 bool impl_fillParameters_nothrow( ::osl::ResettableMutexGuard& _rClearForNotifies); 221 void impl_fillInternalDataProvider_throw(bool _bHasCategories,const css::uno::Sequence< OUString >& i_aColumnNames); 222 void impl_invalidateParameter_nothrow(); 223 css::uno::Any impl_getNumberFormatKey_nothrow(const OUString & _sRangeRepresentation) const; 224 set(const OUString & _sProperty,const T & Value,T & _member)225 template <typename T> void set( const OUString& _sProperty 226 ,const T& Value 227 ,T& _member) 228 { 229 BoundListeners l; 230 { 231 ::osl::MutexGuard aGuard(m_aMutex); 232 if ( _member != Value ) 233 { 234 prepareSet(_sProperty, css::uno::makeAny(_member), css::uno::makeAny(Value), &l); 235 _member = Value; 236 } 237 } 238 l.notify(); 239 } 240 241 ::dbtools::ParameterManager m_aParameterManager; 242 ::dbtools::FilterManager m_aFilterManager; 243 std::map< OUString, css::uno::Any> m_aNumberFormats; 244 245 css::uno::Reference< css::uno::XComponentContext > m_xContext; 246 css::uno::Reference< css::sdbc::XConnection > m_xActiveConnection; 247 css::uno::Reference< css::sdbc::XRowSet > m_xRowSet; 248 css::uno::Reference< css::chart2::XInternalDataProvider > m_xInternal; 249 css::uno::Reference< css::chart::XComplexDescriptionAccess > m_xComplexDescriptionAccess; 250 css::uno::Reference< css::chart2::data::XRangeXMLConversion> m_xRangeConversion; 251 css::uno::Reference< css::task::XInteractionHandler> m_xHandler; 252 // the object doin' most of the work - an SDB-rowset 253 css::uno::Reference< css::uno::XAggregation> m_xAggregate; 254 css::uno::Reference< css::beans::XPropertySet> m_xAggregateSet; 255 css::uno::Reference< css::uno::XInterface> m_xParent; 256 css::uno::Sequence< OUString > m_MasterFields; 257 css::uno::Sequence< OUString > m_DetailFields; 258 259 OUString m_Command; 260 OUString m_DataSourceName; 261 sal_Int32 m_CommandType; 262 sal_Int32 m_RowLimit; 263 OUString m_Filter; 264 OUString m_HavingClause; 265 OUString m_Order; 266 OUString m_GroupBy; 267 bool m_EscapeProcessing; 268 bool m_ApplyFilter; 269 }; 270 271 } // namespace dbaccess 272 273 #endif // INCLUDED_DBACCESS_SOURCE_CORE_INC_DATABASEDATAPROVIDER_HXX 274 275 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ 276