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