xref: /trunk/main/framework/inc/helper/ocomponentenumeration.hxx (revision 1ecadb572e7010ff3b3382ad9bf179dbc6efadbb)
1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 
28 #ifndef __FRAMEWORK_HELPER_OCOMPONENTENUMERATION_HXX_
29 #define __FRAMEWORK_HELPER_OCOMPONENTENUMERATION_HXX_
30 
31 //_________________________________________________________________________________________________________________
32 //  my own includes
33 //_________________________________________________________________________________________________________________
34 
35 #ifndef __FRAMEWORK_OMUTEXMEMBER_HXX_
36 #include <threadhelp/threadhelpbase.hxx>
37 #endif
38 #include <macros/generic.hxx>
39 #include <macros/xinterface.hxx>
40 #include <macros/xtypeprovider.hxx>
41 #include <macros/debug.hxx>
42 #include <general.h>
43 
44 //_________________________________________________________________________________________________________________
45 //  interface includes
46 //_________________________________________________________________________________________________________________
47 #include <com/sun/star/lang/XEventListener.hpp>
48 #include <com/sun/star/container/XEnumeration.hpp>
49 #include <com/sun/star/lang/XComponent.hpp>
50 
51 //_________________________________________________________________________________________________________________
52 //  other includes
53 //_________________________________________________________________________________________________________________
54 #include <cppuhelper/implbase2.hxx>
55 
56 //_________________________________________________________________________________________________________________
57 //  namespace
58 //_________________________________________________________________________________________________________________
59 
60 namespace framework{
61 
62 //_________________________________________________________________________________________________________________
63 //  exported const
64 //_________________________________________________________________________________________________________________
65 
66 //_________________________________________________________________________________________________________________
67 //  exported definitions
68 //_________________________________________________________________________________________________________________
69 
70 /*-************************************************************************************************************//**
71     @short          implement a helper for a oneway enumeration of components
72     @descr          You can step during this list only for one time! Its a snapshot.
73                     Don't forget to release the reference. You are the owner of an instance of this implementation.
74                     You cant use this as a baseclass. Please use it as a dynamical object for return.
75 
76     @implements     XInterface
77                     XTypeProvider
78                     XEventListener
79                     XEnumeration
80 
81     @base           ThreadHelpBase
82                     OWeakObject
83 
84     @devstatus      ready to use
85     @threadsafe     yes
86 *//*-*************************************************************************************************************/
87 
88 class OComponentEnumeration :   public ThreadHelpBase               ,
89                                 public ::cppu::WeakImplHelper2< ::com::sun::star::container::XEnumeration,::com::sun::star::lang::XEventListener >
90 {
91     //-------------------------------------------------------------------------------------------------------------
92     //  public methods
93     //-------------------------------------------------------------------------------------------------------------
94 
95     public:
96 
97         //---------------------------------------------------------------------------------------------------------
98         //  constructor / destructor
99         //---------------------------------------------------------------------------------------------------------
100 
101         /*-****************************************************************************************************//**
102             @short      constructor to initialize this enumeration
103             @descr      An enumeration is a list with oneway-access! You can get every member only for one time.
104                         This method allow to initialize this oneway list with values.
105 
106             @seealso    -
107 
108             @param      "seqComponents" is a sequence of interfaces, which are components.
109             @return     -
110 
111             @onerror    Do nothing and reset this object to default with an empty list.
112         *//*-*****************************************************************************************************/
113 
114         OComponentEnumeration( const css::uno::Sequence< css::uno::Reference< css::lang::XComponent > >& seqComponents );
115 
116         //---------------------------------------------------------------------------------------------------------
117         //  XEventListener
118         //---------------------------------------------------------------------------------------------------------
119 
120         /*-****************************************************************************************************//**
121             @short      last chance to release all references and free memory
122             @descr      This method is called, if the enumeration is used completly and has no more elements.
123                         Then we must destroy ouer list and release all references to other objects.
124 
125             @seealso    interface XEventListener
126 
127             @param      "aEvent" describe the source of this event.
128             @return     -
129 
130             @onerror    -
131         *//*-*****************************************************************************************************/
132 
133         virtual void SAL_CALL disposing( const css::lang::EventObject& aEvent ) throw( css::uno::RuntimeException );
134 
135         //---------------------------------------------------------------------------------------------------------
136         //  XEnumeration
137         //---------------------------------------------------------------------------------------------------------
138 
139         /*-****************************************************************************************************//**
140             @short      check count of accessible elements of enumeration
141             @descr      You can call this method to get information about accessible elements in future.
142                         Elements you have already getted are not accessible!
143 
144             @seealso    interface XEnumeration
145 
146             @param      -
147             @return     sal_True  = if more elements accessible<BR>
148                         sal_False = other way
149 
150             @onerror    sal_False<BR>
151                         (List is emtpy and there no accessible elements ...)
152         *//*-*****************************************************************************************************/
153 
154         virtual sal_Bool SAL_CALL hasMoreElements() throw( css::uno::RuntimeException );
155 
156         /*-****************************************************************************************************//**
157             @short      give the next element, if some exist
158             @descr      If a call "hasMoreElements()" return true, you can get the next element of list.
159 
160             @seealso    interface XEnumeration
161 
162             @param      -
163             @return     A Reference to a component, safed in an Any-structure.
164 
165             @onerror    If end of enumeration is arrived or there are no elements in list => a NoSuchElementException is thrown.
166         *//*-*****************************************************************************************************/
167 
168         virtual css::uno::Any SAL_CALL nextElement() throw( css::container::NoSuchElementException  ,
169                                                             css::lang::WrappedTargetException       ,
170                                                             css::uno::RuntimeException              );
171 
172     //-------------------------------------------------------------------------------------------------------------
173     //  protected methods
174     //-------------------------------------------------------------------------------------------------------------
175 
176     protected:
177 
178         /*-****************************************************************************************************//**
179             @short      standard destructor
180             @descr      This method destruct an instance of this class and clear some member.
181                         We make it protected, because its not supported to use this class as normal instance!
182                         You must create it dynamical in memory and use a pointer.
183 
184             @seealso    -
185 
186             @param      -
187             @return     -
188 
189             @onerror    -
190         *//*-*****************************************************************************************************/
191 
192         virtual ~OComponentEnumeration();
193 
194         /*-****************************************************************************************************//**
195             @short      reset instance to default values
196 
197             @descr      There are two ways to delete an instance of this class.<BR>
198                         1) delete with destructor<BR>
199                         2) dispose from parent or factory ore ...<BR>
200                         This method do the same for both ways! It free used memory and release references ...
201 
202             @seealso    method dispose()
203             @seealso    destructor ~TaskEnumeration()
204 
205             @param      -
206 
207             @return     -
208 
209             @onerror    -
210         *//*-*****************************************************************************************************/
211 
212         virtual void impl_resetObject();
213 
214     //-------------------------------------------------------------------------------------------------------------
215     //  private methods
216     //-------------------------------------------------------------------------------------------------------------
217 
218     private:
219 
220     //-------------------------------------------------------------------------------------------------------------
221     //  debug methods
222     //  (should be private everyway!)
223     //-------------------------------------------------------------------------------------------------------------
224 
225         /*-****************************************************************************************************//**
226             @short      debug-method to check incoming parameter of some other mehods of this class
227             @descr      The following methods are used to check parameters for other methods
228                         of this class. The return value is used directly for an ASSERT(...).
229 
230             @seealso    ASSERT in implementation!
231 
232             @param      references to checking variables
233             @return     sal_False on invalid parameter<BR>
234                         sal_True  otherway
235 
236             @onerror    -
237         *//*-*****************************************************************************************************/
238 
239     #ifdef ENABLE_ASSERTIONS
240 
241     private:
242 
243         static sal_Bool impldbg_checkParameter_OComponentEnumerationCtor    (   const   css::uno::Sequence< css::uno::Reference< css::lang::XComponent > >& seqComponents   );
244         static sal_Bool impldbg_checkParameter_disposing                    (   const   css::lang::EventObject&                                             aEvent          );
245 
246     #endif  // #ifdef ENABLE_ASSERTIONS
247 
248     //-------------------------------------------------------------------------------------------------------------
249     //  variables
250     //  (should be private everyway!)
251     //-------------------------------------------------------------------------------------------------------------
252 
253     private:
254 
255         sal_uInt32                                                              m_nPosition         ;   /// current position in enumeration
256         css::uno::Sequence< css::uno::Reference< css::lang::XComponent > >      m_seqComponents     ;   /// list of current components
257 
258 };      //  class OComponentEnumeration
259 
260 }       //  namespace framework
261 
262 #endif  //  #ifndef __FRAMEWORK_HELPER_OCOMPONENTENUMERATION_HXX_
263