1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
3 * This file is part of the LibreOffice project.
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/.
9 * This file incorporates work covered by the following license notice:
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 .
20 #ifndef INCLUDED_SVX_DBAEXCHANGE_HXX
21 #define INCLUDED_SVX_DBAEXCHANGE_HXX
23 #include <sal/config.h>
25 #include <o3tl/typed_flags_set.hxx>
26 #include <vcl/transfer.hxx>
27 #include <com/sun/star/beans/PropertyValue.hpp>
28 #include <svx/dataaccessdescriptor.hxx>
29 #include <com/sun/star/uno/Sequence.hxx>
30 #include <svx/svxdllapi.h>
32 namespace com::sun::star::sdbc
{ class XConnection
; }
33 namespace com::sun::star::beans
{ class XPropertySet
; }
35 // column transfer formats
36 enum class ColumnTransferFormatFlags
38 FIELD_DESCRIPTOR
= 0x01, // the field descriptor format
39 CONTROL_EXCHANGE
= 0x02, // the control exchange format
40 COLUMN_DESCRIPTOR
= 0x04, // data access descriptor for a column
44 template<> struct typed_flags
<ColumnTransferFormatFlags
> : is_typed_flags
<ColumnTransferFormatFlags
, 0x07> {};
52 //= OColumnTransferable
54 class SAL_WARN_UNUSED SVXCORE_DLLPUBLIC OColumnTransferable final
: public TransferDataContainer
57 OColumnTransferable(ColumnTransferFormatFlags nFormats
);
59 /** construct the transferable from a data access descriptor
61 Note that some of the aspects, in particular all which cannot be represented
62 as string, can only be transported via the CTF_COLUMN_DESCRIPTOR format.
65 The descriptor for the column. It must contain at least
66 <ul><li>information sufficient to create a connection, that is, either one of DataSource, DatabaseLocation,
67 ConnectionResource, and DataAccessDescriptorProperty::Connection</li>
69 <li>a CommandType</li>
70 <li>a ColumnName or ColumnObject</li>
73 void setDescriptor(const ODataAccessDescriptor
& rDescriptor
);
76 /** construct the transferable from a DatabaseForm component and a field name
79 the form which is bound to the data source which's field is to be dragged
82 the name of the field to be dragged
85 the column object. Won't be used if <arg>_nFormats</arg> does not include the CTF_COLUMN_DESCRIPTOR
90 the connection the column belongs to. Won't be used if <arg>_nFormats</arg> does not include the CTF_COLUMN_DESCRIPTOR
95 supported formats. Must be a combination of the CTF_XXX flags
98 const css::uno::Reference
< css::beans::XPropertySet
>& _rxForm
,
99 const OUString
& _rFieldName
,
100 const css::uno::Reference
< css::beans::XPropertySet
>& _rxColumn
,
101 const css::uno::Reference
< css::sdbc::XConnection
>& _rxConnection
,
102 ColumnTransferFormatFlags _nFormats
105 /** checks whether or not a column descriptor can be extracted from the data flavor vector given
111 static bool canExtractColumnDescriptor(const DataFlavorExVector
& _rFlavors
, ColumnTransferFormatFlags _nFormats
);
113 /** extracts a column descriptor from the transferable given
115 static bool extractColumnDescriptor(
116 const TransferableDataHelper
& _rData
117 ,OUString
& _rDatasource
118 ,OUString
& _rDatabaseLocation
119 ,OUString
& _rConnectionResource
120 ,sal_Int32
& _nCommandType
122 ,OUString
& _rFieldName
125 /** extracts a column descriptor from the transferable given
127 static ODataAccessDescriptor
128 extractColumnDescriptor(const TransferableDataHelper
& _rData
);
131 // TransferableHelper overridables
132 virtual void AddSupportedFormats() override
;
133 virtual bool GetData( const css::datatransfer::DataFlavor
& rFlavor
, const OUString
& rDestDoc
) override
;
135 static SotClipboardFormatId
getDescriptorFormatId();
137 SVX_DLLPRIVATE
void implConstruct(
138 const OUString
& _rDatasource
139 ,const OUString
& _rConnectionResource
140 ,const sal_Int32 _nCommandType
141 ,const OUString
& _rCommand
142 ,const OUString
& _rFieldName
145 ODataAccessDescriptor m_aDescriptor
;
146 OUString m_sCompatibleFormat
;
147 ColumnTransferFormatFlags m_nFormatFlags
;
151 //= ODataAccessObjectTransferable
153 /** class for transferring data access objects (tables, queries, statements ...)
155 class SAL_WARN_UNUSED SVXCORE_DLLPUBLIC ODataAccessObjectTransferable
: public TransferDataContainer
157 ODataAccessDescriptor m_aDescriptor
;
158 OUString m_sCompatibleObjectDescription
;
159 // needed to provide a SotClipboardFormatId::SBA_DATAEXCHANGE format
162 /** should be used copying and the connection is needed.
164 The data source name.
166 The kind of command. @see com.sun.star.sdbc.CommandType
168 The command, either a name of a table or query or a SQL statement.
171 const OUString
& _rDatasource
,
172 const sal_Int32 _nCommandType
,
173 const OUString
& _rCommand
,
174 const css::uno::Reference
< css::sdbc::XConnection
>& _rxConnection
177 /** should be used when copying a query object and no connection is available.
179 The data source name.
181 The kind of command. @see com.sun.star.sdbc.CommandType
183 The command, either a name of a table or query or a SQL statement.
186 const OUString
& _rDatasource
,
187 const sal_Int32 _nCommandType
,
188 const OUString
& _rCommand
191 /** with this ctor, only the object descriptor format will be provided
193 ODataAccessObjectTransferable(
194 const css::uno::Reference
< css::beans::XPropertySet
>& _rxLivingForm
197 ODataAccessObjectTransferable();
199 /** checks whether or not an object descriptor can be extracted from the data flavor vector given
205 static bool canExtractObjectDescriptor(const DataFlavorExVector
& _rFlavors
);
207 /** extracts an object descriptor from the transferable given
209 static ODataAccessDescriptor
210 extractObjectDescriptor(const TransferableDataHelper
& _rData
);
213 virtual void AddSupportedFormats() override
;
214 virtual bool GetData( const css::datatransfer::DataFlavor
& rFlavor
, const OUString
& rDestDoc
) override
;
215 virtual void ObjectReleased() override
;
218 const ODataAccessDescriptor
& getDescriptor() const { return m_aDescriptor
; }
219 ODataAccessDescriptor
& getDescriptor() { return m_aDescriptor
; }
221 void addCompatibleSelectionDescription(
222 const css::uno::Sequence
< css::uno::Any
>& _rSelRows
224 // normally, a derived class could simply access getDescriptor[DataAccessDescriptorProperty::Selection] and place the sequence therein
225 // but unfortunately, we have this damned compatible format, and this can't be accessed in
226 // derived classes (our class is the only one which should be contaminated with this)
229 SVX_DLLPRIVATE
void construct( const OUString
& _rDatasourceOrLocation
230 ,const OUString
& _rConnectionResource
231 ,const sal_Int32 _nCommandType
232 ,const OUString
& _rCommand
233 ,const css::uno::Reference
< css::sdbc::XConnection
>& _rxConnection
235 ,const OUString
& _sActiveCommand
);
239 //= OMultiColumnTransferable
241 /** class for transferring multiple columns
243 class SAL_WARN_UNUSED SVXCORE_DLLPUBLIC OMultiColumnTransferable final
: public TransferDataContainer
246 OMultiColumnTransferable();
248 void setDescriptors(const css::uno::Sequence
< css::beans::PropertyValue
>& rDescriptors
);
250 /** checks whether or not an object descriptor can be extracted from the data flavor vector given
256 static bool canExtractDescriptor(const DataFlavorExVector
& _rFlavors
);
258 /** extracts an object descriptor from the transferable given
260 static css::uno::Sequence
< css::beans::PropertyValue
> extractDescriptor(const TransferableDataHelper
& _rData
);
263 virtual void AddSupportedFormats() override
;
264 virtual bool GetData( const css::datatransfer::DataFlavor
& rFlavor
, const OUString
& rDestDoc
) override
;
265 virtual void ObjectReleased() override
;
266 static SotClipboardFormatId
getDescriptorFormatId();
268 css::uno::Sequence
< css::beans::PropertyValue
> m_aDescriptors
;
275 #endif // INCLUDED_SVX_DBAEXCHANGE_HXX
277 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */