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#ifndef __com_sun_star_ucb_XDynamicResultSet_idl__
24*b1cdbd2cSJim Jagielski#define __com_sun_star_ucb_XDynamicResultSet_idl__
25*b1cdbd2cSJim Jagielski
26*b1cdbd2cSJim Jagielski#ifndef __com_sun_star_lang_XComponent_idl__
27*b1cdbd2cSJim Jagielski#include <com/sun/star/lang/XComponent.idl>
28*b1cdbd2cSJim Jagielski#endif
29*b1cdbd2cSJim Jagielski
30*b1cdbd2cSJim Jagielski#ifndef __com_sun_star_ucb_XDynamicResultSetListener_idl__
31*b1cdbd2cSJim Jagielski#include <com/sun/star/ucb/XDynamicResultSetListener.idl>
32*b1cdbd2cSJim Jagielski#endif
33*b1cdbd2cSJim Jagielski
34*b1cdbd2cSJim Jagielski#ifndef __com_sun_star_ucb_ListenerAlreadySetException_idl__
35*b1cdbd2cSJim Jagielski#include <com/sun/star/ucb/ListenerAlreadySetException.idl>
36*b1cdbd2cSJim Jagielski#endif
37*b1cdbd2cSJim Jagielski
38*b1cdbd2cSJim Jagielski#ifndef __com_sun_star_sdbc_XResultSet_idl__
39*b1cdbd2cSJim Jagielski#include <com/sun/star/sdbc/XResultSet.idl>
40*b1cdbd2cSJim Jagielski#endif
41*b1cdbd2cSJim Jagielski
42*b1cdbd2cSJim Jagielski#ifndef __com_sun_star_ucb_AlreadyInitializedException_idl__
43*b1cdbd2cSJim Jagielski#include <com/sun/star/ucb/AlreadyInitializedException.idl>
44*b1cdbd2cSJim Jagielski#endif
45*b1cdbd2cSJim Jagielski
46*b1cdbd2cSJim Jagielski#ifndef __com_sun_star_ucb_ServiceNotFoundException_idl__
47*b1cdbd2cSJim Jagielski#include <com/sun/star/ucb/ServiceNotFoundException.idl>
48*b1cdbd2cSJim Jagielski#endif
49*b1cdbd2cSJim Jagielski
50*b1cdbd2cSJim Jagielski//=============================================================================
51*b1cdbd2cSJim Jagielski
52*b1cdbd2cSJim Jagielskimodule com { module sun { module star { module ucb {
53*b1cdbd2cSJim Jagielski
54*b1cdbd2cSJim Jagielski//=============================================================================
55*b1cdbd2cSJim Jagielski/** Provides read access to a <type>ContentResultSet</type>.
56*b1cdbd2cSJim Jagielski
57*b1cdbd2cSJim Jagielski	<p>
58*b1cdbd2cSJim Jagielski	You can either get a simple static <type>ContentResultSet</type> or you can
59*b1cdbd2cSJim Jagielski	listen to change-notifications and than swap from the old to a new
60*b1cdbd2cSJim Jagielski	<type>ContentResultSet</type>.
61*b1cdbd2cSJim Jagielski	</p>
62*b1cdbd2cSJim Jagielski
63*b1cdbd2cSJim Jagielski	<p>The following describes the dynamic use:</p>
64*b1cdbd2cSJim Jagielski
65*b1cdbd2cSJim Jagielski	<p>
66*b1cdbd2cSJim Jagielski	<type>XDynamicResultSet</type> provides the possibility to get notifications
67*b1cdbd2cSJim Jagielski	about changes on a <type>ContentResultSet</type> and have an
68*b1cdbd2cSJim Jagielski	listener-controlled update from one version to the next version. Two
69*b1cdbd2cSJim Jagielski	<type>ContentResultSet</type> implementations were given to the listener in
70*b1cdbd2cSJim Jagielski	the first notification as interface
71*b1cdbd2cSJim Jagielski    <type scope="com::sun::star::sdbc">XResultSet</type>.
72*b1cdbd2cSJim Jagielski	</p>
73*b1cdbd2cSJim Jagielski
74*b1cdbd2cSJim Jagielski	<p>
75*b1cdbd2cSJim Jagielski	To get notifications the listener has to be of type
76*b1cdbd2cSJim Jagielski	<type>XDynamicResultSetListener</type>.
77*b1cdbd2cSJim Jagielski	</p>
78*b1cdbd2cSJim Jagielski
79*b1cdbd2cSJim Jagielski	<p>
80*b1cdbd2cSJim Jagielski	After registration you will get notifications for events of type
81*b1cdbd2cSJim Jagielski	<type>ListEvent</type>.
82*b1cdbd2cSJim Jagielski	</p>
83*b1cdbd2cSJim Jagielski
84*b1cdbd2cSJim Jagielski	<p>
85*b1cdbd2cSJim Jagielski	The calling of <member>XDynamicResultSetListener::notify</member> has
86*b1cdbd2cSJim Jagielski	to happen in an own thread, because it could take a longer time and any
87*b1cdbd2cSJim Jagielski	actions	til the listener returns the call. So don't block the notify-causing
88*b1cdbd2cSJim Jagielski	action.
89*b1cdbd2cSJim Jagielski	</p>
90*b1cdbd2cSJim Jagielski
91*b1cdbd2cSJim Jagielski	<p>
92*b1cdbd2cSJim Jagielski	While one notify-call is going on:
93*b1cdbd2cSJim Jagielski	</p>
94*b1cdbd2cSJim Jagielski
95*b1cdbd2cSJim Jagielski	<ol>
96*b1cdbd2cSJim Jagielski  	<li> The listener is allowed to access both <type>ContentResultSet</type>s,
97*b1cdbd2cSJim Jagielski		 they must be both valid.</li>
98*b1cdbd2cSJim Jagielski  	<li> It is not allowed to start a second notify-call.</li>
99*b1cdbd2cSJim Jagielski  	<li> All addditional things we want to send as notification are to be
100*b1cdbd2cSJim Jagielski	     queued.</li>
101*b1cdbd2cSJim Jagielski  	<li> Any other calls are to be accepted and treated.</li>
102*b1cdbd2cSJim Jagielski	</ol>
103*b1cdbd2cSJim Jagielski
104*b1cdbd2cSJim Jagielski	<p>
105*b1cdbd2cSJim Jagielski	After the listener has returned the notify-call:
106*b1cdbd2cSJim Jagielski	</p>
107*b1cdbd2cSJim Jagielski
108*b1cdbd2cSJim Jagielski	<ol>
109*b1cdbd2cSJim Jagielski	<li> The listener is allowed to access the new
110*b1cdbd2cSJim Jagielski         <type>ContentResultSet</type>. The new one is first assigned in the
111*b1cdbd2cSJim Jagielski         WELCOME-event and than the ResultSets are always swapped.</li>
112*b1cdbd2cSJim Jagielski	<li> The listener is not allowed to access the old
113*b1cdbd2cSJim Jagielski         <type>ContentResultSet</type>.</li>
114*b1cdbd2cSJim Jagielski	</ol>
115*b1cdbd2cSJim Jagielski*/
116*b1cdbd2cSJim Jagielski
117*b1cdbd2cSJim Jagielskipublished interface XDynamicResultSet: com::sun::star::lang::XComponent
118*b1cdbd2cSJim Jagielski{
119*b1cdbd2cSJim Jagielski	//-------------------------------------------------------------------------
120*b1cdbd2cSJim Jagielski	/** Call this, if you don't care about any changes.
121*b1cdbd2cSJim Jagielski
122*b1cdbd2cSJim Jagielski		@returns
123*b1cdbd2cSJim Jagielski		an <type scope="com::sun::star::sdbc">XResultSet</type> that is
124*b1cdbd2cSJim Jagielski        implemented as <type>ContentResultSet</type>. Its content will never
125*b1cdbd2cSJim Jagielski        change.
126*b1cdbd2cSJim Jagielski
127*b1cdbd2cSJim Jagielski		@trows ListenerAlreadySetException
128*b1cdbd2cSJim Jagielski		if someone already has registered as listener via
129*b1cdbd2cSJim Jagielski		<member>XDynamicResultSet::setListener</member>	or if someone has
130*b1cdbd2cSJim Jagielski		established a connection to a <type>CachedDynamicResultSet</type>
131*b1cdbd2cSJim Jagielski		via <member>XDynamicResultSet::connectToCache</member>.
132*b1cdbd2cSJim Jagielski	*/
133*b1cdbd2cSJim Jagielski	com::sun::star::sdbc::XResultSet getStaticResultSet()
134*b1cdbd2cSJim Jagielski		raises( com::sun::star::ucb::ListenerAlreadySetException );
135*b1cdbd2cSJim Jagielski
136*b1cdbd2cSJim Jagielski	//-------------------------------------------------------------------------
137*b1cdbd2cSJim Jagielski	/**	Call this, if you want to get notifications about changes.
138*b1cdbd2cSJim Jagielski
139*b1cdbd2cSJim Jagielski		<p>The implementor has to call
140*b1cdbd2cSJim Jagielski		<member scope="com::sun::star::lang">XComponent::addEventListener</member>
141*b1cdbd2cSJim Jagielski		in this method, so that we can call
142*b1cdbd2cSJim Jagielski		<member scope="com::sun::star::lang">XEventListener::disposing</member>
143*b1cdbd2cSJim Jagielski		at the listener
144*b1cdbd2cSJim Jagielski
145*b1cdbd2cSJim Jagielski		@param Listener
146*b1cdbd2cSJim Jagielski		a listener for resultset notifications
147*b1cdbd2cSJim Jagielski
148*b1cdbd2cSJim Jagielski		@throws ListenerAlreadySetException
149*b1cdbd2cSJim Jagielski		if this method is called more than once during the life of the
150*b1cdbd2cSJim Jagielski		implementation object or if this method is called if someone already
151*b1cdbd2cSJim Jagielski		has	fetched the <type>ContentResultSet</type> via
152*b1cdbd2cSJim Jagielski		<member>XDynamicResultSet::getStaticResultSet</member>.
153*b1cdbd2cSJim Jagielski
154*b1cdbd2cSJim Jagielski	*/
155*b1cdbd2cSJim Jagielski	void setListener( [in] XDynamicResultSetListener Listener )
156*b1cdbd2cSJim Jagielski		raises( com::sun::star::ucb::ListenerAlreadySetException );
157*b1cdbd2cSJim Jagielski
158*b1cdbd2cSJim Jagielski	//-------------------------------------------------------------------------
159*b1cdbd2cSJim Jagielski	/**	Connects this to a <type>CachedDynamicResultSet</type> for optimized
160*b1cdbd2cSJim Jagielski		remote data transport.
161*b1cdbd2cSJim Jagielski
162*b1cdbd2cSJim Jagielski		<p>This method creates a <type>CachedDynamicResultSetStub</type>
163*b1cdbd2cSJim Jagielski		and sets it as Source to the given cache.
164*b1cdbd2cSJim Jagielski
165*b1cdbd2cSJim Jagielski		<p>After this method has returned you can and have to use the given
166*b1cdbd2cSJim Jagielski		result set cache for further access.
167*b1cdbd2cSJim Jagielski
168*b1cdbd2cSJim Jagielski		@param Cache
169*b1cdbd2cSJim Jagielski		has to be an implementation of the service
170*b1cdbd2cSJim Jagielski		<type>CachedDynamicResultSet</type>. In particular it has to support
171*b1cdbd2cSJim Jagielski		the interface <type>XSourceInitialization</type>.
172*b1cdbd2cSJim Jagielski
173*b1cdbd2cSJim Jagielski		@throws ListenerAlreadySetException
174*b1cdbd2cSJim Jagielski		if if someone already has fetched the <type>ContentResultSet</type> via
175*b1cdbd2cSJim Jagielski		<member>XDynamicResultSet::getStaticResultSet</member>.
176*b1cdbd2cSJim Jagielski
177*b1cdbd2cSJim Jagielski		@throws AlreadyInitializedException
178*b1cdbd2cSJim Jagielski		if <var>Cache</var> was already initialized with another source.
179*b1cdbd2cSJim Jagielski
180*b1cdbd2cSJim Jagielski		@throws ServiceNotFoundException
181*b1cdbd2cSJim Jagielski	*/
182*b1cdbd2cSJim Jagielski	void connectToCache( [in] XDynamicResultSet Cache )
183*b1cdbd2cSJim Jagielski		raises( com::sun::star::ucb::ListenerAlreadySetException
184*b1cdbd2cSJim Jagielski				, com::sun::star::ucb::AlreadyInitializedException
185*b1cdbd2cSJim Jagielski				, com::sun::star::ucb::ServiceNotFoundException );
186*b1cdbd2cSJim Jagielski
187*b1cdbd2cSJim Jagielski	//-------------------------------------------------------------------------
188*b1cdbd2cSJim Jagielski	/**	Using this method you can get information, whether the offered
189*b1cdbd2cSJim Jagielski		<type>ContentResultSet</type>s are sorted or filtered etc correctly as
190*b1cdbd2cSJim Jagielski		demanded during the creation of the <type>XDynamicResultSet</type>.
191*b1cdbd2cSJim Jagielski
192*b1cdbd2cSJim Jagielski		@returns
193*b1cdbd2cSJim Jagielski		zero or more constants of the <type>ContentResultSetCapability</type>
194*b1cdbd2cSJim Jagielski		constants group.
195*b1cdbd2cSJim Jagielski	*/
196*b1cdbd2cSJim Jagielski	short getCapabilities();
197*b1cdbd2cSJim Jagielski};
198*b1cdbd2cSJim Jagielski
199*b1cdbd2cSJim Jagielski//=============================================================================
200*b1cdbd2cSJim Jagielski
201*b1cdbd2cSJim Jagielski}; }; }; };
202*b1cdbd2cSJim Jagielski
203*b1cdbd2cSJim Jagielski#endif
204