xref: /aoo4110/main/svx/inc/svx/dbaexchange.hxx (revision b1cdbd2c)
1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski #ifndef _SVX_DBAEXCHANGE_HXX_
25*b1cdbd2cSJim Jagielski #define _SVX_DBAEXCHANGE_HXX_
26*b1cdbd2cSJim Jagielski 
27*b1cdbd2cSJim Jagielski #include <svtools/transfer.hxx>
28*b1cdbd2cSJim Jagielski #include <comphelper/stl_types.hxx>
29*b1cdbd2cSJim Jagielski #include <com/sun/star/beans/XPropertySet.hpp>
30*b1cdbd2cSJim Jagielski #include <com/sun/star/sdbc/XConnection.hpp>
31*b1cdbd2cSJim Jagielski #include <svx/dataaccessdescriptor.hxx>
32*b1cdbd2cSJim Jagielski #include <com/sun/star/uno/Sequence.hxx>
33*b1cdbd2cSJim Jagielski #include "svx/svxdllapi.h"
34*b1cdbd2cSJim Jagielski 
35*b1cdbd2cSJim Jagielski //........................................................................
36*b1cdbd2cSJim Jagielski namespace svx
37*b1cdbd2cSJim Jagielski {
38*b1cdbd2cSJim Jagielski //........................................................................
39*b1cdbd2cSJim Jagielski 
40*b1cdbd2cSJim Jagielski // column transfer formats
41*b1cdbd2cSJim Jagielski #define CTF_FIELD_DESCRIPTOR		0x0001		// the field descriptor format
42*b1cdbd2cSJim Jagielski #define CTF_CONTROL_EXCHANGE		0x0002		// the control exchange format
43*b1cdbd2cSJim Jagielski #define CTF_COLUMN_DESCRIPTOR		0x0004		// data access descriptor for a column
44*b1cdbd2cSJim Jagielski 
45*b1cdbd2cSJim Jagielski 	//====================================================================
46*b1cdbd2cSJim Jagielski 	//= OColumnTransferable
47*b1cdbd2cSJim Jagielski 	//====================================================================
48*b1cdbd2cSJim Jagielski 	class SVX_DLLPUBLIC OColumnTransferable : public TransferableHelper
49*b1cdbd2cSJim Jagielski 	{
50*b1cdbd2cSJim Jagielski 	protected:
51*b1cdbd2cSJim Jagielski 		ODataAccessDescriptor	m_aDescriptor;
52*b1cdbd2cSJim Jagielski 		::rtl::OUString			m_sCompatibleFormat;
53*b1cdbd2cSJim Jagielski 		sal_Int32				m_nFormatFlags;
54*b1cdbd2cSJim Jagielski 
55*b1cdbd2cSJim Jagielski 	public:
56*b1cdbd2cSJim Jagielski 		/** construct the transferable
57*b1cdbd2cSJim Jagielski 		*/
58*b1cdbd2cSJim Jagielski 		OColumnTransferable(
59*b1cdbd2cSJim Jagielski 			 const ::rtl::OUString&	_rDatasource
60*b1cdbd2cSJim Jagielski 			,const ::rtl::OUString& _rConnectionResource
61*b1cdbd2cSJim Jagielski 			,const sal_Int32		_nCommandType
62*b1cdbd2cSJim Jagielski 			,const ::rtl::OUString&	_rCommand
63*b1cdbd2cSJim Jagielski 			,const ::rtl::OUString&	_rFieldName
64*b1cdbd2cSJim Jagielski 			,sal_Int32	_nFormats
65*b1cdbd2cSJim Jagielski 		);
66*b1cdbd2cSJim Jagielski 
67*b1cdbd2cSJim Jagielski 		/** construct the transferable from a data access descriptor
68*b1cdbd2cSJim Jagielski 
69*b1cdbd2cSJim Jagielski             Note that some of the aspects, in particular all which cannot be represented
70*b1cdbd2cSJim Jagielski             as string, can only be transported via the CTF_COLUMN_DESCRIPTOR format.
71*b1cdbd2cSJim Jagielski 
72*b1cdbd2cSJim Jagielski         @param _rDescriptor
73*b1cdbd2cSJim Jagielski             The descriptor for the column. It must contain at least
74*b1cdbd2cSJim Jagielski             <ul><li>information sufficient to create a connection, that is, either one of DataSource, DatabaseLocation,
75*b1cdbd2cSJim Jagielski                     ConnectionResource, and daConnection</li>
76*b1cdbd2cSJim Jagielski                 <li>a Command</li>
77*b1cdbd2cSJim Jagielski                 <li>a CommandType</li>
78*b1cdbd2cSJim Jagielski                 <li>a ColumnName or ColumnObject</li>
79*b1cdbd2cSJim Jagielski             </ul>
80*b1cdbd2cSJim Jagielski 		*/
81*b1cdbd2cSJim Jagielski 		OColumnTransferable(
82*b1cdbd2cSJim Jagielski             const ODataAccessDescriptor& _rDescriptor,
83*b1cdbd2cSJim Jagielski 			sal_Int32                    _nFormats
84*b1cdbd2cSJim Jagielski 		);
85*b1cdbd2cSJim Jagielski 
86*b1cdbd2cSJim Jagielski 		/** construct the transferable from a DatabaseForm component and a field name
87*b1cdbd2cSJim Jagielski 
88*b1cdbd2cSJim Jagielski 			@param _rxForm
89*b1cdbd2cSJim Jagielski 				the form which is bound to the data source which's field is to be dragged
90*b1cdbd2cSJim Jagielski 
91*b1cdbd2cSJim Jagielski 			@param _rFieldName
92*b1cdbd2cSJim Jagielski 				the name of the field to be dragged
93*b1cdbd2cSJim Jagielski 
94*b1cdbd2cSJim Jagielski 			@param _rxColumn
95*b1cdbd2cSJim Jagielski 				the column object. Won't be used if <arg>_nFormats</arg> does not include the CTF_COLUMN_DESCRIPTOR
96*b1cdbd2cSJim Jagielski 				flag.<br/>
97*b1cdbd2cSJim Jagielski 				May be <NULL/>.
98*b1cdbd2cSJim Jagielski 
99*b1cdbd2cSJim Jagielski 			@param _rxConnection
100*b1cdbd2cSJim Jagielski 				the connection the column belongs to. Won't be used if <arg>_nFormats</arg> does not include the CTF_COLUMN_DESCRIPTOR
101*b1cdbd2cSJim Jagielski 				flag.<br/>
102*b1cdbd2cSJim Jagielski 				May be <NULL/>.
103*b1cdbd2cSJim Jagielski 
104*b1cdbd2cSJim Jagielski 			@param _nFormats
105*b1cdbd2cSJim Jagielski 				supported formats. Must be a combination of the CTF_XXX flags
106*b1cdbd2cSJim Jagielski 		*/
107*b1cdbd2cSJim Jagielski 		OColumnTransferable(
108*b1cdbd2cSJim Jagielski 			const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& _rxForm,
109*b1cdbd2cSJim Jagielski 			const ::rtl::OUString& _rFieldName,
110*b1cdbd2cSJim Jagielski 			const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& _rxColumn,
111*b1cdbd2cSJim Jagielski 			const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection >& _rxConnection,
112*b1cdbd2cSJim Jagielski 			sal_Int32	_nFormats
113*b1cdbd2cSJim Jagielski 		);
114*b1cdbd2cSJim Jagielski 
115*b1cdbd2cSJim Jagielski 		/** checks whether or not a column descriptor can be extracted from the data flavor vector given
116*b1cdbd2cSJim Jagielski 			@param _rFlavors
117*b1cdbd2cSJim Jagielski 				available flavors
118*b1cdbd2cSJim Jagielski 			@param _nFormats
119*b1cdbd2cSJim Jagielski 				formats to accept
120*b1cdbd2cSJim Jagielski 		*/
121*b1cdbd2cSJim Jagielski 		static sal_Bool canExtractColumnDescriptor(const DataFlavorExVector& _rFlavors, sal_Int32 _nFormats);
122*b1cdbd2cSJim Jagielski 
123*b1cdbd2cSJim Jagielski 		/** extracts a column descriptor from the transferable given
124*b1cdbd2cSJim Jagielski 		*/
125*b1cdbd2cSJim Jagielski 		static sal_Bool extractColumnDescriptor(
126*b1cdbd2cSJim Jagielski 			 const TransferableDataHelper&	_rData
127*b1cdbd2cSJim Jagielski 			,::rtl::OUString&				_rDatasource
128*b1cdbd2cSJim Jagielski 			,::rtl::OUString&				_rDatabaseLocation
129*b1cdbd2cSJim Jagielski 			,::rtl::OUString&				_rConnectionResource
130*b1cdbd2cSJim Jagielski 			,sal_Int32&						_nCommandType
131*b1cdbd2cSJim Jagielski 			,::rtl::OUString&				_rCommand
132*b1cdbd2cSJim Jagielski 			,::rtl::OUString&				_rFieldName
133*b1cdbd2cSJim Jagielski 		);
134*b1cdbd2cSJim Jagielski 
135*b1cdbd2cSJim Jagielski 		/** extracts a column descriptor from the transferable given
136*b1cdbd2cSJim Jagielski 		*/
137*b1cdbd2cSJim Jagielski 		static ODataAccessDescriptor
138*b1cdbd2cSJim Jagielski 						extractColumnDescriptor(const TransferableDataHelper& _rData);
139*b1cdbd2cSJim Jagielski 
140*b1cdbd2cSJim Jagielski 		/** adds the data contained in the object to the given data container
141*b1cdbd2cSJim Jagielski 			<p>This method helps you treating this class as simple container class:<br/>
142*b1cdbd2cSJim Jagielski 			At the moment, it is a data container and a transferable.
143*b1cdbd2cSJim Jagielski 			Using <method>addDataToContainer</method>, you can treat the class as dumb data container,
144*b1cdbd2cSJim Jagielski 			doing the Drag'n'Drop with a <type>TransferDataContainer</type> instance (which may contain
145*b1cdbd2cSJim Jagielski 			additional formats)</p>
146*b1cdbd2cSJim Jagielski 			@TODO
147*b1cdbd2cSJim Jagielski 				split this class into a two separate classes: one for the data container aspect, one for
148*b1cdbd2cSJim Jagielski 				the transfer aspect
149*b1cdbd2cSJim Jagielski 		*/
150*b1cdbd2cSJim Jagielski 		void addDataToContainer( TransferDataContainer* _pContainer );
151*b1cdbd2cSJim Jagielski 
152*b1cdbd2cSJim Jagielski 	protected:
153*b1cdbd2cSJim Jagielski 		// TransferableHelper overridables
154*b1cdbd2cSJim Jagielski 		virtual void		AddSupportedFormats();
155*b1cdbd2cSJim Jagielski 		virtual sal_Bool	GetData( const ::com::sun::star::datatransfer::DataFlavor& rFlavor );
156*b1cdbd2cSJim Jagielski 
157*b1cdbd2cSJim Jagielski 		static sal_uInt32	getDescriptorFormatId();
158*b1cdbd2cSJim Jagielski 
159*b1cdbd2cSJim Jagielski 	private:
160*b1cdbd2cSJim Jagielski 		SVX_DLLPRIVATE void implConstruct(
161*b1cdbd2cSJim Jagielski 			const ::rtl::OUString&	_rDatasource
162*b1cdbd2cSJim Jagielski 			,const ::rtl::OUString& _rConnectionResource
163*b1cdbd2cSJim Jagielski 			,const sal_Int32		_nCommandType
164*b1cdbd2cSJim Jagielski 			,const ::rtl::OUString&	_rCommand
165*b1cdbd2cSJim Jagielski 			,const ::rtl::OUString&	_rFieldName
166*b1cdbd2cSJim Jagielski 		);
167*b1cdbd2cSJim Jagielski 	};
168*b1cdbd2cSJim Jagielski 
169*b1cdbd2cSJim Jagielski 	//====================================================================
170*b1cdbd2cSJim Jagielski 	//= ODataAccessObjectTransferable
171*b1cdbd2cSJim Jagielski 	//====================================================================
172*b1cdbd2cSJim Jagielski 	/** class for transfering data access objects (tables, queries, statements ...)
173*b1cdbd2cSJim Jagielski 	*/
174*b1cdbd2cSJim Jagielski 	class SVX_DLLPUBLIC ODataAccessObjectTransferable : public TransferableHelper
175*b1cdbd2cSJim Jagielski 	{
176*b1cdbd2cSJim Jagielski 		ODataAccessDescriptor	m_aDescriptor;
177*b1cdbd2cSJim Jagielski 		::rtl::OUString			m_sCompatibleObjectDescription;
178*b1cdbd2cSJim Jagielski 			// needed to provide a SOT_FORMATSTR_ID_SBA_DATAEXCHANGE format
179*b1cdbd2cSJim Jagielski 
180*b1cdbd2cSJim Jagielski 	public:
181*b1cdbd2cSJim Jagielski 		/** should be used copying and the connection is needed.
182*b1cdbd2cSJim Jagielski 			@param	_rDatasource
183*b1cdbd2cSJim Jagielski 				The data source name.
184*b1cdbd2cSJim Jagielski 			@param	_nCommandType
185*b1cdbd2cSJim Jagielski 				The kind of command. @see com.sun.star.sdbc.CommandType
186*b1cdbd2cSJim Jagielski 			@param	_rCommand
187*b1cdbd2cSJim Jagielski 				The command, either a name of a table or query or a SQL statement.
188*b1cdbd2cSJim Jagielski 		*/
189*b1cdbd2cSJim Jagielski 		ODataAccessObjectTransferable(
190*b1cdbd2cSJim Jagielski 			const ::rtl::OUString&	_rDatasourceOrLocation
191*b1cdbd2cSJim Jagielski 			,const ::rtl::OUString& _rConnectionResource
192*b1cdbd2cSJim Jagielski 			,const sal_Int32			_nCommandType
193*b1cdbd2cSJim Jagielski 			,const ::rtl::OUString&	_rCommand
194*b1cdbd2cSJim Jagielski 			,const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection >& _rxConnection
195*b1cdbd2cSJim Jagielski 		);
196*b1cdbd2cSJim Jagielski 
197*b1cdbd2cSJim Jagielski 		/** should be used when copying a query object and no connection is available.
198*b1cdbd2cSJim Jagielski 			@param	_rDatasource
199*b1cdbd2cSJim Jagielski 				The data source name.
200*b1cdbd2cSJim Jagielski 			@param	_nCommandType
201*b1cdbd2cSJim Jagielski 				The kind of command. @see com.sun.star.sdbc.CommandType
202*b1cdbd2cSJim Jagielski 			@param	_rCommand
203*b1cdbd2cSJim Jagielski 				The command, either a name of a table or query or a SQL statement.
204*b1cdbd2cSJim Jagielski 		*/
205*b1cdbd2cSJim Jagielski 		ODataAccessObjectTransferable(
206*b1cdbd2cSJim Jagielski 			const ::rtl::OUString&	_rDatasourceOrLocation
207*b1cdbd2cSJim Jagielski 			,const ::rtl::OUString& _rConnectionResource
208*b1cdbd2cSJim Jagielski 			,const sal_Int32		_nCommandType
209*b1cdbd2cSJim Jagielski 			,const ::rtl::OUString&	_rCommand
210*b1cdbd2cSJim Jagielski 		);
211*b1cdbd2cSJim Jagielski 
212*b1cdbd2cSJim Jagielski 		/** with this ctor, only the object descriptor format will be provided
213*b1cdbd2cSJim Jagielski 		*/
214*b1cdbd2cSJim Jagielski 		ODataAccessObjectTransferable(
215*b1cdbd2cSJim Jagielski 			const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& _rxLivingForm
216*b1cdbd2cSJim Jagielski 		);
217*b1cdbd2cSJim Jagielski 
218*b1cdbd2cSJim Jagielski 		/** checks whether or not an object descriptor can be extracted from the data flavor vector given
219*b1cdbd2cSJim Jagielski 			@param _rFlavors
220*b1cdbd2cSJim Jagielski 				available flavors
221*b1cdbd2cSJim Jagielski 			@param _nFormats
222*b1cdbd2cSJim Jagielski 				formats to accept
223*b1cdbd2cSJim Jagielski 		*/
224*b1cdbd2cSJim Jagielski 		static sal_Bool canExtractObjectDescriptor(const DataFlavorExVector& _rFlavors);
225*b1cdbd2cSJim Jagielski 
226*b1cdbd2cSJim Jagielski 		/** extracts a object descriptor from the transferable given
227*b1cdbd2cSJim Jagielski 		*/
228*b1cdbd2cSJim Jagielski 		static ODataAccessDescriptor
229*b1cdbd2cSJim Jagielski 						extractObjectDescriptor(const TransferableDataHelper& _rData);
230*b1cdbd2cSJim Jagielski 
231*b1cdbd2cSJim Jagielski 	protected:
232*b1cdbd2cSJim Jagielski 		virtual void		AddSupportedFormats();
233*b1cdbd2cSJim Jagielski 		virtual sal_Bool	GetData( const ::com::sun::star::datatransfer::DataFlavor& rFlavor );
234*b1cdbd2cSJim Jagielski 		virtual void		ObjectReleased();
235*b1cdbd2cSJim Jagielski 
236*b1cdbd2cSJim Jagielski 	protected:
getDescriptor() const237*b1cdbd2cSJim Jagielski 		const	ODataAccessDescriptor&	getDescriptor() const	{ return m_aDescriptor; }
getDescriptor()238*b1cdbd2cSJim Jagielski 				ODataAccessDescriptor&	getDescriptor()			{ return m_aDescriptor; }
239*b1cdbd2cSJim Jagielski 	protected:
240*b1cdbd2cSJim Jagielski 		void	addCompatibleSelectionDescription(
241*b1cdbd2cSJim Jagielski 			const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >& _rSelRows
242*b1cdbd2cSJim Jagielski 		);
243*b1cdbd2cSJim Jagielski 			// normally, a derived class could simply access getDescriptor[daSelection] and place the sequence therein
244*b1cdbd2cSJim Jagielski 			// but unfortunately, we have this damned compatible format, and this can't be accessed in
245*b1cdbd2cSJim Jagielski 			// derived classes (our class is the only one which should be contaminated with this)
246*b1cdbd2cSJim Jagielski 
247*b1cdbd2cSJim Jagielski 	private:
248*b1cdbd2cSJim Jagielski 		SVX_DLLPRIVATE void construct(	const ::rtl::OUString&	_rDatasourceOrLocation
249*b1cdbd2cSJim Jagielski 						,const ::rtl::OUString& _rConnectionResource
250*b1cdbd2cSJim Jagielski 						,const sal_Int32		_nCommandType
251*b1cdbd2cSJim Jagielski 						,const ::rtl::OUString&	_rCommand
252*b1cdbd2cSJim Jagielski 						,const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection >& _rxConnection
253*b1cdbd2cSJim Jagielski 						,sal_Bool _bAddCommand
254*b1cdbd2cSJim Jagielski 						,const ::rtl::OUString& _sActiveCommand);
255*b1cdbd2cSJim Jagielski 	};
256*b1cdbd2cSJim Jagielski 
257*b1cdbd2cSJim Jagielski     //====================================================================
258*b1cdbd2cSJim Jagielski 	//= OMultiColumnTransferable
259*b1cdbd2cSJim Jagielski 	//====================================================================
260*b1cdbd2cSJim Jagielski 	/** class for transfering multiple columns
261*b1cdbd2cSJim Jagielski 	*/
262*b1cdbd2cSJim Jagielski 	class SVX_DLLPUBLIC OMultiColumnTransferable : public TransferableHelper
263*b1cdbd2cSJim Jagielski 	{
264*b1cdbd2cSJim Jagielski         ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >	m_aDescriptors;
265*b1cdbd2cSJim Jagielski 
266*b1cdbd2cSJim Jagielski 	public:
267*b1cdbd2cSJim Jagielski         OMultiColumnTransferable(const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& _aDescriptors);
268*b1cdbd2cSJim Jagielski 
269*b1cdbd2cSJim Jagielski         void push_back(ODataAccessDescriptor& _aDescriptor);
270*b1cdbd2cSJim Jagielski 
271*b1cdbd2cSJim Jagielski         /** checks whether or not an object descriptor can be extracted from the data flavor vector given
272*b1cdbd2cSJim Jagielski 			@param _rFlavors
273*b1cdbd2cSJim Jagielski 				available flavors
274*b1cdbd2cSJim Jagielski 			@param _nFormats
275*b1cdbd2cSJim Jagielski 				formats to accept
276*b1cdbd2cSJim Jagielski 		*/
277*b1cdbd2cSJim Jagielski 		static sal_Bool canExtractDescriptor(const DataFlavorExVector& _rFlavors);
278*b1cdbd2cSJim Jagielski 
279*b1cdbd2cSJim Jagielski 		/** extracts a object descriptor from the transferable given
280*b1cdbd2cSJim Jagielski 		*/
281*b1cdbd2cSJim Jagielski 		static ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue > extractDescriptor(const TransferableDataHelper& _rData);
282*b1cdbd2cSJim Jagielski 
283*b1cdbd2cSJim Jagielski 	protected:
284*b1cdbd2cSJim Jagielski 		virtual void		AddSupportedFormats();
285*b1cdbd2cSJim Jagielski 		virtual sal_Bool	GetData( const ::com::sun::star::datatransfer::DataFlavor& rFlavor );
286*b1cdbd2cSJim Jagielski         virtual void        ObjectReleased();
287*b1cdbd2cSJim Jagielski         static sal_uInt32	getDescriptorFormatId();
288*b1cdbd2cSJim Jagielski     };
289*b1cdbd2cSJim Jagielski 
290*b1cdbd2cSJim Jagielski //........................................................................
291*b1cdbd2cSJim Jagielski }	// namespace svx
292*b1cdbd2cSJim Jagielski //........................................................................
293*b1cdbd2cSJim Jagielski 
294*b1cdbd2cSJim Jagielski #endif // _SVX_DBAEXCHANGE_HXX_
295*b1cdbd2cSJim Jagielski 
296