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_CONTENTHANDLERFACTORY_HXX_
25*b1cdbd2cSJim Jagielski #define __FRAMEWORK_SERVICES_CONTENTHANDLERFACTORY_HXX_
26*b1cdbd2cSJim Jagielski 
27*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________
28*b1cdbd2cSJim Jagielski //	my own includes
29*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________
30*b1cdbd2cSJim Jagielski 
31*b1cdbd2cSJim Jagielski #include <classes/filtercache.hxx>
32*b1cdbd2cSJim Jagielski #include <macros/generic.hxx>
33*b1cdbd2cSJim Jagielski #include <macros/debug.hxx>
34*b1cdbd2cSJim Jagielski #include <macros/xinterface.hxx>
35*b1cdbd2cSJim Jagielski #include <macros/xtypeprovider.hxx>
36*b1cdbd2cSJim Jagielski #include <macros/xserviceinfo.hxx>
37*b1cdbd2cSJim Jagielski #include <threadhelp/threadhelpbase.hxx>
38*b1cdbd2cSJim Jagielski 
39*b1cdbd2cSJim Jagielski #ifndef __FRAMEWORK_THREADHELP_TRANSACTIONBASE_HXX_
40*b1cdbd2cSJim Jagielski #include <threadhelp/transactionbase.hxx>
41*b1cdbd2cSJim Jagielski #endif
42*b1cdbd2cSJim Jagielski #include <general.h>
43*b1cdbd2cSJim Jagielski 
44*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________
45*b1cdbd2cSJim Jagielski //	interface includes
46*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________
47*b1cdbd2cSJim Jagielski #include <com/sun/star/beans/PropertyValue.hpp>
48*b1cdbd2cSJim Jagielski #include <com/sun/star/lang/XInitialization.hpp>
49*b1cdbd2cSJim Jagielski #include <com/sun/star/lang/WrappedTargetException.hpp>
50*b1cdbd2cSJim Jagielski #include <com/sun/star/lang/IllegalArgumentException.hpp>
51*b1cdbd2cSJim Jagielski #include <com/sun/star/container/ElementExistException.hpp>
52*b1cdbd2cSJim Jagielski #include <com/sun/star/container/NoSuchElementException.hpp>
53*b1cdbd2cSJim Jagielski #include <com/sun/star/container/XNameContainer.hpp>
54*b1cdbd2cSJim Jagielski #include <com/sun/star/container/NoSuchElementException.hpp>
55*b1cdbd2cSJim Jagielski #include <com/sun/star/io/XInputStream.hpp>
56*b1cdbd2cSJim Jagielski #include <com/sun/star/util/XFlushable.hpp>
57*b1cdbd2cSJim Jagielski 
58*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________
59*b1cdbd2cSJim Jagielski //	other includes
60*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________
61*b1cdbd2cSJim Jagielski #include <cppuhelper/interfacecontainer.hxx>
62*b1cdbd2cSJim Jagielski #include <cppuhelper/weak.hxx>
63*b1cdbd2cSJim Jagielski 
64*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________
65*b1cdbd2cSJim Jagielski //	namespace
66*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________
67*b1cdbd2cSJim Jagielski 
68*b1cdbd2cSJim Jagielski namespace framework{
69*b1cdbd2cSJim Jagielski 
70*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________
71*b1cdbd2cSJim Jagielski //	exported const
72*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________
73*b1cdbd2cSJim Jagielski 
74*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________
75*b1cdbd2cSJim Jagielski //	exported definitions
76*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________
77*b1cdbd2cSJim Jagielski 
78*b1cdbd2cSJim Jagielski /*-************************************************************************************************************//**
79*b1cdbd2cSJim Jagielski     @short      factory to create handler-objects
80*b1cdbd2cSJim Jagielski     @descr      These class can be used to create new handler for specified contents.
81*b1cdbd2cSJim Jagielski                 We use cached values of our configuration to lay down, which handler match
82*b1cdbd2cSJim Jagielski                 a given URL or handlername. (use service TypeDetection to do that)
83*b1cdbd2cSJim Jagielski                 With a detected type name you can search a registered handler and create it with these factory.
84*b1cdbd2cSJim Jagielski 
85*b1cdbd2cSJim Jagielski 	@implements	XInterface
86*b1cdbd2cSJim Jagielski 				XTypeProvider
87*b1cdbd2cSJim Jagielski 				XServiceInfo
88*b1cdbd2cSJim Jagielski 				XMultiServiceFactory
89*b1cdbd2cSJim Jagielski 				XNameContainer
90*b1cdbd2cSJim Jagielski 				XNameReplace
91*b1cdbd2cSJim Jagielski 				XNameAccess
92*b1cdbd2cSJim Jagielski 				XElementAccess
93*b1cdbd2cSJim Jagielski 				XFlushable
94*b1cdbd2cSJim Jagielski 
95*b1cdbd2cSJim Jagielski     @base       ThreadHelpBase
96*b1cdbd2cSJim Jagielski 				OWeakObject
97*b1cdbd2cSJim Jagielski 
98*b1cdbd2cSJim Jagielski 	@devstatus	ready to use
99*b1cdbd2cSJim Jagielski 	@threadsafe	yes
100*b1cdbd2cSJim Jagielski *//*-*************************************************************************************************************/
101*b1cdbd2cSJim Jagielski 
102*b1cdbd2cSJim Jagielski class ContentHandlerFactory :   // interfaces
103*b1cdbd2cSJim Jagielski 						public	css::lang::XTypeProvider			,
104*b1cdbd2cSJim Jagielski 						public	css::lang::XServiceInfo				,
105*b1cdbd2cSJim Jagielski 						public	css::lang::XMultiServiceFactory		,
106*b1cdbd2cSJim Jagielski 						public	css::container::XNameContainer		,		// => XNameReplace => XNameAccess => XElementAccess
107*b1cdbd2cSJim Jagielski 						public	css::util::XFlushable				,
108*b1cdbd2cSJim Jagielski 						// base classes
109*b1cdbd2cSJim Jagielski 						// Order is neccessary for right initialization of it!
110*b1cdbd2cSJim Jagielski                         private ThreadHelpBase                      ,
111*b1cdbd2cSJim Jagielski                         private TransactionBase                     ,
112*b1cdbd2cSJim Jagielski 						public	::cppu::OWeakObject
113*b1cdbd2cSJim Jagielski {
114*b1cdbd2cSJim Jagielski 	//-------------------------------------------------------------------------------------------------------------
115*b1cdbd2cSJim Jagielski 	//	public methods
116*b1cdbd2cSJim Jagielski 	//-------------------------------------------------------------------------------------------------------------
117*b1cdbd2cSJim Jagielski 
118*b1cdbd2cSJim Jagielski 	public:
119*b1cdbd2cSJim Jagielski 
120*b1cdbd2cSJim Jagielski 		//---------------------------------------------------------------------------------------------------------
121*b1cdbd2cSJim Jagielski 		//	constructor / destructor
122*b1cdbd2cSJim Jagielski 		//---------------------------------------------------------------------------------------------------------
123*b1cdbd2cSJim Jagielski                  ContentHandlerFactory( const css::uno::Reference< css::lang::XMultiServiceFactory >& xFactory );
124*b1cdbd2cSJim Jagielski         virtual ~ContentHandlerFactory(                                                                        );
125*b1cdbd2cSJim Jagielski 
126*b1cdbd2cSJim Jagielski 		//---------------------------------------------------------------------------------------------------------
127*b1cdbd2cSJim Jagielski 		//	XInterface, XTypeProvider, XServiceInfo
128*b1cdbd2cSJim Jagielski 		//---------------------------------------------------------------------------------------------------------
129*b1cdbd2cSJim Jagielski 		DECLARE_XINTERFACE
130*b1cdbd2cSJim Jagielski 		DECLARE_XTYPEPROVIDER
131*b1cdbd2cSJim Jagielski 		DECLARE_XSERVICEINFO
132*b1cdbd2cSJim Jagielski 
133*b1cdbd2cSJim Jagielski 		//---------------------------------------------------------------------------------------------------------
134*b1cdbd2cSJim Jagielski 		//	XMultiServiceFactory
135*b1cdbd2cSJim Jagielski 		//---------------------------------------------------------------------------------------------------------
136*b1cdbd2cSJim Jagielski         virtual css::uno::Reference< css::uno::XInterface > SAL_CALL createInstance             ( const ::rtl::OUString&                        sTypeName   ) throw( css::uno::Exception        ,
137*b1cdbd2cSJim Jagielski                                                                                                                                                                      css::uno::RuntimeException );
138*b1cdbd2cSJim Jagielski         virtual css::uno::Reference< css::uno::XInterface > SAL_CALL createInstanceWithArguments( const ::rtl::OUString&                        sTypeName   ,
139*b1cdbd2cSJim Jagielski                                                                                                   const css::uno::Sequence< css::uno::Any >&    lArguments  ) throw( css::uno::Exception, css::uno::RuntimeException );
140*b1cdbd2cSJim Jagielski         virtual css::uno::Sequence< ::rtl::OUString >       SAL_CALL getAvailableServiceNames   (                                                           ) throw( css::uno::RuntimeException );
141*b1cdbd2cSJim Jagielski 
142*b1cdbd2cSJim Jagielski 		//---------------------------------------------------------------------------------------------------------
143*b1cdbd2cSJim Jagielski 		//	XNameContainer
144*b1cdbd2cSJim Jagielski 		//---------------------------------------------------------------------------------------------------------
145*b1cdbd2cSJim Jagielski         virtual void SAL_CALL insertByName( const ::rtl::OUString&  sHandlerName        ,
146*b1cdbd2cSJim Jagielski                                             const css::uno::Any&    aHandlerProperties  ) throw( css::lang::IllegalArgumentException     ,
147*b1cdbd2cSJim Jagielski                                                                                                  css::container::ElementExistException   ,
148*b1cdbd2cSJim Jagielski                                                                                                  css::lang::WrappedTargetException       ,
149*b1cdbd2cSJim Jagielski                                                                                                  css::uno::RuntimeException              );
150*b1cdbd2cSJim Jagielski         virtual void SAL_CALL removeByName( const ::rtl::OUString&  sHandlerName        ) throw( css::container::NoSuchElementException  ,
151*b1cdbd2cSJim Jagielski                                                                                                  css::lang::WrappedTargetException       ,
152*b1cdbd2cSJim Jagielski                                                                                                  css::uno::RuntimeException              );
153*b1cdbd2cSJim Jagielski 
154*b1cdbd2cSJim Jagielski 		//---------------------------------------------------------------------------------------------------------
155*b1cdbd2cSJim Jagielski 		//	XNameReplace
156*b1cdbd2cSJim Jagielski 		//---------------------------------------------------------------------------------------------------------
157*b1cdbd2cSJim Jagielski         virtual void SAL_CALL replaceByName( const ::rtl::OUString& sHandlerName       ,
158*b1cdbd2cSJim Jagielski                                              const css::uno::Any&   aHandlerProperties ) throw( css::lang::IllegalArgumentException    ,
159*b1cdbd2cSJim Jagielski                                                                                                 css::container::NoSuchElementException ,
160*b1cdbd2cSJim Jagielski                                                                                                 css::lang::WrappedTargetException      ,
161*b1cdbd2cSJim Jagielski                                                                                                 css::uno::RuntimeException             );
162*b1cdbd2cSJim Jagielski 
163*b1cdbd2cSJim Jagielski 		//---------------------------------------------------------------------------------------------------------
164*b1cdbd2cSJim Jagielski 		//	XNameAccess
165*b1cdbd2cSJim Jagielski 		//---------------------------------------------------------------------------------------------------------
166*b1cdbd2cSJim Jagielski         virtual css::uno::Any                         SAL_CALL getByName      ( const ::rtl::OUString& sName ) throw( css::container::NoSuchElementException ,
167*b1cdbd2cSJim Jagielski                                                                                                                       css::lang::WrappedTargetException      ,
168*b1cdbd2cSJim Jagielski                                                                                                                       css::uno::RuntimeException             );
169*b1cdbd2cSJim Jagielski         virtual css::uno::Sequence< ::rtl::OUString > SAL_CALL getElementNames(                              ) throw( css::uno::RuntimeException             );
170*b1cdbd2cSJim Jagielski         virtual sal_Bool                              SAL_CALL hasByName      ( const ::rtl::OUString& sName ) throw( css::uno::RuntimeException             );
171*b1cdbd2cSJim Jagielski 
172*b1cdbd2cSJim Jagielski 		//---------------------------------------------------------------------------------------------------------
173*b1cdbd2cSJim Jagielski 		//	XElementAccess
174*b1cdbd2cSJim Jagielski 		//---------------------------------------------------------------------------------------------------------
175*b1cdbd2cSJim Jagielski         virtual css::uno::Type SAL_CALL getElementType() throw( css::uno::RuntimeException );
176*b1cdbd2cSJim Jagielski         virtual sal_Bool       SAL_CALL hasElements   () throw( css::uno::RuntimeException );
177*b1cdbd2cSJim Jagielski 
178*b1cdbd2cSJim Jagielski 		//---------------------------------------------------------------------------------------------------------
179*b1cdbd2cSJim Jagielski 		//	XFlushable
180*b1cdbd2cSJim Jagielski 		//---------------------------------------------------------------------------------------------------------
181*b1cdbd2cSJim Jagielski         virtual void SAL_CALL flush              (                                                                   ) throw ( css::uno::RuntimeException );
182*b1cdbd2cSJim Jagielski         virtual void SAL_CALL addFlushListener   ( const css::uno::Reference< css::util::XFlushListener >& xListener ) throw ( css::uno::RuntimeException );
183*b1cdbd2cSJim Jagielski     	virtual void SAL_CALL removeFlushListener( const css::uno::Reference< css::util::XFlushListener >& xListener ) throw ( css::uno::RuntimeException );
184*b1cdbd2cSJim Jagielski 
185*b1cdbd2cSJim Jagielski 	//-------------------------------------------------------------------------------------------------------------
186*b1cdbd2cSJim Jagielski 	//	protected methods
187*b1cdbd2cSJim Jagielski 	//-------------------------------------------------------------------------------------------------------------
188*b1cdbd2cSJim Jagielski 
189*b1cdbd2cSJim Jagielski 	protected:
190*b1cdbd2cSJim Jagielski 
191*b1cdbd2cSJim Jagielski 	//-------------------------------------------------------------------------------------------------------------
192*b1cdbd2cSJim Jagielski 	//	debug methods
193*b1cdbd2cSJim Jagielski 	//	(should be private everyway!)
194*b1cdbd2cSJim Jagielski 	//-------------------------------------------------------------------------------------------------------------
195*b1cdbd2cSJim Jagielski 
196*b1cdbd2cSJim Jagielski 		/*-****************************************************************************************************//**
197*b1cdbd2cSJim Jagielski 			@short		debug-method to check incoming parameter of some other mehods of this class
198*b1cdbd2cSJim Jagielski 			@descr		The following methods are used to check parameters for other methods
199*b1cdbd2cSJim Jagielski 						of this class. The return value is used directly for an ASSERT(...).
200*b1cdbd2cSJim Jagielski 
201*b1cdbd2cSJim Jagielski 			@seealso	ASSERTs in implementation!
202*b1cdbd2cSJim Jagielski 
203*b1cdbd2cSJim Jagielski 			@param		references to checking variables
204*b1cdbd2cSJim Jagielski 			@return		sal_False ,on invalid parameter
205*b1cdbd2cSJim Jagielski 			@return		sal_True  ,otherwise
206*b1cdbd2cSJim Jagielski 
207*b1cdbd2cSJim Jagielski 			@onerror	-
208*b1cdbd2cSJim Jagielski 		*//*-*****************************************************************************************************/
209*b1cdbd2cSJim Jagielski 
210*b1cdbd2cSJim Jagielski 	#ifdef ENABLE_ASSERTIONS
211*b1cdbd2cSJim Jagielski 
212*b1cdbd2cSJim Jagielski 	private:
213*b1cdbd2cSJim Jagielski 
214*b1cdbd2cSJim Jagielski         static sal_Bool implcp_ContentHandlerFactory        (   const   css::uno::Reference< css::lang::XMultiServiceFactory >& xFactory            );
215*b1cdbd2cSJim Jagielski     	static sal_Bool implcp_createInstanceWithArguments	(	const	::rtl::OUString&										sTypeName			,
216*b1cdbd2cSJim Jagielski 							  									const	css::uno::Sequence< css::uno::Any >&					lArguments			);
217*b1cdbd2cSJim Jagielski     	static sal_Bool implcp_getByName					(	const	::rtl::OUString&										sName				);
218*b1cdbd2cSJim Jagielski     	static sal_Bool implcp_hasByName					(	const	::rtl::OUString&										sName				);
219*b1cdbd2cSJim Jagielski         static sal_Bool implcp_removeByName                 (   const   ::rtl::OUString&                                        sHandlerName        );
220*b1cdbd2cSJim Jagielski 
221*b1cdbd2cSJim Jagielski 	#endif	//	#ifdef ENABLE_ASSERTIONS
222*b1cdbd2cSJim Jagielski 
223*b1cdbd2cSJim Jagielski 	//-------------------------------------------------------------------------------------------------------------
224*b1cdbd2cSJim Jagielski 	//	private variables
225*b1cdbd2cSJim Jagielski 	//	(should be private everyway!)
226*b1cdbd2cSJim Jagielski 	//-------------------------------------------------------------------------------------------------------------
227*b1cdbd2cSJim Jagielski 
228*b1cdbd2cSJim Jagielski 	private:
229*b1cdbd2cSJim Jagielski 
230*b1cdbd2cSJim Jagielski 		css::uno::Reference< css::lang::XMultiServiceFactory >		m_xFactory				;
231*b1cdbd2cSJim Jagielski         FilterCache                                                 m_aCache                ;
232*b1cdbd2cSJim Jagielski //		::cppu::OMultiTypeInterfaceContainerHelper					m_aListenerContainer	;
233*b1cdbd2cSJim Jagielski 
234*b1cdbd2cSJim Jagielski };      //  class ContentHandlerFactory
235*b1cdbd2cSJim Jagielski 
236*b1cdbd2cSJim Jagielski }		//	namespace framework
237*b1cdbd2cSJim Jagielski 
238*b1cdbd2cSJim Jagielski #endif  //  #ifndef __FRAMEWORK_SERVICES_CONTENTHANDLERFACTORY_HXX_
239