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 __FRAMEWORK_SERVICES_DETECTORFACTORY_HXX_
25*b1cdbd2cSJim Jagielski #define __FRAMEWORK_SERVICES_DETECTORFACTORY_HXX_
26*b1cdbd2cSJim Jagielski 
27*b1cdbd2cSJim Jagielski //_______________________________________________
28*b1cdbd2cSJim Jagielski // includes of own project
29*b1cdbd2cSJim Jagielski 
30*b1cdbd2cSJim Jagielski #include <classes/filtercache.hxx>
31*b1cdbd2cSJim Jagielski #include <threadhelp/threadhelpbase.hxx>
32*b1cdbd2cSJim Jagielski #include <macros/xinterface.hxx>
33*b1cdbd2cSJim Jagielski #include <macros/xtypeprovider.hxx>
34*b1cdbd2cSJim Jagielski #include <macros/xserviceinfo.hxx>
35*b1cdbd2cSJim Jagielski #include <macros/generic.hxx>
36*b1cdbd2cSJim Jagielski #include <macros/debug.hxx>
37*b1cdbd2cSJim Jagielski #include <general.h>
38*b1cdbd2cSJim Jagielski 
39*b1cdbd2cSJim Jagielski //_______________________________________________
40*b1cdbd2cSJim Jagielski // includes of interfaces
41*b1cdbd2cSJim Jagielski #include <com/sun/star/beans/PropertyValue.hpp>
42*b1cdbd2cSJim Jagielski #include <com/sun/star/lang/XInitialization.hpp>
43*b1cdbd2cSJim Jagielski #include <com/sun/star/lang/WrappedTargetException.hpp>
44*b1cdbd2cSJim Jagielski #include <com/sun/star/lang/IllegalArgumentException.hpp>
45*b1cdbd2cSJim Jagielski #include <com/sun/star/container/ElementExistException.hpp>
46*b1cdbd2cSJim Jagielski #include <com/sun/star/container/NoSuchElementException.hpp>
47*b1cdbd2cSJim Jagielski #include <com/sun/star/container/XNameContainer.hpp>
48*b1cdbd2cSJim Jagielski #include <com/sun/star/container/NoSuchElementException.hpp>
49*b1cdbd2cSJim Jagielski #include <com/sun/star/io/XInputStream.hpp>
50*b1cdbd2cSJim Jagielski #include <com/sun/star/util/XFlushable.hpp>
51*b1cdbd2cSJim Jagielski 
52*b1cdbd2cSJim Jagielski //_______________________________________________
53*b1cdbd2cSJim Jagielski // includes of other projects
54*b1cdbd2cSJim Jagielski #include <cppuhelper/interfacecontainer.hxx>
55*b1cdbd2cSJim Jagielski #include <cppuhelper/weak.hxx>
56*b1cdbd2cSJim Jagielski 
57*b1cdbd2cSJim Jagielski //_______________________________________________
58*b1cdbd2cSJim Jagielski // namespace
59*b1cdbd2cSJim Jagielski 
60*b1cdbd2cSJim Jagielski namespace framework{
61*b1cdbd2cSJim Jagielski 
62*b1cdbd2cSJim Jagielski //_______________________________________________
63*b1cdbd2cSJim Jagielski // exported const
64*b1cdbd2cSJim Jagielski 
65*b1cdbd2cSJim Jagielski //_______________________________________________
66*b1cdbd2cSJim Jagielski // exported definitions
67*b1cdbd2cSJim Jagielski 
68*b1cdbd2cSJim Jagielski /// @HTML
69*b1cdbd2cSJim Jagielski /** @short      factory to create detect service objects and initialize it in the right way.
70*b1cdbd2cSJim Jagielski 
71*b1cdbd2cSJim Jagielski     @descr      This class can be used to create new detect services for specified contents.
72*b1cdbd2cSJim Jagielski                 It uses cached values of the configuration to lay down, which detector match
73*b1cdbd2cSJim Jagielski                 a given name. Further this class provides full access to the configuration data
74*b1cdbd2cSJim Jagielski                 of such detect services and following implementations will support some special
75*b1cdbd2cSJim Jagielski                 query modes.
76*b1cdbd2cSJim Jagielski 
77*b1cdbd2cSJim Jagielski     @author     as96863
78*b1cdbd2cSJim Jagielski 
79*b1cdbd2cSJim Jagielski     @docdate    07.03.2003 by as96863
80*b1cdbd2cSJim Jagielski 
81*b1cdbd2cSJim Jagielski     @todo       <ul>
82*b1cdbd2cSJim Jagielski                     <li>implementation of query mode</li>
83*b1cdbd2cSJim Jagielski                     <li>simple restore mechanism of last consistent cache state,
84*b1cdbd2cSJim Jagielski                         if flush failed</li>
85*b1cdbd2cSJim Jagielski                 </ul>
86*b1cdbd2cSJim Jagielski  */
87*b1cdbd2cSJim Jagielski /// @NOHTML
88*b1cdbd2cSJim Jagielski 
89*b1cdbd2cSJim Jagielski class DetectorFactory : // interfaces
90*b1cdbd2cSJim Jagielski 						public	css::lang::XTypeProvider			,
91*b1cdbd2cSJim Jagielski 						public	css::lang::XServiceInfo				,
92*b1cdbd2cSJim Jagielski 						public	css::lang::XMultiServiceFactory		,
93*b1cdbd2cSJim Jagielski 						public	css::container::XNameContainer		,		// => XNameReplace => XNameAccess => XElementAccess
94*b1cdbd2cSJim Jagielski 						public	css::util::XFlushable				,
95*b1cdbd2cSJim Jagielski 						// base classes
96*b1cdbd2cSJim Jagielski 						// Order is neccessary for right initialization of it!
97*b1cdbd2cSJim Jagielski                         private ThreadHelpBase                      ,
98*b1cdbd2cSJim Jagielski 						public	::cppu::OWeakObject
99*b1cdbd2cSJim Jagielski {
100*b1cdbd2cSJim Jagielski     //-------------------------------------------
101*b1cdbd2cSJim Jagielski     // member
102*b1cdbd2cSJim Jagielski 
103*b1cdbd2cSJim Jagielski     private:
104*b1cdbd2cSJim Jagielski 
105*b1cdbd2cSJim Jagielski         /** reference to the global uno service manager.
106*b1cdbd2cSJim Jagielski             It will be used to create own needed services on demand. */
107*b1cdbd2cSJim Jagielski         css::uno::Reference< css::lang::XMultiServiceFactory > m_xSMGR;
108*b1cdbd2cSJim Jagielski 
109*b1cdbd2cSJim Jagielski         /** singleton, which contains all needed configuration data and provides
110*b1cdbd2cSJim Jagielski             read/write access on it. */
111*b1cdbd2cSJim Jagielski         FilterCache m_aCache;
112*b1cdbd2cSJim Jagielski 
113*b1cdbd2cSJim Jagielski         /** contains all registered listener. */
114*b1cdbd2cSJim Jagielski         ::cppu::OMultiTypeInterfaceContainerHelper m_aListenerContainer;
115*b1cdbd2cSJim Jagielski 
116*b1cdbd2cSJim Jagielski     //-------------------------------------------
117*b1cdbd2cSJim Jagielski     // interface
118*b1cdbd2cSJim Jagielski 
119*b1cdbd2cSJim Jagielski 	public:
120*b1cdbd2cSJim Jagielski 
121*b1cdbd2cSJim Jagielski         //---------------------------------------
122*b1cdbd2cSJim Jagielski         // XInterface, XTypeProvider, XServiceInfo
123*b1cdbd2cSJim Jagielski 
124*b1cdbd2cSJim Jagielski         DECLARE_XINTERFACE
125*b1cdbd2cSJim Jagielski         DECLARE_XTYPEPROVIDER
126*b1cdbd2cSJim Jagielski         DECLARE_XSERVICEINFO
127*b1cdbd2cSJim Jagielski 
128*b1cdbd2cSJim Jagielski         #ifdef ENABLE_AUTODOC_FIX
129*b1cdbd2cSJim Jagielski         ;
130*b1cdbd2cSJim Jagielski         #endif
131*b1cdbd2cSJim Jagielski 
132*b1cdbd2cSJim Jagielski         //---------------------------------------
133*b1cdbd2cSJim Jagielski 
134*b1cdbd2cSJim Jagielski         /** @short  initialize new instance of this class.
135*b1cdbd2cSJim Jagielski 
136*b1cdbd2cSJim Jagielski             @param  xSMGR
137*b1cdbd2cSJim Jagielski                     reference to the global uno service manager, which created this new factory instance.
138*b1cdbd2cSJim Jagielski                     It must be used during runtime to create own needed services.
139*b1cdbd2cSJim Jagielski          */
140*b1cdbd2cSJim Jagielski 
141*b1cdbd2cSJim Jagielski         DetectorFactory( const css::uno::Reference< css::lang::XMultiServiceFactory >& xSMGR );
142*b1cdbd2cSJim Jagielski 
143*b1cdbd2cSJim Jagielski         //---------------------------------------
144*b1cdbd2cSJim Jagielski 
145*b1cdbd2cSJim Jagielski         /** @short  release internal structures.
146*b1cdbd2cSJim Jagielski          */
147*b1cdbd2cSJim Jagielski 
148*b1cdbd2cSJim Jagielski         virtual ~DetectorFactory();
149*b1cdbd2cSJim Jagielski 
150*b1cdbd2cSJim Jagielski         //---------------------------------------
151*b1cdbd2cSJim Jagielski         // XMultiServiceFactory
152*b1cdbd2cSJim Jagielski 
153*b1cdbd2cSJim Jagielski         /** @short  create a new detect service and initialize it with it's own configuration data.
154*b1cdbd2cSJim Jagielski 
155*b1cdbd2cSJim Jagielski             @param  sName
156*b1cdbd2cSJim Jagielski                     means the uno implementation name of a detect service.
157*b1cdbd2cSJim Jagielski 
158*b1cdbd2cSJim Jagielski             @exception  com::sun::star::uno::Exception
159*b1cdbd2cSJim Jagielski                         if the requested service could not be created or initialized.
160*b1cdbd2cSJim Jagielski          */
161*b1cdbd2cSJim Jagielski 
162*b1cdbd2cSJim Jagielski         virtual css::uno::Reference< css::uno::XInterface > SAL_CALL createInstance( const ::rtl::OUString& sName )
163*b1cdbd2cSJim Jagielski             throw(css::uno::Exception       ,
164*b1cdbd2cSJim Jagielski                   css::uno::RuntimeException);
165*b1cdbd2cSJim Jagielski 
166*b1cdbd2cSJim Jagielski         //---------------------------------------
167*b1cdbd2cSJim Jagielski         // XMultiServiceFactory
168*b1cdbd2cSJim Jagielski 
169*b1cdbd2cSJim Jagielski         /** @short  does the same as createInstance() method, but initialize created detect service with some
170*b1cdbd2cSJim Jagielski                     additional data.
171*b1cdbd2cSJim Jagielski 
172*b1cdbd2cSJim Jagielski             @param  sName
173*b1cdbd2cSJim Jagielski                     means the uno implementation name of a detect service.
174*b1cdbd2cSJim Jagielski 
175*b1cdbd2cSJim Jagielski             @param  lArguments
176*b1cdbd2cSJim Jagielski                     the optional arguments, which are passed to the created detect service against
177*b1cdbd2cSJim Jagielski                     it's own configuration data.
178*b1cdbd2cSJim Jagielski 
179*b1cdbd2cSJim Jagielski             @exception  com::sun::star::uno::Exception
180*b1cdbd2cSJim Jagielski                         if the requested service could not be created or initialized.
181*b1cdbd2cSJim Jagielski          */
182*b1cdbd2cSJim Jagielski 
183*b1cdbd2cSJim Jagielski         virtual css::uno::Reference< css::uno::XInterface > SAL_CALL createInstanceWithArguments( const ::rtl::OUString&                     sName      ,
184*b1cdbd2cSJim Jagielski                                                                                                   const css::uno::Sequence< css::uno::Any >& lArguments )
185*b1cdbd2cSJim Jagielski             throw(css::uno::Exception       ,
186*b1cdbd2cSJim Jagielski                   css::uno::RuntimeException);
187*b1cdbd2cSJim Jagielski 
188*b1cdbd2cSJim Jagielski         //---------------------------------------
189*b1cdbd2cSJim Jagielski         // XMultiServiceFactory
190*b1cdbd2cSJim Jagielski 
191*b1cdbd2cSJim Jagielski         /** @short  return list of all well know detect services, which can be created by this factory.
192*b1cdbd2cSJim Jagielski 
193*b1cdbd2cSJim Jagielski             @attention  Because this service implements read/write access to the configuration too,
194*b1cdbd2cSJim Jagielski                         this list is dynamic. Means: in multithreaded environments some items of this
195*b1cdbd2cSJim Jagielski                         return list could be invalid next time!
196*b1cdbd2cSJim Jagielski 
197*b1cdbd2cSJim Jagielski             @return A list of all registered detect services.
198*b1cdbd2cSJim Jagielski          */
199*b1cdbd2cSJim Jagielski 
200*b1cdbd2cSJim Jagielski         virtual css::uno::Sequence< ::rtl::OUString > SAL_CALL getAvailableServiceNames()
201*b1cdbd2cSJim Jagielski             throw(css::uno::RuntimeException);
202*b1cdbd2cSJim Jagielski 
203*b1cdbd2cSJim Jagielski         //---------------------------------------
204*b1cdbd2cSJim Jagielski         // XNameContainer
205*b1cdbd2cSJim Jagielski 
206*b1cdbd2cSJim Jagielski         /** @short  add new detect service entry to this container.
207*b1cdbd2cSJim Jagielski 
208*b1cdbd2cSJim Jagielski             @descr  This will change all internal structures only!
209*b1cdbd2cSJim Jagielski                     Updating of the configuration layer and notify of all registered
210*b1cdbd2cSJim Jagielski                     listener will be done inside API call XFlushable::flush() on this
211*b1cdbd2cSJim Jagielski                     container.
212*b1cdbd2cSJim Jagielski 
213*b1cdbd2cSJim Jagielski             @param  sName
214*b1cdbd2cSJim Jagielski                     means the uno implementation name of this new detect service entry.
215*b1cdbd2cSJim Jagielski 
216*b1cdbd2cSJim Jagielski             @param  aPropertySet [sequence< com::sun::star::beans::PropertyValue >!]
217*b1cdbd2cSJim Jagielski                     describe this new entry. For a list of all supported properties
218*b1cdbd2cSJim Jagielski                     have a look on method >>getByName()<<.
219*b1cdbd2cSJim Jagielski                     Note: Missing values will be created with defaults!
220*b1cdbd2cSJim Jagielski 
221*b1cdbd2cSJim Jagielski             @exception  com::sun::star::lang::IllegalArgumentException
222*b1cdbd2cSJim Jagielski                         if one of the incoming parameters seams to be invalid.
223*b1cdbd2cSJim Jagielski                         That doesn't include the check, if this item already exist!
224*b1cdbd2cSJim Jagielski 
225*b1cdbd2cSJim Jagielski             @exception  com::sun::star::container::ElementExistException
226*b1cdbd2cSJim Jagielski                         if this item already exist inside this container.
227*b1cdbd2cSJim Jagielski 
228*b1cdbd2cSJim Jagielski             @exception  com::sun::star::lang::WrappedTargetException
229*b1cdbd2cSJim Jagielski                         f creation of the internal structures failed.
230*b1cdbd2cSJim Jagielski          */
231*b1cdbd2cSJim Jagielski 
232*b1cdbd2cSJim Jagielski         virtual void SAL_CALL insertByName( const ::rtl::OUString& sName        ,
233*b1cdbd2cSJim Jagielski                                             const css::uno::Any&   aPropertySet )
234*b1cdbd2cSJim Jagielski             throw(css::lang::IllegalArgumentException  ,
235*b1cdbd2cSJim Jagielski                   css::container::ElementExistException,
236*b1cdbd2cSJim Jagielski                   css::lang::WrappedTargetException    ,
237*b1cdbd2cSJim Jagielski                   css::uno::RuntimeException           );
238*b1cdbd2cSJim Jagielski 
239*b1cdbd2cSJim Jagielski         //---------------------------------------
240*b1cdbd2cSJim Jagielski         // XNameContainer
241*b1cdbd2cSJim Jagielski 
242*b1cdbd2cSJim Jagielski         /** @short  remove a detect service entry from this container.
243*b1cdbd2cSJim Jagielski 
244*b1cdbd2cSJim Jagielski             @descr  This will change all internal structures only!
245*b1cdbd2cSJim Jagielski                     Updating of the configuration layer and notify of all registered
246*b1cdbd2cSJim Jagielski                     listener will be done inside API call XFlushable::flush() on this
247*b1cdbd2cSJim Jagielski                     container.
248*b1cdbd2cSJim Jagielski 
249*b1cdbd2cSJim Jagielski             @param  sName
250*b1cdbd2cSJim Jagielski                     means the uno implementation name of a detect service entry.
251*b1cdbd2cSJim Jagielski 
252*b1cdbd2cSJim Jagielski             @exception  com::sun::star::container::NoSuchElementException
253*b1cdbd2cSJim Jagielski                         if the requested item does not exist inside this container.
254*b1cdbd2cSJim Jagielski 
255*b1cdbd2cSJim Jagielski             @exception  com::sun::star::lang::WrappedTargetException
256*b1cdbd2cSJim Jagielski                         if creation of the internal structures failed.
257*b1cdbd2cSJim Jagielski          */
258*b1cdbd2cSJim Jagielski 
259*b1cdbd2cSJim Jagielski         virtual void SAL_CALL removeByName( const ::rtl::OUString& sName )
260*b1cdbd2cSJim Jagielski             throw(css::container::NoSuchElementException,
261*b1cdbd2cSJim Jagielski                   css::lang::WrappedTargetException     ,
262*b1cdbd2cSJim Jagielski                   css::uno::RuntimeException            );
263*b1cdbd2cSJim Jagielski 
264*b1cdbd2cSJim Jagielski         //---------------------------------------
265*b1cdbd2cSJim Jagielski         // XNameReplace
266*b1cdbd2cSJim Jagielski 
267*b1cdbd2cSJim Jagielski         /** @short  change a detect service entry inside this container.
268*b1cdbd2cSJim Jagielski 
269*b1cdbd2cSJim Jagielski             @descr  This will change all internal structures only!
270*b1cdbd2cSJim Jagielski                     Updating of the configuration layer and notify of all registered
271*b1cdbd2cSJim Jagielski                     listener will be done inside API call XFlushable::flush() on this
272*b1cdbd2cSJim Jagielski                     container.
273*b1cdbd2cSJim Jagielski 
274*b1cdbd2cSJim Jagielski             @param  sName
275*b1cdbd2cSJim Jagielski                     means the uno implementation name of a detect service entry.
276*b1cdbd2cSJim Jagielski 
277*b1cdbd2cSJim Jagielski             @param  aPropertySet [sequence< com::sun::star::beans::PropertyValue >!]
278*b1cdbd2cSJim Jagielski                     describe the changes on this entry. For a list of all supported properties
279*b1cdbd2cSJim Jagielski                     have a look on method getByName().
280*b1cdbd2cSJim Jagielski                     Note: Missing properties will be untouched.
281*b1cdbd2cSJim Jagielski 
282*b1cdbd2cSJim Jagielski             @exception  com::sun::star::lang::IllegalArgumentException
283*b1cdbd2cSJim Jagielski                         if one of the incoming parameters seams to be invalid.
284*b1cdbd2cSJim Jagielski                         That doesn't include the check, if this item exist!
285*b1cdbd2cSJim Jagielski 
286*b1cdbd2cSJim Jagielski             @exception  com::sun::star::container::NoSuchElementException
287*b1cdbd2cSJim Jagielski                         if the requested item does not exist inside this container.
288*b1cdbd2cSJim Jagielski 
289*b1cdbd2cSJim Jagielski             @exception  com::sun::star::lang::WrappedTargetException
290*b1cdbd2cSJim Jagielski                         if updating of the internal structures failed.
291*b1cdbd2cSJim Jagielski          */
292*b1cdbd2cSJim Jagielski 
293*b1cdbd2cSJim Jagielski         virtual void SAL_CALL replaceByName( const ::rtl::OUString& sName        ,
294*b1cdbd2cSJim Jagielski                                              const css::uno::Any&   aPropertySet )
295*b1cdbd2cSJim Jagielski             throw(css::lang::IllegalArgumentException   ,
296*b1cdbd2cSJim Jagielski                   css::container::NoSuchElementException,
297*b1cdbd2cSJim Jagielski                   css::lang::WrappedTargetException     ,
298*b1cdbd2cSJim Jagielski                   css::uno::RuntimeException            );
299*b1cdbd2cSJim Jagielski 
300*b1cdbd2cSJim Jagielski         //---------------------------------------
301*b1cdbd2cSJim Jagielski         // XNameAccess
302*b1cdbd2cSJim Jagielski 
303*b1cdbd2cSJim Jagielski         /// @HTML
304*b1cdbd2cSJim Jagielski         /** @short  return properties of queried detector item.
305*b1cdbd2cSJim Jagielski 
306*b1cdbd2cSJim Jagielski             @descr  Use this method to get all informations about a detector item of this cache.
307*b1cdbd2cSJim Jagielski                     A sequence< com::sun::star::beans::PropertyValue > packed inside an Any will be returned.
308*b1cdbd2cSJim Jagielski                     Following properties are defined:
309*b1cdbd2cSJim Jagielski                     <table border=1>
310*b1cdbd2cSJim Jagielski                     <tr>
311*b1cdbd2cSJim Jagielski                         <td><b>Property</b></td>
312*b1cdbd2cSJim Jagielski                         <td><b>Value<b></td>
313*b1cdbd2cSJim Jagielski                         <td><b>Description<b></td>
314*b1cdbd2cSJim Jagielski                     </tr>
315*b1cdbd2cSJim Jagielski                     <tr>
316*b1cdbd2cSJim Jagielski                         <td>Name</td>
317*b1cdbd2cSJim Jagielski                         <td>[string]</td>
318*b1cdbd2cSJim Jagielski                             <td>the uno implementation name for this detect service</td>
319*b1cdbd2cSJim Jagielski                     </tr>
320*b1cdbd2cSJim Jagielski                     <tr>
321*b1cdbd2cSJim Jagielski                         <td>Types</td>
322*b1cdbd2cSJim Jagielski                         <td>[sequence< string >]</td>
323*b1cdbd2cSJim Jagielski                         <td>a list of all internbal type names, which this detect service is registered for</td>
324*b1cdbd2cSJim Jagielski                     </tr>
325*b1cdbd2cSJim Jagielski                     </table>
326*b1cdbd2cSJim Jagielski 
327*b1cdbd2cSJim Jagielski             @param  sName
328*b1cdbd2cSJim Jagielski                     the uno implementation name the requested detector.
329*b1cdbd2cSJim Jagielski 
330*b1cdbd2cSJim Jagielski             @return A property set, which describe this detect service.
331*b1cdbd2cSJim Jagielski                     It uses a sequence< com::sun::star::beans::PropertyValue > internaly.
332*b1cdbd2cSJim Jagielski 
333*b1cdbd2cSJim Jagielski             @exception  com::sun::star::container::NoSuchElementException
334*b1cdbd2cSJim Jagielski                         if the requested entry does not exist inside this container.
335*b1cdbd2cSJim Jagielski          */
336*b1cdbd2cSJim Jagielski         /// @NOHTML
337*b1cdbd2cSJim Jagielski 
338*b1cdbd2cSJim Jagielski         virtual css::uno::Any SAL_CALL getByName( const ::rtl::OUString& sName )
339*b1cdbd2cSJim Jagielski             throw(css::container::NoSuchElementException,
340*b1cdbd2cSJim Jagielski                   css::lang::WrappedTargetException     ,
341*b1cdbd2cSJim Jagielski                   css::uno::RuntimeException            );
342*b1cdbd2cSJim Jagielski 
343*b1cdbd2cSJim Jagielski         //---------------------------------------
344*b1cdbd2cSJim Jagielski         // XNameAccess
345*b1cdbd2cSJim Jagielski 
346*b1cdbd2cSJim Jagielski         /** @short  return list of all well know container entries available on this container.
347*b1cdbd2cSJim Jagielski 
348*b1cdbd2cSJim Jagielski             @attention  Because this service implements read/write access to the configuration too,
349*b1cdbd2cSJim Jagielski                         this list is dynamic. Means: in multithreaded environments some items of this
350*b1cdbd2cSJim Jagielski                         return list could be invalid next time!
351*b1cdbd2cSJim Jagielski 
352*b1cdbd2cSJim Jagielski             @return A list of all well known container items.
353*b1cdbd2cSJim Jagielski          */
354*b1cdbd2cSJim Jagielski 
355*b1cdbd2cSJim Jagielski         virtual css::uno::Sequence< ::rtl::OUString > SAL_CALL getElementNames()
356*b1cdbd2cSJim Jagielski             throw(css::uno::RuntimeException);
357*b1cdbd2cSJim Jagielski 
358*b1cdbd2cSJim Jagielski         //---------------------------------------
359*b1cdbd2cSJim Jagielski         // XNameAccess
360*b1cdbd2cSJim Jagielski 
361*b1cdbd2cSJim Jagielski         /** @short  check if searched entry exist inside this container.
362*b1cdbd2cSJim Jagielski 
363*b1cdbd2cSJim Jagielski             @attention  In multithreaded environments it's not guaranteed, that a
364*b1cdbd2cSJim Jagielski                         queried item exist next time realy! It can be deleted by
365*b1cdbd2cSJim Jagielski                         another thread ...
366*b1cdbd2cSJim Jagielski 
367*b1cdbd2cSJim Jagielski             @param  sName
368*b1cdbd2cSJim Jagielski                     the name of the queried container entry.
369*b1cdbd2cSJim Jagielski 
370*b1cdbd2cSJim Jagielski             @return sal_True if the requested item exist; sal_False otherwise.
371*b1cdbd2cSJim Jagielski          */
372*b1cdbd2cSJim Jagielski 
373*b1cdbd2cSJim Jagielski         virtual sal_Bool SAL_CALL hasByName( const ::rtl::OUString& sName )
374*b1cdbd2cSJim Jagielski             throw(css::uno::RuntimeException);
375*b1cdbd2cSJim Jagielski 
376*b1cdbd2cSJim Jagielski         //---------------------------------------
377*b1cdbd2cSJim Jagielski         // XElementAccess
378*b1cdbd2cSJim Jagielski 
379*b1cdbd2cSJim Jagielski         /** @short  return the uno type, which is used for all container items.
380*b1cdbd2cSJim Jagielski 
381*b1cdbd2cSJim Jagielski             @return Type of sequence< com::sun::star::beans::PropertyValue > everytime - because it's fix.
382*b1cdbd2cSJim Jagielski          */
383*b1cdbd2cSJim Jagielski 
384*b1cdbd2cSJim Jagielski         virtual css::uno::Type SAL_CALL getElementType()
385*b1cdbd2cSJim Jagielski             throw(css::uno::RuntimeException);
386*b1cdbd2cSJim Jagielski 
387*b1cdbd2cSJim Jagielski         //---------------------------------------
388*b1cdbd2cSJim Jagielski         // XElementAccess
389*b1cdbd2cSJim Jagielski 
390*b1cdbd2cSJim Jagielski         /** @short  return fill state of this cache.
391*b1cdbd2cSJim Jagielski 
392*b1cdbd2cSJim Jagielski             @return sal_True if any item exist inside this conatiner; sal_False otherwhise.
393*b1cdbd2cSJim Jagielski          */
394*b1cdbd2cSJim Jagielski 
395*b1cdbd2cSJim Jagielski         virtual sal_Bool SAL_CALL hasElements()
396*b1cdbd2cSJim Jagielski             throw(css::uno::RuntimeException);
397*b1cdbd2cSJim Jagielski 
398*b1cdbd2cSJim Jagielski         //---------------------------------------
399*b1cdbd2cSJim Jagielski         // XFlushable
400*b1cdbd2cSJim Jagielski 
401*b1cdbd2cSJim Jagielski         /** @short  update the configuration layer and notify all registered listener.
402*b1cdbd2cSJim Jagielski 
403*b1cdbd2cSJim Jagielski             @descr  All container interface methods update the internal structures of
404*b1cdbd2cSJim Jagielski                     this container only. But the underlying configuration layer and
405*b1cdbd2cSJim Jagielski                     may some possible other caches was not updated.
406*b1cdbd2cSJim Jagielski                     Calling of flush() will do that.
407*b1cdbd2cSJim Jagielski                     At the same time all currently registered flush listener will be informed,
408*b1cdbd2cSJim Jagielski                     so they can update her structures too.
409*b1cdbd2cSJim Jagielski                     Note: Before all these operations are started realy, all changes will be
410*b1cdbd2cSJim Jagielski                     verified and if neccessary some corrections will be done.
411*b1cdbd2cSJim Jagielski                     In case the cache will be invalid and could not be repaired an exception is thrown!
412*b1cdbd2cSJim Jagielski                     Normaly this container will not work correctly afterwards ...
413*b1cdbd2cSJim Jagielski 
414*b1cdbd2cSJim Jagielski             @exception  com::sun::star::uno::RuntimeException
415*b1cdbd2cSJim Jagielski                         if the changes on this container was invald and could not be repaired.
416*b1cdbd2cSJim Jagielski          */
417*b1cdbd2cSJim Jagielski 
418*b1cdbd2cSJim Jagielski         virtual void SAL_CALL flush()
419*b1cdbd2cSJim Jagielski             throw(css::uno::RuntimeException);
420*b1cdbd2cSJim Jagielski 
421*b1cdbd2cSJim Jagielski         //---------------------------------------
422*b1cdbd2cSJim Jagielski         // XFlushable
423*b1cdbd2cSJim Jagielski 
424*b1cdbd2cSJim Jagielski         /** @short  register listener for container updates.
425*b1cdbd2cSJim Jagielski 
426*b1cdbd2cSJim Jagielski             @param  xListener
427*b1cdbd2cSJim Jagielski                     reference to listener, which wish to be registered.
428*b1cdbd2cSJim Jagielski 
429*b1cdbd2cSJim Jagielski             @exception  com::sun::star::uno::RuntimeException
430*b1cdbd2cSJim Jagielski                         if the given listener is an invalid reference.
431*b1cdbd2cSJim Jagielski                         Note: multiple calls of this method for the same listener won't be checked!
432*b1cdbd2cSJim Jagielski          */
433*b1cdbd2cSJim Jagielski 
434*b1cdbd2cSJim Jagielski         virtual void SAL_CALL addFlushListener( const css::uno::Reference< css::util::XFlushListener >& xListener )
435*b1cdbd2cSJim Jagielski             throw(css::uno::RuntimeException);
436*b1cdbd2cSJim Jagielski 
437*b1cdbd2cSJim Jagielski         //---------------------------------------
438*b1cdbd2cSJim Jagielski         // XFlushable
439*b1cdbd2cSJim Jagielski 
440*b1cdbd2cSJim Jagielski         /** @short  deregister listener for container updates.
441*b1cdbd2cSJim Jagielski 
442*b1cdbd2cSJim Jagielski             @param  xListener
443*b1cdbd2cSJim Jagielski                     reference to listener, which wish to be deregistered.
444*b1cdbd2cSJim Jagielski 
445*b1cdbd2cSJim Jagielski             @exception  com::sun::star::uno::RuntimeException
446*b1cdbd2cSJim Jagielski                         if the given listener is an invalid reference.
447*b1cdbd2cSJim Jagielski                         Note: multiple calls of this method for the same listener won't be checked!
448*b1cdbd2cSJim Jagielski          */
449*b1cdbd2cSJim Jagielski 
450*b1cdbd2cSJim Jagielski         virtual void SAL_CALL removeFlushListener( const css::uno::Reference< css::util::XFlushListener >& xListener )
451*b1cdbd2cSJim Jagielski             throw(css::uno::RuntimeException);
452*b1cdbd2cSJim Jagielski 
453*b1cdbd2cSJim Jagielski }; // class DetectorFactory
454*b1cdbd2cSJim Jagielski 
455*b1cdbd2cSJim Jagielski } // namespace framework
456*b1cdbd2cSJim Jagielski 
457*b1cdbd2cSJim Jagielski #endif // #ifndef __FRAMEWORK_SERVICES_DETECTORFACTORY_HXX_
458