1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 #ifndef _SVX_DATACCESSDESCRIPTOR_HXX_
25 #define _SVX_DATACCESSDESCRIPTOR_HXX_
26 
27 #include <com/sun/star/beans/PropertyValue.hpp>
28 #include <com/sun/star/beans/XPropertySet.hpp>
29 #include "svx/svxdllapi.h"
30 
31 //........................................................................
32 namespace svx
33 {
34 //........................................................................
35 
36 	class ODADescriptorImpl;
37 
38 	//====================================================================
39 	//= DataAccessDescriptorProperty
40 	//====================================================================
41 	enum DataAccessDescriptorProperty
42 	{
43 		daDataSource,			/// data source name			(string)
44 		daDatabaseLocation,		/// database file URL			(string)
45 		daConnectionResource,	/// database driver URL			(string)
46 		daConnection,			/// connection					(XConnection)
47 
48 		daCommand,				/// command						(string)
49 		daCommandType,			/// command type				(long)
50 		daEscapeProcessing,		/// escape processing			(boolean)
51 		daFilter,				/// additional filter			(string)
52 		daCursor,				/// the cursor					(XResultSet)
53 
54 		daColumnName,			/// column name					(string)
55 		daColumnObject,			/// column object				(XPropertySet)
56 
57 		daSelection,			/// selection					(sequence< any >)
58 		daBookmarkSelection,	/// selection are bookmarks?	(boolean)
59 
60 		daComponent				/// component name				(XContent)
61 	};
62 
63 	//====================================================================
64 	//= ODataAccessDescriptor
65 	//====================================================================
66 	/** class encapsulating the <type scope="com::sun::star::sdb">DataAccessDescriptor</type> service.
67 	*/
68 	class SVX_DLLPUBLIC ODataAccessDescriptor
69 	{
70 	protected:
71 		ODADescriptorImpl*		m_pImpl;
72 
73 	public:
74 		ODataAccessDescriptor();
75 		ODataAccessDescriptor( const ODataAccessDescriptor& _rSource );
76 		ODataAccessDescriptor( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& _rValues );
77 		ODataAccessDescriptor( const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& _rValues );
78 
79 		// allows to construct a descriptor from an Any containing either an XPropertySet or a property value sequence
80 		ODataAccessDescriptor( const ::com::sun::star::uno::Any& _rValues );
81 
82 		const ODataAccessDescriptor& operator=(const ODataAccessDescriptor& _rSource);
83 
84 		~ODataAccessDescriptor();
85 
86 		/** returns the descriptor as property set
87 			<p>If you call this method more than once, without writing any values between both calls, the same object
88 			is returned. If you wrote values, a new object is returned.</p>
89 		*/
90 		::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >
91 					createPropertySet();
92 		/** returns the descriptor as property value sequence
93 			<p>If you call this method more than once, without writing any values between both calls, the same object
94 			is returned. If you wrote values, a new object is returned.</p>
95 		*/
96 		::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >
97 					createPropertyValueSequence();
98 
99 		/** returns the descriptor as Any sequence
100 			<p>If you call this method more than once, without writing any values between both calls, the same object
101 			is returned. If you wrote values, a new object is returned.</p>
102 		*/
103 		::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >
104 					createAnySequence();
105 
106 		/** initialized the descriptor from the property set given
107 			<p>If <arg>_bClear</arg> is <TRUE/>, the descriptor will clear all it's current settings before
108 			initializing with the new ones.</p>
109 		*/
110 		void		initializeFrom(
111 						const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& _rxValues,
112 						sal_Bool _bClear = sal_True);
113 
114 		/** initialized the descriptor from the property values given
115 			<p>If <arg>_bClear</arg> is <TRUE/>, the descriptor will clear all it's current settings before
116 			initializing with the new ones.</p>
117 		*/
118 		void		initializeFrom(
119 						const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& _rValues,
120 						sal_Bool _bClear = sal_True);
121 
122 		/// checks whether or not a given property is present in the descriptor
123 		sal_Bool	has(DataAccessDescriptorProperty _eWhich) const;
124 
125 		/** erases the given property from the descriptor
126 		*/
127 		void		erase(DataAccessDescriptorProperty _eWhich);
128 
129 		/** empties the descriptor
130 		*/
131 		void		clear();
132 
133 		/// return the value of a given property
134 		const	::com::sun::star::uno::Any& operator [] ( DataAccessDescriptorProperty _eWhich ) const;
135 
136 		/** return the (modifiable) value of a given property
137 			<p>This operator is not allowed to be called if the descriptor is readonly.</p>
138 		*/
139 				::com::sun::star::uno::Any& operator [] ( DataAccessDescriptorProperty _eWhich );
140 
141 
142 		/** returns either the data source name if given or the database location
143 		*/
144 		::rtl::OUString getDataSource() const;
145 
146 
147 		/** set the data source name, if it is not file URL
148 			@param	_sDataSourceNameOrLocation
149 				the data source name or database location
150 		*/
151 		void setDataSource(const ::rtl::OUString& _sDataSourceNameOrLocation);
152 	};
153 
154 //........................................................................
155 }	// namespace svx
156 //........................................................................
157 
158 #endif // _SVX_DATACCESSDESCRIPTOR_HXX_
159 
160 
161