xref: /AOO41X/main/ucbhelper/source/provider/contentidentifier.cxx (revision cdf0e10c4e3984b49a9502b011690b615761d4a3)
1*cdf0e10cSrcweir /*************************************************************************
2*cdf0e10cSrcweir  *
3*cdf0e10cSrcweir  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4*cdf0e10cSrcweir  *
5*cdf0e10cSrcweir  * Copyright 2000, 2010 Oracle and/or its affiliates.
6*cdf0e10cSrcweir  *
7*cdf0e10cSrcweir  * OpenOffice.org - a multi-platform office productivity suite
8*cdf0e10cSrcweir  *
9*cdf0e10cSrcweir  * This file is part of OpenOffice.org.
10*cdf0e10cSrcweir  *
11*cdf0e10cSrcweir  * OpenOffice.org is free software: you can redistribute it and/or modify
12*cdf0e10cSrcweir  * it under the terms of the GNU Lesser General Public License version 3
13*cdf0e10cSrcweir  * only, as published by the Free Software Foundation.
14*cdf0e10cSrcweir  *
15*cdf0e10cSrcweir  * OpenOffice.org is distributed in the hope that it will be useful,
16*cdf0e10cSrcweir  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17*cdf0e10cSrcweir  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18*cdf0e10cSrcweir  * GNU Lesser General Public License version 3 for more details
19*cdf0e10cSrcweir  * (a copy is included in the LICENSE file that accompanied this code).
20*cdf0e10cSrcweir  *
21*cdf0e10cSrcweir  * You should have received a copy of the GNU Lesser General Public License
22*cdf0e10cSrcweir  * version 3 along with OpenOffice.org.  If not, see
23*cdf0e10cSrcweir  * <http://www.openoffice.org/license.html>
24*cdf0e10cSrcweir  * for a copy of the LGPLv3 License.
25*cdf0e10cSrcweir  *
26*cdf0e10cSrcweir  ************************************************************************/
27*cdf0e10cSrcweir 
28*cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
29*cdf0e10cSrcweir #include "precompiled_ucbhelper.hxx"
30*cdf0e10cSrcweir 
31*cdf0e10cSrcweir /**************************************************************************
32*cdf0e10cSrcweir 								TODO
33*cdf0e10cSrcweir  **************************************************************************
34*cdf0e10cSrcweir 
35*cdf0e10cSrcweir  *************************************************************************/
36*cdf0e10cSrcweir #include <com/sun/star/lang/XMultiServiceFactory.hpp>
37*cdf0e10cSrcweir #include <ucbhelper/contentidentifier.hxx>
38*cdf0e10cSrcweir #include <cppuhelper/typeprovider.hxx>
39*cdf0e10cSrcweir #include <osl/mutex.hxx>
40*cdf0e10cSrcweir 
41*cdf0e10cSrcweir using namespace rtl;
42*cdf0e10cSrcweir using namespace com::sun::star::uno;
43*cdf0e10cSrcweir using namespace com::sun::star::lang;
44*cdf0e10cSrcweir using namespace com::sun::star::ucb;
45*cdf0e10cSrcweir 
46*cdf0e10cSrcweir namespace ucbhelper
47*cdf0e10cSrcweir {
48*cdf0e10cSrcweir 
49*cdf0e10cSrcweir //=========================================================================
50*cdf0e10cSrcweir //=========================================================================
51*cdf0e10cSrcweir //
52*cdf0e10cSrcweir // struct ContentIdentifier_Impl.
53*cdf0e10cSrcweir //
54*cdf0e10cSrcweir //=========================================================================
55*cdf0e10cSrcweir //=========================================================================
56*cdf0e10cSrcweir 
57*cdf0e10cSrcweir struct ContentIdentifier_Impl
58*cdf0e10cSrcweir {
59*cdf0e10cSrcweir 	Reference< XMultiServiceFactory > m_xSMgr;
60*cdf0e10cSrcweir 	OUString 						  m_aContentId;
61*cdf0e10cSrcweir 	OUString 						  m_aProviderScheme;
62*cdf0e10cSrcweir 	osl::Mutex						  m_aMutex;
63*cdf0e10cSrcweir 
64*cdf0e10cSrcweir 	ContentIdentifier_Impl( const Reference< XMultiServiceFactory >& rSMgr,
65*cdf0e10cSrcweir 				  			const OUString& rURL );
66*cdf0e10cSrcweir };
67*cdf0e10cSrcweir 
68*cdf0e10cSrcweir //=========================================================================
69*cdf0e10cSrcweir //
70*cdf0e10cSrcweir // ContentIdentifier_Impl Implementation.
71*cdf0e10cSrcweir //
72*cdf0e10cSrcweir //=========================================================================
73*cdf0e10cSrcweir 
74*cdf0e10cSrcweir ContentIdentifier_Impl::ContentIdentifier_Impl(
75*cdf0e10cSrcweir 				  const Reference< XMultiServiceFactory >& rSMgr,
76*cdf0e10cSrcweir 				  const OUString& rURL )
77*cdf0e10cSrcweir : m_xSMgr( rSMgr )
78*cdf0e10cSrcweir {
79*cdf0e10cSrcweir 	// Normalize URL scheme ( it's case insensitive ).
80*cdf0e10cSrcweir 
81*cdf0e10cSrcweir 	// The content provider scheme is the part before the first ':'
82*cdf0e10cSrcweir 	// within the content id.
83*cdf0e10cSrcweir 	sal_Int32 nPos = rURL.indexOf( ':', 0 );
84*cdf0e10cSrcweir 	if ( nPos != -1 )
85*cdf0e10cSrcweir 	{
86*cdf0e10cSrcweir 		OUString aScheme( rURL.copy( 0, nPos ) );
87*cdf0e10cSrcweir 		m_aProviderScheme = aScheme.toAsciiLowerCase();
88*cdf0e10cSrcweir 		m_aContentId = rURL.replaceAt( 0, nPos, aScheme );
89*cdf0e10cSrcweir 	}
90*cdf0e10cSrcweir }
91*cdf0e10cSrcweir 
92*cdf0e10cSrcweir //=========================================================================
93*cdf0e10cSrcweir //
94*cdf0e10cSrcweir // ContentIdentifier Implementation.
95*cdf0e10cSrcweir //
96*cdf0e10cSrcweir //=========================================================================
97*cdf0e10cSrcweir 
98*cdf0e10cSrcweir ContentIdentifier::ContentIdentifier(
99*cdf0e10cSrcweir 						const Reference< XMultiServiceFactory >& rxSMgr,
100*cdf0e10cSrcweir 						const OUString& rURL )
101*cdf0e10cSrcweir {
102*cdf0e10cSrcweir 	m_pImpl = new ContentIdentifier_Impl( rxSMgr, rURL );
103*cdf0e10cSrcweir }
104*cdf0e10cSrcweir 
105*cdf0e10cSrcweir //=========================================================================
106*cdf0e10cSrcweir ContentIdentifier::ContentIdentifier( const OUString& rURL )
107*cdf0e10cSrcweir {
108*cdf0e10cSrcweir 	m_pImpl = new ContentIdentifier_Impl(
109*cdf0e10cSrcweir 					Reference< XMultiServiceFactory >(), rURL );
110*cdf0e10cSrcweir }
111*cdf0e10cSrcweir 
112*cdf0e10cSrcweir //=========================================================================
113*cdf0e10cSrcweir // virtual
114*cdf0e10cSrcweir ContentIdentifier::~ContentIdentifier()
115*cdf0e10cSrcweir {
116*cdf0e10cSrcweir 	delete m_pImpl;
117*cdf0e10cSrcweir }
118*cdf0e10cSrcweir 
119*cdf0e10cSrcweir //=========================================================================
120*cdf0e10cSrcweir //
121*cdf0e10cSrcweir // XInterface methods.
122*cdf0e10cSrcweir //
123*cdf0e10cSrcweir //=========================================================================
124*cdf0e10cSrcweir 
125*cdf0e10cSrcweir //=========================================================================
126*cdf0e10cSrcweir // virtual
127*cdf0e10cSrcweir void SAL_CALL ContentIdentifier::acquire() throw()
128*cdf0e10cSrcweir {
129*cdf0e10cSrcweir 	OWeakObject::acquire();
130*cdf0e10cSrcweir }
131*cdf0e10cSrcweir 
132*cdf0e10cSrcweir //=========================================================================
133*cdf0e10cSrcweir // virtual
134*cdf0e10cSrcweir void SAL_CALL ContentIdentifier::release() throw()
135*cdf0e10cSrcweir {
136*cdf0e10cSrcweir 	OWeakObject::release();
137*cdf0e10cSrcweir }
138*cdf0e10cSrcweir 
139*cdf0e10cSrcweir //=========================================================================
140*cdf0e10cSrcweir // virtual
141*cdf0e10cSrcweir Any SAL_CALL
142*cdf0e10cSrcweir ContentIdentifier::queryInterface( const Type & rType )
143*cdf0e10cSrcweir 	throw ( RuntimeException )
144*cdf0e10cSrcweir {
145*cdf0e10cSrcweir 	Any aRet = cppu::queryInterface( rType,
146*cdf0e10cSrcweir 				static_cast< XTypeProvider * >( this ),
147*cdf0e10cSrcweir 				static_cast< XContentIdentifier * >( this ) );
148*cdf0e10cSrcweir 
149*cdf0e10cSrcweir 	return aRet.hasValue() ? aRet : OWeakObject::queryInterface( rType );
150*cdf0e10cSrcweir }
151*cdf0e10cSrcweir 
152*cdf0e10cSrcweir //=========================================================================
153*cdf0e10cSrcweir //
154*cdf0e10cSrcweir // XTypeProvider methods.
155*cdf0e10cSrcweir //
156*cdf0e10cSrcweir //=========================================================================
157*cdf0e10cSrcweir 
158*cdf0e10cSrcweir // virtual
159*cdf0e10cSrcweir Sequence< sal_Int8 > SAL_CALL
160*cdf0e10cSrcweir ContentIdentifier::getImplementationId()
161*cdf0e10cSrcweir 	throw( RuntimeException )
162*cdf0e10cSrcweir {
163*cdf0e10cSrcweir 	static cppu::OImplementationId* pId = NULL;
164*cdf0e10cSrcweir   	if ( !pId )
165*cdf0e10cSrcweir   	{
166*cdf0e10cSrcweir 		osl::Guard< osl::Mutex > aGuard( osl::Mutex::getGlobalMutex() );
167*cdf0e10cSrcweir 	  	if ( !pId )
168*cdf0e10cSrcweir 	  	{
169*cdf0e10cSrcweir 		  	static cppu::OImplementationId id( sal_False );
170*cdf0e10cSrcweir 		  	pId = &id;
171*cdf0e10cSrcweir 	  	}
172*cdf0e10cSrcweir   	}
173*cdf0e10cSrcweir   	return (*pId).getImplementationId();
174*cdf0e10cSrcweir }
175*cdf0e10cSrcweir 
176*cdf0e10cSrcweir //=========================================================================
177*cdf0e10cSrcweir // virtual
178*cdf0e10cSrcweir Sequence< com::sun::star::uno::Type > SAL_CALL
179*cdf0e10cSrcweir ContentIdentifier::getTypes()
180*cdf0e10cSrcweir 	throw( RuntimeException )
181*cdf0e10cSrcweir {
182*cdf0e10cSrcweir 	static cppu::OTypeCollection* pCollection = NULL;
183*cdf0e10cSrcweir   	if ( !pCollection )
184*cdf0e10cSrcweir   	{
185*cdf0e10cSrcweir 		osl::Guard< osl::Mutex > aGuard( osl::Mutex::getGlobalMutex() );
186*cdf0e10cSrcweir 		if ( !pCollection )
187*cdf0e10cSrcweir 		{
188*cdf0e10cSrcweir 			static cppu::OTypeCollection collection(
189*cdf0e10cSrcweir 					getCppuType( static_cast<
190*cdf0e10cSrcweir 						Reference < XTypeProvider > * >( 0 ) ),
191*cdf0e10cSrcweir 					getCppuType( static_cast<
192*cdf0e10cSrcweir 						Reference< XContentIdentifier > * >( 0 ) ) );
193*cdf0e10cSrcweir 			pCollection = &collection;
194*cdf0e10cSrcweir 		}
195*cdf0e10cSrcweir 	}
196*cdf0e10cSrcweir 	return (*pCollection).getTypes();
197*cdf0e10cSrcweir }
198*cdf0e10cSrcweir 
199*cdf0e10cSrcweir //=========================================================================
200*cdf0e10cSrcweir //
201*cdf0e10cSrcweir // XContentIdentifier methods.
202*cdf0e10cSrcweir //
203*cdf0e10cSrcweir //=========================================================================
204*cdf0e10cSrcweir 
205*cdf0e10cSrcweir // virtual
206*cdf0e10cSrcweir OUString SAL_CALL ContentIdentifier::getContentIdentifier()
207*cdf0e10cSrcweir 	throw( RuntimeException )
208*cdf0e10cSrcweir {
209*cdf0e10cSrcweir 	return m_pImpl->m_aContentId;
210*cdf0e10cSrcweir }
211*cdf0e10cSrcweir 
212*cdf0e10cSrcweir //=========================================================================
213*cdf0e10cSrcweir // virtual
214*cdf0e10cSrcweir OUString SAL_CALL ContentIdentifier::getContentProviderScheme()
215*cdf0e10cSrcweir 	throw( RuntimeException )
216*cdf0e10cSrcweir {
217*cdf0e10cSrcweir 	return m_pImpl->m_aProviderScheme;
218*cdf0e10cSrcweir }
219*cdf0e10cSrcweir 
220*cdf0e10cSrcweir } /* namespace ucbhelper */
221*cdf0e10cSrcweir 
222