Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*
3 : * This file is part of the LibreOffice project.
4 : *
5 : * This Source Code Form is subject to the terms of the Mozilla Public
6 : * License, v. 2.0. If a copy of the MPL was not distributed with this
7 : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 : *
9 : * This file incorporates work covered by the following license notice:
10 : *
11 : * Licensed to the Apache Software Foundation (ASF) under one or more
12 : * contributor license agreements. See the NOTICE file distributed
13 : * with this work for additional information regarding copyright
14 : * ownership. The ASF licenses this file to you under the Apache
15 : * License, Version 2.0 (the "License"); you may not use this file
16 : * except in compliance with the License. You may obtain a copy of
17 : * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 : */
19 :
20 :
21 : /**************************************************************************
22 : TODO
23 : **************************************************************************
24 :
25 : *************************************************************************/
26 : #include <com/sun/star/lang/XMultiServiceFactory.hpp>
27 : #include <ucbhelper/contentidentifier.hxx>
28 : #include <cppuhelper/typeprovider.hxx>
29 : #include <osl/mutex.hxx>
30 :
31 : using namespace com::sun::star::uno;
32 : using namespace com::sun::star::lang;
33 : using namespace com::sun::star::ucb;
34 :
35 : using ::rtl::OUString;
36 :
37 : namespace ucbhelper
38 : {
39 :
40 : //=========================================================================
41 : //=========================================================================
42 : //
43 : // struct ContentIdentifier_Impl.
44 : //
45 : //=========================================================================
46 : //=========================================================================
47 :
48 5 : struct ContentIdentifier_Impl
49 : {
50 : OUString m_aContentId;
51 : OUString m_aProviderScheme;
52 : osl::Mutex m_aMutex;
53 :
54 : ContentIdentifier_Impl( const OUString& rURL );
55 : };
56 :
57 : //=========================================================================
58 : //
59 : // ContentIdentifier_Impl Implementation.
60 : //
61 : //=========================================================================
62 :
63 5 : ContentIdentifier_Impl::ContentIdentifier_Impl(const OUString& rURL )
64 : {
65 : // Normalize URL scheme ( it's case insensitive ).
66 :
67 : // The content provider scheme is the part before the first ':'
68 : // within the content id.
69 5 : sal_Int32 nPos = rURL.indexOf( ':', 0 );
70 5 : if ( nPos != -1 )
71 : {
72 5 : OUString aScheme( rURL.copy( 0, nPos ) );
73 5 : m_aProviderScheme = aScheme.toAsciiLowerCase();
74 5 : m_aContentId = rURL.replaceAt( 0, nPos, aScheme );
75 : }
76 5 : }
77 :
78 : //=========================================================================
79 : //
80 : // ContentIdentifier Implementation.
81 : //
82 : //=========================================================================
83 :
84 5 : ContentIdentifier::ContentIdentifier( const OUString& rURL )
85 : {
86 5 : m_pImpl = new ContentIdentifier_Impl( rURL );
87 5 : }
88 :
89 : //=========================================================================
90 : // virtual
91 15 : ContentIdentifier::~ContentIdentifier()
92 : {
93 5 : delete m_pImpl;
94 10 : }
95 :
96 : //=========================================================================
97 : //
98 : // XInterface methods.
99 : //
100 : //=========================================================================
101 :
102 : //=========================================================================
103 : // virtual
104 15 : void SAL_CALL ContentIdentifier::acquire() throw()
105 : {
106 15 : OWeakObject::acquire();
107 15 : }
108 :
109 : //=========================================================================
110 : // virtual
111 15 : void SAL_CALL ContentIdentifier::release() throw()
112 : {
113 15 : OWeakObject::release();
114 15 : }
115 :
116 : //=========================================================================
117 : // virtual
118 : Any SAL_CALL
119 0 : ContentIdentifier::queryInterface( const Type & rType )
120 : throw ( RuntimeException )
121 : {
122 : Any aRet = cppu::queryInterface( rType,
123 : static_cast< XTypeProvider * >( this ),
124 0 : static_cast< XContentIdentifier * >( this ) );
125 :
126 0 : return aRet.hasValue() ? aRet : OWeakObject::queryInterface( rType );
127 : }
128 :
129 : //=========================================================================
130 : //
131 : // XTypeProvider methods.
132 : //
133 : //=========================================================================
134 :
135 : // virtual
136 : Sequence< sal_Int8 > SAL_CALL
137 0 : ContentIdentifier::getImplementationId()
138 : throw( RuntimeException )
139 : {
140 : static cppu::OImplementationId* pId = NULL;
141 0 : if ( !pId )
142 : {
143 0 : osl::Guard< osl::Mutex > aGuard( osl::Mutex::getGlobalMutex() );
144 0 : if ( !pId )
145 : {
146 0 : static cppu::OImplementationId id( sal_False );
147 0 : pId = &id;
148 0 : }
149 : }
150 0 : return (*pId).getImplementationId();
151 : }
152 :
153 : //=========================================================================
154 : // virtual
155 : Sequence< com::sun::star::uno::Type > SAL_CALL
156 0 : ContentIdentifier::getTypes()
157 : throw( RuntimeException )
158 : {
159 : static cppu::OTypeCollection* pCollection = NULL;
160 0 : if ( !pCollection )
161 : {
162 0 : osl::Guard< osl::Mutex > aGuard( osl::Mutex::getGlobalMutex() );
163 0 : if ( !pCollection )
164 : {
165 : static cppu::OTypeCollection collection(
166 : getCppuType( static_cast<
167 0 : Reference < XTypeProvider > * >( 0 ) ),
168 : getCppuType( static_cast<
169 0 : Reference< XContentIdentifier > * >( 0 ) ) );
170 0 : pCollection = &collection;
171 0 : }
172 : }
173 0 : return (*pCollection).getTypes();
174 : }
175 :
176 : //=========================================================================
177 : //
178 : // XContentIdentifier methods.
179 : //
180 : //=========================================================================
181 :
182 : // virtual
183 18 : OUString SAL_CALL ContentIdentifier::getContentIdentifier()
184 : throw( RuntimeException )
185 : {
186 18 : return m_pImpl->m_aContentId;
187 : }
188 :
189 : //=========================================================================
190 : // virtual
191 0 : OUString SAL_CALL ContentIdentifier::getContentProviderScheme()
192 : throw( RuntimeException )
193 : {
194 0 : return m_pImpl->m_aProviderScheme;
195 : }
196 :
197 : } /* namespace ucbhelper */
198 :
199 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|