File: | ucbhelper/source/provider/contenthelper.cxx |
Location: | line 1040, column 5 |
Description: | Called C++ object pointer is null |
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 | TODO | |||
22 | ************************************************************************** | |||
23 | ||||
24 | *************************************************************************/ | |||
25 | ||||
26 | #include <boost/unordered_map.hpp> | |||
27 | #include <com/sun/star/ucb/ContentAction.hpp> | |||
28 | #include <com/sun/star/ucb/CommandInfoChange.hpp> | |||
29 | #include <com/sun/star/ucb/XPersistentPropertySet.hpp> | |||
30 | #include <com/sun/star/beans/PropertyAttribute.hpp> | |||
31 | #include <com/sun/star/beans/PropertySetInfoChange.hpp> | |||
32 | #include <cppuhelper/interfacecontainer.hxx> | |||
33 | ||||
34 | #include "osl/diagnose.h" | |||
35 | #include "osl/mutex.hxx" | |||
36 | #include "rtl/ref.hxx" | |||
37 | #include <ucbhelper/contentidentifier.hxx> | |||
38 | #include <ucbhelper/contenthelper.hxx> | |||
39 | #include <ucbhelper/providerhelper.hxx> | |||
40 | #include <ucbhelper/contentinfo.hxx> | |||
41 | ||||
42 | using namespace com::sun::star; | |||
43 | ||||
44 | namespace ucbhelper_impl | |||
45 | { | |||
46 | ||||
47 | //========================================================================= | |||
48 | // | |||
49 | // class PropertyEventSequence. | |||
50 | // | |||
51 | //========================================================================= | |||
52 | ||||
53 | class PropertyEventSequence | |||
54 | { | |||
55 | uno::Sequence< beans::PropertyChangeEvent > m_aSeq; | |||
56 | sal_uInt32 m_nPos; | |||
57 | ||||
58 | public: | |||
59 | PropertyEventSequence( sal_uInt32 nSize ) | |||
60 | : m_aSeq( nSize ), m_nPos( 0 ) {}; | |||
61 | ||||
62 | void append( const beans::PropertyChangeEvent& rEvt ) | |||
63 | { m_aSeq.getArray()[ m_nPos ] = rEvt; ++m_nPos; } | |||
64 | ||||
65 | const uno::Sequence< beans::PropertyChangeEvent >& getEvents() | |||
66 | { m_aSeq.realloc( m_nPos ); return m_aSeq; } | |||
67 | }; | |||
68 | ||||
69 | //========================================================================= | |||
70 | // | |||
71 | // PropertiesEventListenerMap. | |||
72 | // | |||
73 | //========================================================================= | |||
74 | ||||
75 | typedef void* XPropertiesChangeListenerPtr; // -> Compiler problems! | |||
76 | ||||
77 | struct equalPtr | |||
78 | { | |||
79 | bool operator()( const XPropertiesChangeListenerPtr& rp1, | |||
80 | const XPropertiesChangeListenerPtr& rp2 ) const | |||
81 | { | |||
82 | return ( rp1 == rp2 ); | |||
83 | } | |||
84 | }; | |||
85 | ||||
86 | struct hashPtr | |||
87 | { | |||
88 | size_t operator()( const XPropertiesChangeListenerPtr& rp ) const | |||
89 | { | |||
90 | return (size_t)rp; | |||
91 | } | |||
92 | }; | |||
93 | ||||
94 | typedef boost::unordered_map | |||
95 | < | |||
96 | XPropertiesChangeListenerPtr, | |||
97 | PropertyEventSequence*, | |||
98 | hashPtr, | |||
99 | equalPtr | |||
100 | > | |||
101 | PropertiesEventListenerMap; | |||
102 | ||||
103 | //========================================================================= | |||
104 | // | |||
105 | // PropertyChangeListenerContainer. | |||
106 | // | |||
107 | //========================================================================= | |||
108 | ||||
109 | struct equalStr | |||
110 | { | |||
111 | bool operator()( const rtl::OUString& s1, const rtl::OUString& s2 ) const | |||
112 | { | |||
113 | return !!( s1 == s2 ); | |||
114 | } | |||
115 | }; | |||
116 | ||||
117 | struct hashStr | |||
118 | { | |||
119 | size_t operator()( const rtl::OUString& rName ) const | |||
120 | { | |||
121 | return rName.hashCode(); | |||
122 | } | |||
123 | }; | |||
124 | ||||
125 | typedef cppu::OMultiTypeInterfaceContainerHelperVar | |||
126 | < | |||
127 | rtl::OUString, | |||
128 | hashStr, | |||
129 | equalStr | |||
130 | > PropertyChangeListeners; | |||
131 | ||||
132 | //========================================================================= | |||
133 | // | |||
134 | // struct ContentImplHelper_Impl | |||
135 | // | |||
136 | //========================================================================= | |||
137 | ||||
138 | struct ContentImplHelper_Impl | |||
139 | { | |||
140 | rtl::Reference< ::ucbhelper::PropertySetInfo > m_xPropSetInfo; | |||
141 | rtl::Reference< ::ucbhelper::CommandProcessorInfo > m_xCommandsInfo; | |||
142 | cppu::OInterfaceContainerHelper* m_pDisposeEventListeners; | |||
143 | cppu::OInterfaceContainerHelper* m_pContentEventListeners; | |||
144 | cppu::OInterfaceContainerHelper* m_pPropSetChangeListeners; | |||
145 | cppu::OInterfaceContainerHelper* m_pCommandChangeListeners; | |||
146 | PropertyChangeListeners* m_pPropertyChangeListeners; | |||
147 | ||||
148 | ContentImplHelper_Impl() | |||
149 | : m_pDisposeEventListeners( 0 ), | |||
150 | m_pContentEventListeners( 0 ), | |||
151 | m_pPropSetChangeListeners( 0 ), | |||
152 | m_pCommandChangeListeners( 0 ), | |||
153 | m_pPropertyChangeListeners( 0 ) {} | |||
154 | ||||
155 | ~ContentImplHelper_Impl() | |||
156 | { | |||
157 | delete m_pDisposeEventListeners; | |||
158 | delete m_pContentEventListeners; | |||
159 | delete m_pPropSetChangeListeners; | |||
160 | delete m_pCommandChangeListeners; | |||
161 | delete m_pPropertyChangeListeners; | |||
162 | } | |||
163 | }; | |||
164 | ||||
165 | } // namespace ucbhelper_impl | |||
166 | ||||
167 | using namespace ucbhelper_impl; | |||
168 | ||||
169 | //========================================================================= | |||
170 | //========================================================================= | |||
171 | // | |||
172 | // ContentImplHelper Implementation. | |||
173 | // | |||
174 | //========================================================================= | |||
175 | //========================================================================= | |||
176 | ||||
177 | namespace ucbhelper { | |||
178 | ||||
179 | ContentImplHelper::ContentImplHelper( | |||
180 | const uno::Reference< lang::XMultiServiceFactory >& rxSMgr, | |||
181 | const rtl::Reference< ContentProviderImplHelper >& rxProvider, | |||
182 | const uno::Reference< | |||
183 | com::sun::star::ucb::XContentIdentifier >& Identifier ) | |||
184 | : m_pImpl( new ContentImplHelper_Impl ), | |||
185 | m_xSMgr( rxSMgr ), | |||
186 | m_xIdentifier( Identifier ), | |||
187 | m_xProvider( rxProvider ), | |||
188 | m_nCommandId( 0 ) | |||
189 | { | |||
190 | } | |||
191 | ||||
192 | //========================================================================= | |||
193 | // virtual | |||
194 | ContentImplHelper::~ContentImplHelper() | |||
195 | { | |||
196 | delete m_pImpl; | |||
197 | } | |||
198 | ||||
199 | //========================================================================= | |||
200 | // | |||
201 | // XInterface methods. | |||
202 | // | |||
203 | //========================================================================= | |||
204 | ||||
205 | void SAL_CALL ContentImplHelper::acquire() | |||
206 | throw() | |||
207 | { | |||
208 | cppu::OWeakObject::acquire(); | |||
209 | } | |||
210 | ||||
211 | void SAL_CALL ContentImplHelper::release() | |||
212 | throw() | |||
213 | { | |||
214 | // #144882# - Call to OWeakObject::release may destroy m_xProvider. | |||
215 | // Prevent this. | |||
216 | rtl::Reference< ContentProviderImplHelper > xKeepProviderAlive( | |||
217 | m_xProvider ); | |||
218 | ||||
219 | { | |||
220 | osl::MutexGuard aGuard( m_xProvider->m_aMutex ); | |||
221 | OWeakObject::release(); | |||
222 | } | |||
223 | } | |||
224 | ||||
225 | uno::Any SAL_CALL ContentImplHelper::queryInterface( const uno::Type & rType ) | |||
226 | throw( uno::RuntimeException ) | |||
227 | { | |||
228 | com::sun::star::uno::Any aRet = cppu::queryInterface( rType, | |||
229 | static_cast< lang::XTypeProvider * >(this), | |||
230 | static_cast< lang::XServiceInfo * >(this), | |||
231 | static_cast< lang::XComponent * >(this), | |||
232 | static_cast< com::sun::star::ucb::XContent * >(this), | |||
233 | static_cast< com::sun::star::ucb::XCommandProcessor * >(this), | |||
234 | static_cast< beans::XPropertiesChangeNotifier * >(this), | |||
235 | static_cast< com::sun::star::ucb::XCommandInfoChangeNotifier * >(this), | |||
236 | static_cast< beans::XPropertyContainer * >(this), | |||
237 | static_cast< beans::XPropertySetInfoChangeNotifier * >(this), | |||
238 | static_cast< container::XChild * >(this)); | |||
239 | return aRet.hasValue() ? aRet : cppu::OWeakObject::queryInterface( rType ); | |||
240 | } | |||
241 | ||||
242 | //========================================================================= | |||
243 | // | |||
244 | // XTypeProvider methods. | |||
245 | // | |||
246 | //========================================================================= | |||
247 | ||||
248 | XTYPEPROVIDER_IMPL_10( ContentImplHelper,com::sun::star::uno::Sequence< sal_Int8 > ContentImplHelper ::getImplementationId() throw( com::sun::star::uno::RuntimeException ) { static cppu::OImplementationId* pId = __null; if ( !pId ) { osl::Guard< osl::Mutex > aGuard( osl::Mutex::getGlobalMutex () ); if ( !pId ) { static cppu::OImplementationId id( ((sal_Bool )0) ); pId = &id; } } return (*pId).getImplementationId() ; } com::sun::star::uno::Sequence< com::sun::star::uno::Type > ContentImplHelper::getTypes() throw( com::sun::star::uno ::RuntimeException ) { static cppu::OTypeCollection* pCollection = __null; if ( !pCollection ) { osl::Guard< osl::Mutex > aGuard( osl::Mutex::getGlobalMutex() ); if ( !pCollection ) { static cppu::OTypeCollection collection( getCppuType( static_cast < com::sun::star::uno::Reference< lang::XTypeProvider > * >( 0 ) ), getCppuType( static_cast< com::sun::star:: uno::Reference< lang::XServiceInfo > * >( 0 ) ), getCppuType ( static_cast< com::sun::star::uno::Reference< lang::XComponent > * >( 0 ) ), getCppuType( static_cast< com::sun::star ::uno::Reference< com::sun::star::ucb::XContent > * > ( 0 ) ), getCppuType( static_cast< com::sun::star::uno::Reference < com::sun::star::ucb::XCommandProcessor > * >( 0 ) ) , getCppuType( static_cast< com::sun::star::uno::Reference < beans::XPropertiesChangeNotifier > * >( 0 ) ), getCppuType ( static_cast< com::sun::star::uno::Reference< com::sun ::star::ucb::XCommandInfoChangeNotifier > * >( 0 ) ), getCppuType ( static_cast< com::sun::star::uno::Reference< beans::XPropertyContainer > * >( 0 ) ), getCppuType( static_cast< com::sun::star ::uno::Reference< beans::XPropertySetInfoChangeNotifier > * >( 0 ) ), getCppuType( static_cast< com::sun::star:: uno::Reference< container::XChild > * >( 0 ) ) ); pCollection = &collection; } } return (*pCollection).getTypes(); } | |||
249 | lang::XTypeProvider,com::sun::star::uno::Sequence< sal_Int8 > ContentImplHelper ::getImplementationId() throw( com::sun::star::uno::RuntimeException ) { static cppu::OImplementationId* pId = __null; if ( !pId ) { osl::Guard< osl::Mutex > aGuard( osl::Mutex::getGlobalMutex () ); if ( !pId ) { static cppu::OImplementationId id( ((sal_Bool )0) ); pId = &id; } } return (*pId).getImplementationId() ; } com::sun::star::uno::Sequence< com::sun::star::uno::Type > ContentImplHelper::getTypes() throw( com::sun::star::uno ::RuntimeException ) { static cppu::OTypeCollection* pCollection = __null; if ( !pCollection ) { osl::Guard< osl::Mutex > aGuard( osl::Mutex::getGlobalMutex() ); if ( !pCollection ) { static cppu::OTypeCollection collection( getCppuType( static_cast < com::sun::star::uno::Reference< lang::XTypeProvider > * >( 0 ) ), getCppuType( static_cast< com::sun::star:: uno::Reference< lang::XServiceInfo > * >( 0 ) ), getCppuType ( static_cast< com::sun::star::uno::Reference< lang::XComponent > * >( 0 ) ), getCppuType( static_cast< com::sun::star ::uno::Reference< com::sun::star::ucb::XContent > * > ( 0 ) ), getCppuType( static_cast< com::sun::star::uno::Reference < com::sun::star::ucb::XCommandProcessor > * >( 0 ) ) , getCppuType( static_cast< com::sun::star::uno::Reference < beans::XPropertiesChangeNotifier > * >( 0 ) ), getCppuType ( static_cast< com::sun::star::uno::Reference< com::sun ::star::ucb::XCommandInfoChangeNotifier > * >( 0 ) ), getCppuType ( static_cast< com::sun::star::uno::Reference< beans::XPropertyContainer > * >( 0 ) ), getCppuType( static_cast< com::sun::star ::uno::Reference< beans::XPropertySetInfoChangeNotifier > * >( 0 ) ), getCppuType( static_cast< com::sun::star:: uno::Reference< container::XChild > * >( 0 ) ) ); pCollection = &collection; } } return (*pCollection).getTypes(); } | |||
250 | lang::XServiceInfo,com::sun::star::uno::Sequence< sal_Int8 > ContentImplHelper ::getImplementationId() throw( com::sun::star::uno::RuntimeException ) { static cppu::OImplementationId* pId = __null; if ( !pId ) { osl::Guard< osl::Mutex > aGuard( osl::Mutex::getGlobalMutex () ); if ( !pId ) { static cppu::OImplementationId id( ((sal_Bool )0) ); pId = &id; } } return (*pId).getImplementationId() ; } com::sun::star::uno::Sequence< com::sun::star::uno::Type > ContentImplHelper::getTypes() throw( com::sun::star::uno ::RuntimeException ) { static cppu::OTypeCollection* pCollection = __null; if ( !pCollection ) { osl::Guard< osl::Mutex > aGuard( osl::Mutex::getGlobalMutex() ); if ( !pCollection ) { static cppu::OTypeCollection collection( getCppuType( static_cast < com::sun::star::uno::Reference< lang::XTypeProvider > * >( 0 ) ), getCppuType( static_cast< com::sun::star:: uno::Reference< lang::XServiceInfo > * >( 0 ) ), getCppuType ( static_cast< com::sun::star::uno::Reference< lang::XComponent > * >( 0 ) ), getCppuType( static_cast< com::sun::star ::uno::Reference< com::sun::star::ucb::XContent > * > ( 0 ) ), getCppuType( static_cast< com::sun::star::uno::Reference < com::sun::star::ucb::XCommandProcessor > * >( 0 ) ) , getCppuType( static_cast< com::sun::star::uno::Reference < beans::XPropertiesChangeNotifier > * >( 0 ) ), getCppuType ( static_cast< com::sun::star::uno::Reference< com::sun ::star::ucb::XCommandInfoChangeNotifier > * >( 0 ) ), getCppuType ( static_cast< com::sun::star::uno::Reference< beans::XPropertyContainer > * >( 0 ) ), getCppuType( static_cast< com::sun::star ::uno::Reference< beans::XPropertySetInfoChangeNotifier > * >( 0 ) ), getCppuType( static_cast< com::sun::star:: uno::Reference< container::XChild > * >( 0 ) ) ); pCollection = &collection; } } return (*pCollection).getTypes(); } | |||
251 | lang::XComponent,com::sun::star::uno::Sequence< sal_Int8 > ContentImplHelper ::getImplementationId() throw( com::sun::star::uno::RuntimeException ) { static cppu::OImplementationId* pId = __null; if ( !pId ) { osl::Guard< osl::Mutex > aGuard( osl::Mutex::getGlobalMutex () ); if ( !pId ) { static cppu::OImplementationId id( ((sal_Bool )0) ); pId = &id; } } return (*pId).getImplementationId() ; } com::sun::star::uno::Sequence< com::sun::star::uno::Type > ContentImplHelper::getTypes() throw( com::sun::star::uno ::RuntimeException ) { static cppu::OTypeCollection* pCollection = __null; if ( !pCollection ) { osl::Guard< osl::Mutex > aGuard( osl::Mutex::getGlobalMutex() ); if ( !pCollection ) { static cppu::OTypeCollection collection( getCppuType( static_cast < com::sun::star::uno::Reference< lang::XTypeProvider > * >( 0 ) ), getCppuType( static_cast< com::sun::star:: uno::Reference< lang::XServiceInfo > * >( 0 ) ), getCppuType ( static_cast< com::sun::star::uno::Reference< lang::XComponent > * >( 0 ) ), getCppuType( static_cast< com::sun::star ::uno::Reference< com::sun::star::ucb::XContent > * > ( 0 ) ), getCppuType( static_cast< com::sun::star::uno::Reference < com::sun::star::ucb::XCommandProcessor > * >( 0 ) ) , getCppuType( static_cast< com::sun::star::uno::Reference < beans::XPropertiesChangeNotifier > * >( 0 ) ), getCppuType ( static_cast< com::sun::star::uno::Reference< com::sun ::star::ucb::XCommandInfoChangeNotifier > * >( 0 ) ), getCppuType ( static_cast< com::sun::star::uno::Reference< beans::XPropertyContainer > * >( 0 ) ), getCppuType( static_cast< com::sun::star ::uno::Reference< beans::XPropertySetInfoChangeNotifier > * >( 0 ) ), getCppuType( static_cast< com::sun::star:: uno::Reference< container::XChild > * >( 0 ) ) ); pCollection = &collection; } } return (*pCollection).getTypes(); } | |||
252 | com::sun::star::ucb::XContent,com::sun::star::uno::Sequence< sal_Int8 > ContentImplHelper ::getImplementationId() throw( com::sun::star::uno::RuntimeException ) { static cppu::OImplementationId* pId = __null; if ( !pId ) { osl::Guard< osl::Mutex > aGuard( osl::Mutex::getGlobalMutex () ); if ( !pId ) { static cppu::OImplementationId id( ((sal_Bool )0) ); pId = &id; } } return (*pId).getImplementationId() ; } com::sun::star::uno::Sequence< com::sun::star::uno::Type > ContentImplHelper::getTypes() throw( com::sun::star::uno ::RuntimeException ) { static cppu::OTypeCollection* pCollection = __null; if ( !pCollection ) { osl::Guard< osl::Mutex > aGuard( osl::Mutex::getGlobalMutex() ); if ( !pCollection ) { static cppu::OTypeCollection collection( getCppuType( static_cast < com::sun::star::uno::Reference< lang::XTypeProvider > * >( 0 ) ), getCppuType( static_cast< com::sun::star:: uno::Reference< lang::XServiceInfo > * >( 0 ) ), getCppuType ( static_cast< com::sun::star::uno::Reference< lang::XComponent > * >( 0 ) ), getCppuType( static_cast< com::sun::star ::uno::Reference< com::sun::star::ucb::XContent > * > ( 0 ) ), getCppuType( static_cast< com::sun::star::uno::Reference < com::sun::star::ucb::XCommandProcessor > * >( 0 ) ) , getCppuType( static_cast< com::sun::star::uno::Reference < beans::XPropertiesChangeNotifier > * >( 0 ) ), getCppuType ( static_cast< com::sun::star::uno::Reference< com::sun ::star::ucb::XCommandInfoChangeNotifier > * >( 0 ) ), getCppuType ( static_cast< com::sun::star::uno::Reference< beans::XPropertyContainer > * >( 0 ) ), getCppuType( static_cast< com::sun::star ::uno::Reference< beans::XPropertySetInfoChangeNotifier > * >( 0 ) ), getCppuType( static_cast< com::sun::star:: uno::Reference< container::XChild > * >( 0 ) ) ); pCollection = &collection; } } return (*pCollection).getTypes(); } | |||
253 | com::sun::star::ucb::XCommandProcessor,com::sun::star::uno::Sequence< sal_Int8 > ContentImplHelper ::getImplementationId() throw( com::sun::star::uno::RuntimeException ) { static cppu::OImplementationId* pId = __null; if ( !pId ) { osl::Guard< osl::Mutex > aGuard( osl::Mutex::getGlobalMutex () ); if ( !pId ) { static cppu::OImplementationId id( ((sal_Bool )0) ); pId = &id; } } return (*pId).getImplementationId() ; } com::sun::star::uno::Sequence< com::sun::star::uno::Type > ContentImplHelper::getTypes() throw( com::sun::star::uno ::RuntimeException ) { static cppu::OTypeCollection* pCollection = __null; if ( !pCollection ) { osl::Guard< osl::Mutex > aGuard( osl::Mutex::getGlobalMutex() ); if ( !pCollection ) { static cppu::OTypeCollection collection( getCppuType( static_cast < com::sun::star::uno::Reference< lang::XTypeProvider > * >( 0 ) ), getCppuType( static_cast< com::sun::star:: uno::Reference< lang::XServiceInfo > * >( 0 ) ), getCppuType ( static_cast< com::sun::star::uno::Reference< lang::XComponent > * >( 0 ) ), getCppuType( static_cast< com::sun::star ::uno::Reference< com::sun::star::ucb::XContent > * > ( 0 ) ), getCppuType( static_cast< com::sun::star::uno::Reference < com::sun::star::ucb::XCommandProcessor > * >( 0 ) ) , getCppuType( static_cast< com::sun::star::uno::Reference < beans::XPropertiesChangeNotifier > * >( 0 ) ), getCppuType ( static_cast< com::sun::star::uno::Reference< com::sun ::star::ucb::XCommandInfoChangeNotifier > * >( 0 ) ), getCppuType ( static_cast< com::sun::star::uno::Reference< beans::XPropertyContainer > * >( 0 ) ), getCppuType( static_cast< com::sun::star ::uno::Reference< beans::XPropertySetInfoChangeNotifier > * >( 0 ) ), getCppuType( static_cast< com::sun::star:: uno::Reference< container::XChild > * >( 0 ) ) ); pCollection = &collection; } } return (*pCollection).getTypes(); } | |||
254 | beans::XPropertiesChangeNotifier,com::sun::star::uno::Sequence< sal_Int8 > ContentImplHelper ::getImplementationId() throw( com::sun::star::uno::RuntimeException ) { static cppu::OImplementationId* pId = __null; if ( !pId ) { osl::Guard< osl::Mutex > aGuard( osl::Mutex::getGlobalMutex () ); if ( !pId ) { static cppu::OImplementationId id( ((sal_Bool )0) ); pId = &id; } } return (*pId).getImplementationId() ; } com::sun::star::uno::Sequence< com::sun::star::uno::Type > ContentImplHelper::getTypes() throw( com::sun::star::uno ::RuntimeException ) { static cppu::OTypeCollection* pCollection = __null; if ( !pCollection ) { osl::Guard< osl::Mutex > aGuard( osl::Mutex::getGlobalMutex() ); if ( !pCollection ) { static cppu::OTypeCollection collection( getCppuType( static_cast < com::sun::star::uno::Reference< lang::XTypeProvider > * >( 0 ) ), getCppuType( static_cast< com::sun::star:: uno::Reference< lang::XServiceInfo > * >( 0 ) ), getCppuType ( static_cast< com::sun::star::uno::Reference< lang::XComponent > * >( 0 ) ), getCppuType( static_cast< com::sun::star ::uno::Reference< com::sun::star::ucb::XContent > * > ( 0 ) ), getCppuType( static_cast< com::sun::star::uno::Reference < com::sun::star::ucb::XCommandProcessor > * >( 0 ) ) , getCppuType( static_cast< com::sun::star::uno::Reference < beans::XPropertiesChangeNotifier > * >( 0 ) ), getCppuType ( static_cast< com::sun::star::uno::Reference< com::sun ::star::ucb::XCommandInfoChangeNotifier > * >( 0 ) ), getCppuType ( static_cast< com::sun::star::uno::Reference< beans::XPropertyContainer > * >( 0 ) ), getCppuType( static_cast< com::sun::star ::uno::Reference< beans::XPropertySetInfoChangeNotifier > * >( 0 ) ), getCppuType( static_cast< com::sun::star:: uno::Reference< container::XChild > * >( 0 ) ) ); pCollection = &collection; } } return (*pCollection).getTypes(); } | |||
255 | com::sun::star::ucb::XCommandInfoChangeNotifier,com::sun::star::uno::Sequence< sal_Int8 > ContentImplHelper ::getImplementationId() throw( com::sun::star::uno::RuntimeException ) { static cppu::OImplementationId* pId = __null; if ( !pId ) { osl::Guard< osl::Mutex > aGuard( osl::Mutex::getGlobalMutex () ); if ( !pId ) { static cppu::OImplementationId id( ((sal_Bool )0) ); pId = &id; } } return (*pId).getImplementationId() ; } com::sun::star::uno::Sequence< com::sun::star::uno::Type > ContentImplHelper::getTypes() throw( com::sun::star::uno ::RuntimeException ) { static cppu::OTypeCollection* pCollection = __null; if ( !pCollection ) { osl::Guard< osl::Mutex > aGuard( osl::Mutex::getGlobalMutex() ); if ( !pCollection ) { static cppu::OTypeCollection collection( getCppuType( static_cast < com::sun::star::uno::Reference< lang::XTypeProvider > * >( 0 ) ), getCppuType( static_cast< com::sun::star:: uno::Reference< lang::XServiceInfo > * >( 0 ) ), getCppuType ( static_cast< com::sun::star::uno::Reference< lang::XComponent > * >( 0 ) ), getCppuType( static_cast< com::sun::star ::uno::Reference< com::sun::star::ucb::XContent > * > ( 0 ) ), getCppuType( static_cast< com::sun::star::uno::Reference < com::sun::star::ucb::XCommandProcessor > * >( 0 ) ) , getCppuType( static_cast< com::sun::star::uno::Reference < beans::XPropertiesChangeNotifier > * >( 0 ) ), getCppuType ( static_cast< com::sun::star::uno::Reference< com::sun ::star::ucb::XCommandInfoChangeNotifier > * >( 0 ) ), getCppuType ( static_cast< com::sun::star::uno::Reference< beans::XPropertyContainer > * >( 0 ) ), getCppuType( static_cast< com::sun::star ::uno::Reference< beans::XPropertySetInfoChangeNotifier > * >( 0 ) ), getCppuType( static_cast< com::sun::star:: uno::Reference< container::XChild > * >( 0 ) ) ); pCollection = &collection; } } return (*pCollection).getTypes(); } | |||
256 | beans::XPropertyContainer,com::sun::star::uno::Sequence< sal_Int8 > ContentImplHelper ::getImplementationId() throw( com::sun::star::uno::RuntimeException ) { static cppu::OImplementationId* pId = __null; if ( !pId ) { osl::Guard< osl::Mutex > aGuard( osl::Mutex::getGlobalMutex () ); if ( !pId ) { static cppu::OImplementationId id( ((sal_Bool )0) ); pId = &id; } } return (*pId).getImplementationId() ; } com::sun::star::uno::Sequence< com::sun::star::uno::Type > ContentImplHelper::getTypes() throw( com::sun::star::uno ::RuntimeException ) { static cppu::OTypeCollection* pCollection = __null; if ( !pCollection ) { osl::Guard< osl::Mutex > aGuard( osl::Mutex::getGlobalMutex() ); if ( !pCollection ) { static cppu::OTypeCollection collection( getCppuType( static_cast < com::sun::star::uno::Reference< lang::XTypeProvider > * >( 0 ) ), getCppuType( static_cast< com::sun::star:: uno::Reference< lang::XServiceInfo > * >( 0 ) ), getCppuType ( static_cast< com::sun::star::uno::Reference< lang::XComponent > * >( 0 ) ), getCppuType( static_cast< com::sun::star ::uno::Reference< com::sun::star::ucb::XContent > * > ( 0 ) ), getCppuType( static_cast< com::sun::star::uno::Reference < com::sun::star::ucb::XCommandProcessor > * >( 0 ) ) , getCppuType( static_cast< com::sun::star::uno::Reference < beans::XPropertiesChangeNotifier > * >( 0 ) ), getCppuType ( static_cast< com::sun::star::uno::Reference< com::sun ::star::ucb::XCommandInfoChangeNotifier > * >( 0 ) ), getCppuType ( static_cast< com::sun::star::uno::Reference< beans::XPropertyContainer > * >( 0 ) ), getCppuType( static_cast< com::sun::star ::uno::Reference< beans::XPropertySetInfoChangeNotifier > * >( 0 ) ), getCppuType( static_cast< com::sun::star:: uno::Reference< container::XChild > * >( 0 ) ) ); pCollection = &collection; } } return (*pCollection).getTypes(); } | |||
257 | beans::XPropertySetInfoChangeNotifier,com::sun::star::uno::Sequence< sal_Int8 > ContentImplHelper ::getImplementationId() throw( com::sun::star::uno::RuntimeException ) { static cppu::OImplementationId* pId = __null; if ( !pId ) { osl::Guard< osl::Mutex > aGuard( osl::Mutex::getGlobalMutex () ); if ( !pId ) { static cppu::OImplementationId id( ((sal_Bool )0) ); pId = &id; } } return (*pId).getImplementationId() ; } com::sun::star::uno::Sequence< com::sun::star::uno::Type > ContentImplHelper::getTypes() throw( com::sun::star::uno ::RuntimeException ) { static cppu::OTypeCollection* pCollection = __null; if ( !pCollection ) { osl::Guard< osl::Mutex > aGuard( osl::Mutex::getGlobalMutex() ); if ( !pCollection ) { static cppu::OTypeCollection collection( getCppuType( static_cast < com::sun::star::uno::Reference< lang::XTypeProvider > * >( 0 ) ), getCppuType( static_cast< com::sun::star:: uno::Reference< lang::XServiceInfo > * >( 0 ) ), getCppuType ( static_cast< com::sun::star::uno::Reference< lang::XComponent > * >( 0 ) ), getCppuType( static_cast< com::sun::star ::uno::Reference< com::sun::star::ucb::XContent > * > ( 0 ) ), getCppuType( static_cast< com::sun::star::uno::Reference < com::sun::star::ucb::XCommandProcessor > * >( 0 ) ) , getCppuType( static_cast< com::sun::star::uno::Reference < beans::XPropertiesChangeNotifier > * >( 0 ) ), getCppuType ( static_cast< com::sun::star::uno::Reference< com::sun ::star::ucb::XCommandInfoChangeNotifier > * >( 0 ) ), getCppuType ( static_cast< com::sun::star::uno::Reference< beans::XPropertyContainer > * >( 0 ) ), getCppuType( static_cast< com::sun::star ::uno::Reference< beans::XPropertySetInfoChangeNotifier > * >( 0 ) ), getCppuType( static_cast< com::sun::star:: uno::Reference< container::XChild > * >( 0 ) ) ); pCollection = &collection; } } return (*pCollection).getTypes(); } | |||
258 | container::XChild )com::sun::star::uno::Sequence< sal_Int8 > ContentImplHelper ::getImplementationId() throw( com::sun::star::uno::RuntimeException ) { static cppu::OImplementationId* pId = __null; if ( !pId ) { osl::Guard< osl::Mutex > aGuard( osl::Mutex::getGlobalMutex () ); if ( !pId ) { static cppu::OImplementationId id( ((sal_Bool )0) ); pId = &id; } } return (*pId).getImplementationId() ; } com::sun::star::uno::Sequence< com::sun::star::uno::Type > ContentImplHelper::getTypes() throw( com::sun::star::uno ::RuntimeException ) { static cppu::OTypeCollection* pCollection = __null; if ( !pCollection ) { osl::Guard< osl::Mutex > aGuard( osl::Mutex::getGlobalMutex() ); if ( !pCollection ) { static cppu::OTypeCollection collection( getCppuType( static_cast < com::sun::star::uno::Reference< lang::XTypeProvider > * >( 0 ) ), getCppuType( static_cast< com::sun::star:: uno::Reference< lang::XServiceInfo > * >( 0 ) ), getCppuType ( static_cast< com::sun::star::uno::Reference< lang::XComponent > * >( 0 ) ), getCppuType( static_cast< com::sun::star ::uno::Reference< com::sun::star::ucb::XContent > * > ( 0 ) ), getCppuType( static_cast< com::sun::star::uno::Reference < com::sun::star::ucb::XCommandProcessor > * >( 0 ) ) , getCppuType( static_cast< com::sun::star::uno::Reference < beans::XPropertiesChangeNotifier > * >( 0 ) ), getCppuType ( static_cast< com::sun::star::uno::Reference< com::sun ::star::ucb::XCommandInfoChangeNotifier > * >( 0 ) ), getCppuType ( static_cast< com::sun::star::uno::Reference< beans::XPropertyContainer > * >( 0 ) ), getCppuType( static_cast< com::sun::star ::uno::Reference< beans::XPropertySetInfoChangeNotifier > * >( 0 ) ), getCppuType( static_cast< com::sun::star:: uno::Reference< container::XChild > * >( 0 ) ) ); pCollection = &collection; } } return (*pCollection).getTypes(); }; | |||
259 | ||||
260 | //========================================================================= | |||
261 | // | |||
262 | // XServiceInfo methods. | |||
263 | // | |||
264 | //========================================================================= | |||
265 | ||||
266 | // virtual | |||
267 | sal_Bool SAL_CALL ContentImplHelper::supportsService( | |||
268 | const rtl::OUString& ServiceName ) | |||
269 | throw( uno::RuntimeException ) | |||
270 | { | |||
271 | uno::Sequence< rtl::OUString > aSNL = getSupportedServiceNames(); | |||
272 | const rtl::OUString* pArray = aSNL.getConstArray(); | |||
273 | for ( sal_Int32 i = 0; i < aSNL.getLength(); i++ ) | |||
274 | { | |||
275 | if ( pArray[ i ] == ServiceName ) | |||
276 | return sal_True((sal_Bool)1); | |||
277 | } | |||
278 | ||||
279 | return sal_False((sal_Bool)0); | |||
280 | } | |||
281 | ||||
282 | //========================================================================= | |||
283 | // | |||
284 | // XComponent methods. | |||
285 | // | |||
286 | //========================================================================= | |||
287 | ||||
288 | // virtual | |||
289 | void SAL_CALL ContentImplHelper::dispose() | |||
290 | throw( uno::RuntimeException ) | |||
291 | { | |||
292 | osl::MutexGuard aGuard( m_aMutex ); | |||
293 | ||||
294 | if ( m_pImpl->m_pDisposeEventListeners && | |||
295 | m_pImpl->m_pDisposeEventListeners->getLength() ) | |||
296 | { | |||
297 | lang::EventObject aEvt; | |||
298 | aEvt.Source = static_cast< lang::XComponent * >( this ); | |||
299 | m_pImpl->m_pDisposeEventListeners->disposeAndClear( aEvt ); | |||
300 | } | |||
301 | ||||
302 | if ( m_pImpl->m_pContentEventListeners && | |||
303 | m_pImpl->m_pContentEventListeners->getLength() ) | |||
304 | { | |||
305 | lang::EventObject aEvt; | |||
306 | aEvt.Source = static_cast< com::sun::star::ucb::XContent * >( this ); | |||
307 | m_pImpl->m_pContentEventListeners->disposeAndClear( aEvt ); | |||
308 | } | |||
309 | ||||
310 | if ( m_pImpl->m_pPropSetChangeListeners && | |||
311 | m_pImpl->m_pPropSetChangeListeners->getLength() ) | |||
312 | { | |||
313 | lang::EventObject aEvt; | |||
314 | aEvt.Source | |||
315 | = static_cast< beans::XPropertySetInfoChangeNotifier * >( this ); | |||
316 | m_pImpl->m_pPropSetChangeListeners->disposeAndClear( aEvt ); | |||
317 | } | |||
318 | ||||
319 | if ( m_pImpl->m_pCommandChangeListeners && | |||
320 | m_pImpl->m_pCommandChangeListeners->getLength() ) | |||
321 | { | |||
322 | lang::EventObject aEvt; | |||
323 | aEvt.Source = static_cast< com::sun::star::ucb::XCommandInfoChangeNotifier * >( this ); | |||
324 | m_pImpl->m_pCommandChangeListeners->disposeAndClear( aEvt ); | |||
325 | } | |||
326 | ||||
327 | if ( m_pImpl->m_pPropertyChangeListeners ) | |||
328 | { | |||
329 | lang::EventObject aEvt; | |||
330 | aEvt.Source | |||
331 | = static_cast< beans::XPropertiesChangeNotifier * >( this ); | |||
332 | m_pImpl->m_pPropertyChangeListeners->disposeAndClear( aEvt ); | |||
333 | } | |||
334 | } | |||
335 | ||||
336 | //========================================================================= | |||
337 | // virtual | |||
338 | void SAL_CALL ContentImplHelper::addEventListener( | |||
339 | const uno::Reference< lang::XEventListener >& Listener ) | |||
340 | throw( uno::RuntimeException ) | |||
341 | { | |||
342 | osl::MutexGuard aGuard( m_aMutex ); | |||
343 | ||||
344 | if ( !m_pImpl->m_pDisposeEventListeners ) | |||
345 | m_pImpl->m_pDisposeEventListeners | |||
346 | = new cppu::OInterfaceContainerHelper( m_aMutex ); | |||
347 | ||||
348 | m_pImpl->m_pDisposeEventListeners->addInterface( Listener ); | |||
349 | } | |||
350 | ||||
351 | //========================================================================= | |||
352 | // virtual | |||
353 | void SAL_CALL ContentImplHelper::removeEventListener( | |||
354 | const uno::Reference< lang::XEventListener >& Listener ) | |||
355 | throw( uno::RuntimeException ) | |||
356 | { | |||
357 | osl::MutexGuard aGuard( m_aMutex ); | |||
358 | ||||
359 | if ( m_pImpl->m_pDisposeEventListeners ) | |||
360 | m_pImpl->m_pDisposeEventListeners->removeInterface( Listener ); | |||
361 | } | |||
362 | ||||
363 | //========================================================================= | |||
364 | // | |||
365 | // XContent methods. | |||
366 | // | |||
367 | //========================================================================= | |||
368 | ||||
369 | // virtual | |||
370 | uno::Reference< com::sun::star::ucb::XContentIdentifier > SAL_CALL | |||
371 | ContentImplHelper::getIdentifier() | |||
372 | throw( uno::RuntimeException ) | |||
373 | { | |||
374 | return m_xIdentifier; | |||
375 | } | |||
376 | ||||
377 | //========================================================================= | |||
378 | // virtual | |||
379 | void SAL_CALL ContentImplHelper::addContentEventListener( | |||
380 | const uno::Reference< com::sun::star::ucb::XContentEventListener >& Listener ) | |||
381 | throw( uno::RuntimeException ) | |||
382 | { | |||
383 | osl::MutexGuard aGuard( m_aMutex ); | |||
384 | ||||
385 | if ( !m_pImpl->m_pContentEventListeners ) | |||
386 | m_pImpl->m_pContentEventListeners | |||
387 | = new cppu::OInterfaceContainerHelper( m_aMutex ); | |||
388 | ||||
389 | m_pImpl->m_pContentEventListeners->addInterface( Listener ); | |||
390 | } | |||
391 | ||||
392 | //========================================================================= | |||
393 | // virtual | |||
394 | void SAL_CALL ContentImplHelper::removeContentEventListener( | |||
395 | const uno::Reference< com::sun::star::ucb::XContentEventListener >& Listener ) | |||
396 | throw( uno::RuntimeException ) | |||
397 | { | |||
398 | osl::MutexGuard aGuard( m_aMutex ); | |||
399 | ||||
400 | if ( m_pImpl->m_pContentEventListeners ) | |||
401 | m_pImpl->m_pContentEventListeners->removeInterface( Listener ); | |||
402 | } | |||
403 | ||||
404 | //========================================================================= | |||
405 | // | |||
406 | // XCommandProcessor methods. | |||
407 | // | |||
408 | //========================================================================= | |||
409 | ||||
410 | // virtual | |||
411 | sal_Int32 SAL_CALL ContentImplHelper::createCommandIdentifier() | |||
412 | throw( uno::RuntimeException ) | |||
413 | { | |||
414 | osl::MutexGuard aGuard( m_aMutex ); | |||
415 | ||||
416 | // Just increase counter on every call to generate an identifier. | |||
417 | return ++m_nCommandId; | |||
418 | } | |||
419 | ||||
420 | //========================================================================= | |||
421 | // | |||
422 | // XPropertiesChangeNotifier methods. | |||
423 | // | |||
424 | //========================================================================= | |||
425 | ||||
426 | // virtual | |||
427 | void SAL_CALL ContentImplHelper::addPropertiesChangeListener( | |||
428 | const uno::Sequence< rtl::OUString >& PropertyNames, | |||
429 | const uno::Reference< beans::XPropertiesChangeListener >& Listener ) | |||
430 | throw( uno::RuntimeException ) | |||
431 | { | |||
432 | osl::MutexGuard aGuard( m_aMutex ); | |||
433 | ||||
434 | if ( !m_pImpl->m_pPropertyChangeListeners ) | |||
435 | m_pImpl->m_pPropertyChangeListeners | |||
436 | = new PropertyChangeListeners( m_aMutex ); | |||
437 | ||||
438 | sal_Int32 nCount = PropertyNames.getLength(); | |||
439 | if ( !nCount ) | |||
440 | { | |||
441 | // Note: An empty sequence means a listener for "all" properties. | |||
442 | m_pImpl->m_pPropertyChangeListeners->addInterface( | |||
443 | rtl::OUString(), Listener ); | |||
444 | } | |||
445 | else | |||
446 | { | |||
447 | const rtl::OUString* pSeq = PropertyNames.getConstArray(); | |||
448 | ||||
449 | for ( sal_Int32 n = 0; n < nCount; ++n ) | |||
450 | { | |||
451 | const rtl::OUString& rName = pSeq[ n ]; | |||
452 | if ( !rName.isEmpty() ) | |||
453 | m_pImpl->m_pPropertyChangeListeners->addInterface( | |||
454 | rName, Listener ); | |||
455 | } | |||
456 | } | |||
457 | } | |||
458 | ||||
459 | //========================================================================= | |||
460 | // virtual | |||
461 | void SAL_CALL ContentImplHelper::removePropertiesChangeListener( | |||
462 | const uno::Sequence< rtl::OUString >& PropertyNames, | |||
463 | const uno::Reference< beans::XPropertiesChangeListener >& Listener ) | |||
464 | throw( uno::RuntimeException ) | |||
465 | { | |||
466 | osl::MutexGuard aGuard( m_aMutex ); | |||
467 | ||||
468 | if ( !m_pImpl->m_pPropertyChangeListeners ) | |||
469 | return; | |||
470 | ||||
471 | sal_Int32 nCount = PropertyNames.getLength(); | |||
472 | if ( !nCount ) | |||
473 | { | |||
474 | // Note: An empty sequence means a listener for "all" properties. | |||
475 | m_pImpl->m_pPropertyChangeListeners->removeInterface( | |||
476 | rtl::OUString(), Listener ); | |||
477 | } | |||
478 | else | |||
479 | { | |||
480 | const rtl::OUString* pSeq = PropertyNames.getConstArray(); | |||
481 | ||||
482 | for ( sal_Int32 n = 0; n < nCount; ++n ) | |||
483 | { | |||
484 | const rtl::OUString& rName = pSeq[ n ]; | |||
485 | if ( !rName.isEmpty() ) | |||
486 | m_pImpl->m_pPropertyChangeListeners->removeInterface( | |||
487 | rName, Listener ); | |||
488 | } | |||
489 | } | |||
490 | } | |||
491 | ||||
492 | //========================================================================= | |||
493 | // | |||
494 | // XCommandInfoChangeNotifier methods. | |||
495 | // | |||
496 | //========================================================================= | |||
497 | ||||
498 | // virtual | |||
499 | void SAL_CALL ContentImplHelper::addCommandInfoChangeListener( | |||
500 | const uno::Reference< com::sun::star::ucb::XCommandInfoChangeListener >& Listener ) | |||
501 | throw( uno::RuntimeException ) | |||
502 | { | |||
503 | osl::MutexGuard aGuard( m_aMutex ); | |||
504 | ||||
505 | if ( !m_pImpl->m_pCommandChangeListeners ) | |||
506 | m_pImpl->m_pCommandChangeListeners | |||
507 | = new cppu::OInterfaceContainerHelper( m_aMutex ); | |||
508 | ||||
509 | m_pImpl->m_pCommandChangeListeners->addInterface( Listener ); | |||
510 | } | |||
511 | ||||
512 | //========================================================================= | |||
513 | // virtual | |||
514 | void SAL_CALL ContentImplHelper::removeCommandInfoChangeListener( | |||
515 | const uno::Reference< com::sun::star::ucb::XCommandInfoChangeListener >& Listener ) | |||
516 | throw( uno::RuntimeException ) | |||
517 | { | |||
518 | osl::MutexGuard aGuard( m_aMutex ); | |||
519 | ||||
520 | if ( m_pImpl->m_pCommandChangeListeners ) | |||
521 | m_pImpl->m_pCommandChangeListeners->removeInterface( Listener ); | |||
522 | } | |||
523 | ||||
524 | //========================================================================= | |||
525 | // | |||
526 | // XPropertyContainer methods. | |||
527 | // | |||
528 | //========================================================================= | |||
529 | ||||
530 | // virtual | |||
531 | void SAL_CALL ContentImplHelper::addProperty( | |||
532 | const rtl::OUString& Name, | |||
533 | sal_Int16 Attributes, | |||
534 | const uno::Any& DefaultValue ) | |||
535 | throw( beans::PropertyExistException, | |||
536 | beans::IllegalTypeException, | |||
537 | lang::IllegalArgumentException, | |||
538 | uno::RuntimeException ) | |||
539 | { | |||
540 | osl::MutexGuard aGuard( m_aMutex ); | |||
541 | ||||
542 | ////////////////////////////////////////////////////////////////////// | |||
543 | // Make sure a property with the requested name does not already | |||
544 | // exist in dynamic and static(!) properties. | |||
545 | ////////////////////////////////////////////////////////////////////// | |||
546 | ||||
547 | // @@@ Need real command environment here, but where to get it from? | |||
548 | // XPropertyContainer interface should be replaced by | |||
549 | // XCommandProcessor commands! | |||
550 | uno::Reference< com::sun::star::ucb::XCommandEnvironment > xEnv; | |||
551 | ||||
552 | if ( getPropertySetInfo( xEnv )->hasPropertyByName( Name ) ) | |||
553 | { | |||
554 | // Property does already exist. | |||
555 | throw beans::PropertyExistException(); | |||
556 | } | |||
557 | ||||
558 | ////////////////////////////////////////////////////////////////////// | |||
559 | // Add a new dynamic property. | |||
560 | ////////////////////////////////////////////////////////////////////// | |||
561 | ||||
562 | // Open/create persistent property set. | |||
563 | uno::Reference< com::sun::star::ucb::XPersistentPropertySet > xSet( | |||
564 | getAdditionalPropertySet( sal_True((sal_Bool)1) ) ); | |||
565 | ||||
566 | OSL_ENSURE( xSet.is(),do { if (true && (!(xSet.is()))) { sal_detail_logFormat ((SAL_DETAIL_LOG_LEVEL_WARN), ("legacy.osl"), ("/usr/local/src/libreoffice/ucbhelper/source/provider/contenthelper.cxx" ":" "567" ": "), "%s", "ContentImplHelper::addProperty - No property set!" ); } } while (false) | |||
567 | "ContentImplHelper::addProperty - No property set!" )do { if (true && (!(xSet.is()))) { sal_detail_logFormat ((SAL_DETAIL_LOG_LEVEL_WARN), ("legacy.osl"), ("/usr/local/src/libreoffice/ucbhelper/source/provider/contenthelper.cxx" ":" "567" ": "), "%s", "ContentImplHelper::addProperty - No property set!" ); } } while (false); | |||
568 | ||||
569 | if ( xSet.is() ) | |||
570 | { | |||
571 | uno::Reference< beans::XPropertyContainer > xContainer( | |||
572 | xSet, uno::UNO_QUERY ); | |||
573 | ||||
574 | OSL_ENSURE(do { if (true && (!(xContainer.is()))) { sal_detail_logFormat ((SAL_DETAIL_LOG_LEVEL_WARN), ("legacy.osl"), ("/usr/local/src/libreoffice/ucbhelper/source/provider/contenthelper.cxx" ":" "576" ": "), "%s", "ContentImplHelper::addProperty - No property container!" ); } } while (false) | |||
575 | xContainer.is(),do { if (true && (!(xContainer.is()))) { sal_detail_logFormat ((SAL_DETAIL_LOG_LEVEL_WARN), ("legacy.osl"), ("/usr/local/src/libreoffice/ucbhelper/source/provider/contenthelper.cxx" ":" "576" ": "), "%s", "ContentImplHelper::addProperty - No property container!" ); } } while (false) | |||
576 | "ContentImplHelper::addProperty - No property container!" )do { if (true && (!(xContainer.is()))) { sal_detail_logFormat ((SAL_DETAIL_LOG_LEVEL_WARN), ("legacy.osl"), ("/usr/local/src/libreoffice/ucbhelper/source/provider/contenthelper.cxx" ":" "576" ": "), "%s", "ContentImplHelper::addProperty - No property container!" ); } } while (false); | |||
577 | ||||
578 | if ( xContainer.is() ) | |||
579 | { | |||
580 | // Property is always removeable. | |||
581 | Attributes |= beans::PropertyAttribute::REMOVEABLE; | |||
582 | ||||
583 | try | |||
584 | { | |||
585 | xContainer->addProperty( Name, Attributes, DefaultValue ); | |||
586 | } | |||
587 | catch ( beans::PropertyExistException const & ) | |||
588 | { | |||
589 | OSL_FAIL( "ContentImplHelper::addProperty - Exists!" )do { if (true && (((sal_Bool)1))) { sal_detail_logFormat ((SAL_DETAIL_LOG_LEVEL_WARN), ("legacy.osl"), ("/usr/local/src/libreoffice/ucbhelper/source/provider/contenthelper.cxx" ":" "589" ": "), "%s", "ContentImplHelper::addProperty - Exists!" ); } } while (false); | |||
590 | throw; | |||
591 | } | |||
592 | catch ( beans::IllegalTypeException const & ) | |||
593 | { | |||
594 | OSL_FAIL( "ContentImplHelper::addProperty - Wrong Type!" )do { if (true && (((sal_Bool)1))) { sal_detail_logFormat ((SAL_DETAIL_LOG_LEVEL_WARN), ("legacy.osl"), ("/usr/local/src/libreoffice/ucbhelper/source/provider/contenthelper.cxx" ":" "594" ": "), "%s", "ContentImplHelper::addProperty - Wrong Type!" ); } } while (false); | |||
595 | throw; | |||
596 | } | |||
597 | catch ( lang::IllegalArgumentException const & ) | |||
598 | { | |||
599 | OSL_FAIL( "ContentImplHelper::addProperty - Illegal Arg!" )do { if (true && (((sal_Bool)1))) { sal_detail_logFormat ((SAL_DETAIL_LOG_LEVEL_WARN), ("legacy.osl"), ("/usr/local/src/libreoffice/ucbhelper/source/provider/contenthelper.cxx" ":" "599" ": "), "%s", "ContentImplHelper::addProperty - Illegal Arg!" ); } } while (false); | |||
600 | throw; | |||
601 | } | |||
602 | ||||
603 | // Success! | |||
604 | ||||
605 | if ( m_pImpl->m_xPropSetInfo.is() ) | |||
606 | { | |||
607 | // Info cached in propertyset info is invalid now! | |||
608 | m_pImpl->m_xPropSetInfo->reset(); | |||
609 | } | |||
610 | ||||
611 | // Notify propertyset info change listeners. | |||
612 | if ( m_pImpl->m_pPropSetChangeListeners && | |||
613 | m_pImpl->m_pPropSetChangeListeners->getLength() ) | |||
614 | { | |||
615 | beans::PropertySetInfoChangeEvent evt( | |||
616 | static_cast< cppu::OWeakObject * >( this ), | |||
617 | Name, | |||
618 | -1, // No handle available | |||
619 | beans::PropertySetInfoChange::PROPERTY_INSERTED ); | |||
620 | notifyPropertySetInfoChange( evt ); | |||
621 | } | |||
622 | } | |||
623 | } | |||
624 | } | |||
625 | ||||
626 | //========================================================================= | |||
627 | // virtual | |||
628 | void SAL_CALL ContentImplHelper::removeProperty( const rtl::OUString& Name ) | |||
629 | throw( beans::UnknownPropertyException, | |||
630 | beans::NotRemoveableException, | |||
631 | uno::RuntimeException ) | |||
632 | { | |||
633 | osl::MutexGuard aGuard( m_aMutex ); | |||
634 | ||||
635 | try | |||
636 | { | |||
637 | // @@@ Need real command environment here, but where to get it from? | |||
638 | // XPropertyContainer interface should be replaced by | |||
639 | // XCommandProcessor commands! | |||
640 | uno::Reference< com::sun::star::ucb::XCommandEnvironment > xEnv; | |||
641 | ||||
642 | beans::Property aProp | |||
643 | = getPropertySetInfo( xEnv )->getPropertyByName( Name ); | |||
644 | ||||
645 | if ( !( aProp.Attributes & beans::PropertyAttribute::REMOVEABLE ) ) | |||
646 | { | |||
647 | // Not removeable! | |||
648 | throw beans::NotRemoveableException(); | |||
649 | } | |||
650 | } | |||
651 | catch ( beans::UnknownPropertyException const & ) | |||
652 | { | |||
653 | OSL_FAIL( "ContentImplHelper::removeProperty - Unknown!" )do { if (true && (((sal_Bool)1))) { sal_detail_logFormat ((SAL_DETAIL_LOG_LEVEL_WARN), ("legacy.osl"), ("/usr/local/src/libreoffice/ucbhelper/source/provider/contenthelper.cxx" ":" "653" ": "), "%s", "ContentImplHelper::removeProperty - Unknown!" ); } } while (false); | |||
654 | throw; | |||
655 | } | |||
656 | ||||
657 | ////////////////////////////////////////////////////////////////////// | |||
658 | // Try to remove property from dynamic property set. | |||
659 | ////////////////////////////////////////////////////////////////////// | |||
660 | ||||
661 | // Open persistent property set, if exists. | |||
662 | uno::Reference< com::sun::star::ucb::XPersistentPropertySet > xSet( | |||
663 | getAdditionalPropertySet( sal_False((sal_Bool)0) ) ); | |||
664 | if ( xSet.is() ) | |||
665 | { | |||
666 | uno::Reference< beans::XPropertyContainer > xContainer( | |||
667 | xSet, uno::UNO_QUERY ); | |||
668 | ||||
669 | OSL_ENSURE(do { if (true && (!(xContainer.is()))) { sal_detail_logFormat ((SAL_DETAIL_LOG_LEVEL_WARN), ("legacy.osl"), ("/usr/local/src/libreoffice/ucbhelper/source/provider/contenthelper.cxx" ":" "671" ": "), "%s", "ContentImplHelper::removeProperty - No property container!" ); } } while (false) | |||
670 | xContainer.is(),do { if (true && (!(xContainer.is()))) { sal_detail_logFormat ((SAL_DETAIL_LOG_LEVEL_WARN), ("legacy.osl"), ("/usr/local/src/libreoffice/ucbhelper/source/provider/contenthelper.cxx" ":" "671" ": "), "%s", "ContentImplHelper::removeProperty - No property container!" ); } } while (false) | |||
671 | "ContentImplHelper::removeProperty - No property container!" )do { if (true && (!(xContainer.is()))) { sal_detail_logFormat ((SAL_DETAIL_LOG_LEVEL_WARN), ("legacy.osl"), ("/usr/local/src/libreoffice/ucbhelper/source/provider/contenthelper.cxx" ":" "671" ": "), "%s", "ContentImplHelper::removeProperty - No property container!" ); } } while (false); | |||
672 | ||||
673 | if ( xContainer.is() ) | |||
674 | { | |||
675 | try | |||
676 | { | |||
677 | xContainer->removeProperty( Name ); | |||
678 | } | |||
679 | catch ( beans::UnknownPropertyException const & ) | |||
680 | { | |||
681 | OSL_FAIL( "ContentImplHelper::removeProperty - Unknown!" )do { if (true && (((sal_Bool)1))) { sal_detail_logFormat ((SAL_DETAIL_LOG_LEVEL_WARN), ("legacy.osl"), ("/usr/local/src/libreoffice/ucbhelper/source/provider/contenthelper.cxx" ":" "681" ": "), "%s", "ContentImplHelper::removeProperty - Unknown!" ); } } while (false); | |||
682 | throw; | |||
683 | } | |||
684 | catch ( beans::NotRemoveableException const & ) | |||
685 | { | |||
686 | OSL_FAIL(do { if (true && (((sal_Bool)1))) { sal_detail_logFormat ((SAL_DETAIL_LOG_LEVEL_WARN), ("legacy.osl"), ("/usr/local/src/libreoffice/ucbhelper/source/provider/contenthelper.cxx" ":" "687" ": "), "%s", "ContentImplHelper::removeProperty - Unremoveable!" ); } } while (false) | |||
687 | "ContentImplHelper::removeProperty - Unremoveable!" )do { if (true && (((sal_Bool)1))) { sal_detail_logFormat ((SAL_DETAIL_LOG_LEVEL_WARN), ("legacy.osl"), ("/usr/local/src/libreoffice/ucbhelper/source/provider/contenthelper.cxx" ":" "687" ": "), "%s", "ContentImplHelper::removeProperty - Unremoveable!" ); } } while (false); | |||
688 | throw; | |||
689 | } | |||
690 | ||||
691 | xContainer = 0; | |||
692 | ||||
693 | // Success! | |||
694 | ||||
695 | if ( xSet->getPropertySetInfo()->getProperties().getLength() == 0 ) | |||
696 | { | |||
697 | // Remove empty propertyset from registry. | |||
698 | uno::Reference< com::sun::star::ucb::XPropertySetRegistry > | |||
699 | xReg = xSet->getRegistry(); | |||
700 | if ( xReg.is() ) | |||
701 | { | |||
702 | rtl::OUString aKey( xSet->getKey() ); | |||
703 | xSet = 0; | |||
704 | xReg->removePropertySet( aKey ); | |||
705 | } | |||
706 | } | |||
707 | ||||
708 | if ( m_pImpl->m_xPropSetInfo.is() ) | |||
709 | { | |||
710 | // Info cached in propertyset info is invalid now! | |||
711 | m_pImpl->m_xPropSetInfo->reset(); | |||
712 | } | |||
713 | ||||
714 | // Notify propertyset info change listeners. | |||
715 | if ( m_pImpl->m_pPropSetChangeListeners && | |||
716 | m_pImpl->m_pPropSetChangeListeners->getLength() ) | |||
717 | { | |||
718 | beans::PropertySetInfoChangeEvent evt( | |||
719 | static_cast< cppu::OWeakObject * >( this ), | |||
720 | Name, | |||
721 | -1, // No handle available | |||
722 | beans::PropertySetInfoChange::PROPERTY_REMOVED ); | |||
723 | notifyPropertySetInfoChange( evt ); | |||
724 | } | |||
725 | } | |||
726 | } | |||
727 | } | |||
728 | ||||
729 | //========================================================================= | |||
730 | // | |||
731 | // XPropertySetInfoChangeNotifier methods. | |||
732 | // | |||
733 | //========================================================================= | |||
734 | ||||
735 | // virtual | |||
736 | void SAL_CALL ContentImplHelper::addPropertySetInfoChangeListener( | |||
737 | const uno::Reference< beans::XPropertySetInfoChangeListener >& Listener ) | |||
738 | throw( uno::RuntimeException ) | |||
739 | { | |||
740 | osl::MutexGuard aGuard( m_aMutex ); | |||
741 | ||||
742 | if ( !m_pImpl->m_pPropSetChangeListeners ) | |||
743 | m_pImpl->m_pPropSetChangeListeners | |||
744 | = new cppu::OInterfaceContainerHelper( m_aMutex ); | |||
745 | ||||
746 | m_pImpl->m_pPropSetChangeListeners->addInterface( Listener ); | |||
747 | } | |||
748 | ||||
749 | //========================================================================= | |||
750 | // virtual | |||
751 | void SAL_CALL ContentImplHelper::removePropertySetInfoChangeListener( | |||
752 | const uno::Reference< beans::XPropertySetInfoChangeListener >& Listener ) | |||
753 | throw( uno::RuntimeException ) | |||
754 | { | |||
755 | osl::MutexGuard aGuard( m_aMutex ); | |||
756 | ||||
757 | if ( m_pImpl->m_pPropSetChangeListeners ) | |||
758 | m_pImpl->m_pPropSetChangeListeners->removeInterface( Listener ); | |||
759 | } | |||
760 | ||||
761 | //========================================================================= | |||
762 | // | |||
763 | // XChild methods. | |||
764 | // | |||
765 | //========================================================================= | |||
766 | ||||
767 | // virtual | |||
768 | uno::Reference< uno::XInterface > SAL_CALL ContentImplHelper::getParent() | |||
769 | throw( uno::RuntimeException ) | |||
770 | { | |||
771 | uno::Reference< uno::XInterface > xParent; | |||
772 | rtl::OUString aURL = getParentURL(); | |||
773 | ||||
774 | if ( !aURL.isEmpty() ) | |||
775 | { | |||
776 | uno::Reference< com::sun::star::ucb::XContentIdentifier > xId( | |||
777 | new ContentIdentifier( m_xSMgr, aURL ) ); | |||
778 | try | |||
779 | { | |||
780 | xParent.set( m_xProvider->queryContent( xId ) ); | |||
781 | } | |||
782 | catch ( com::sun::star::ucb::IllegalIdentifierException const & ) | |||
783 | { | |||
784 | } | |||
785 | } | |||
786 | ||||
787 | return xParent; | |||
788 | } | |||
789 | ||||
790 | //========================================================================= | |||
791 | // virtual | |||
792 | void SAL_CALL ContentImplHelper::setParent( | |||
793 | const uno::Reference< uno::XInterface >& ) | |||
794 | throw( lang::NoSupportException, uno::RuntimeException ) | |||
795 | { | |||
796 | throw lang::NoSupportException(); | |||
797 | } | |||
798 | ||||
799 | //========================================================================= | |||
800 | // | |||
801 | // Non-interface methods | |||
802 | // | |||
803 | //========================================================================= | |||
804 | ||||
805 | uno::Reference< com::sun::star::ucb::XPersistentPropertySet > | |||
806 | ContentImplHelper::getAdditionalPropertySet( sal_Bool bCreate ) | |||
807 | { | |||
808 | // Get propertyset from provider. | |||
809 | return m_xProvider->getAdditionalPropertySet( | |||
810 | m_xIdentifier->getContentIdentifier(), bCreate ); | |||
811 | } | |||
812 | ||||
813 | //========================================================================= | |||
814 | sal_Bool ContentImplHelper::renameAdditionalPropertySet( | |||
815 | const rtl::OUString& rOldKey, | |||
816 | const rtl::OUString& rNewKey, | |||
817 | sal_Bool bRecursive ) | |||
818 | { | |||
819 | return m_xProvider->renameAdditionalPropertySet( | |||
820 | rOldKey, rNewKey, bRecursive ); | |||
821 | } | |||
822 | ||||
823 | //========================================================================= | |||
824 | sal_Bool ContentImplHelper::copyAdditionalPropertySet( | |||
825 | const rtl::OUString& rSourceKey, | |||
826 | const rtl::OUString& rTargetKey, | |||
827 | sal_Bool bRecursive ) | |||
828 | { | |||
829 | return m_xProvider->copyAdditionalPropertySet( | |||
830 | rSourceKey, rTargetKey, bRecursive ); | |||
831 | } | |||
832 | ||||
833 | //========================================================================= | |||
834 | sal_Bool ContentImplHelper::removeAdditionalPropertySet( sal_Bool bRecursive ) | |||
835 | { | |||
836 | return m_xProvider->removeAdditionalPropertySet( | |||
837 | m_xIdentifier->getContentIdentifier(), bRecursive ); | |||
838 | } | |||
839 | ||||
840 | //========================================================================= | |||
841 | void ContentImplHelper::notifyPropertiesChange( | |||
842 | const uno::Sequence< beans::PropertyChangeEvent >& evt ) const | |||
843 | { | |||
844 | if ( !m_pImpl->m_pPropertyChangeListeners ) | |||
845 | return; | |||
846 | ||||
847 | sal_Int32 nCount = evt.getLength(); | |||
848 | if ( nCount ) | |||
849 | { | |||
850 | // First, notify listeners interested in changes of every property. | |||
851 | cppu::OInterfaceContainerHelper* pAllPropsContainer | |||
852 | = m_pImpl->m_pPropertyChangeListeners->getContainer( | |||
853 | rtl::OUString() ); | |||
854 | if ( pAllPropsContainer ) | |||
855 | { | |||
856 | cppu::OInterfaceIteratorHelper aIter( *pAllPropsContainer ); | |||
857 | while ( aIter.hasMoreElements() ) | |||
858 | { | |||
859 | // Propagate event. | |||
860 | uno::Reference< beans::XPropertiesChangeListener > xListener( | |||
861 | aIter.next(), uno::UNO_QUERY ); | |||
862 | if ( xListener.is() ) | |||
863 | xListener->propertiesChange( evt ); | |||
864 | } | |||
865 | } | |||
866 | ||||
867 | PropertiesEventListenerMap aListeners; | |||
868 | ||||
869 | const beans::PropertyChangeEvent* pEvents = evt.getConstArray(); | |||
870 | ||||
871 | for ( sal_Int32 n = 0; n < nCount; ++n ) | |||
872 | { | |||
873 | const beans::PropertyChangeEvent& rEvent = pEvents[ n ]; | |||
874 | const rtl::OUString& rName = rEvent.PropertyName; | |||
875 | ||||
876 | cppu::OInterfaceContainerHelper* pPropsContainer | |||
877 | = m_pImpl->m_pPropertyChangeListeners->getContainer( rName ); | |||
878 | if ( pPropsContainer ) | |||
879 | { | |||
880 | cppu::OInterfaceIteratorHelper aIter( *pPropsContainer ); | |||
881 | while ( aIter.hasMoreElements() ) | |||
882 | { | |||
883 | PropertyEventSequence* p = NULL__null; | |||
884 | ||||
885 | beans::XPropertiesChangeListener* pListener = | |||
886 | static_cast< beans::XPropertiesChangeListener * >( | |||
887 | aIter.next() ); | |||
888 | PropertiesEventListenerMap::iterator it = | |||
889 | aListeners.find( pListener ); | |||
890 | if ( it == aListeners.end() ) | |||
891 | { | |||
892 | // Not in map - create and insert new entry. | |||
893 | p = new PropertyEventSequence( nCount ); | |||
894 | aListeners[ pListener ] = p; | |||
895 | } | |||
896 | else | |||
897 | p = (*it).second; | |||
898 | ||||
899 | if ( p ) | |||
900 | p->append( rEvent ); | |||
901 | } | |||
902 | } | |||
903 | } | |||
904 | ||||
905 | // Notify listeners. | |||
906 | PropertiesEventListenerMap::iterator it = aListeners.begin(); | |||
907 | while ( !aListeners.empty() ) | |||
908 | { | |||
909 | beans::XPropertiesChangeListener* pListener = | |||
910 | static_cast< beans::XPropertiesChangeListener * >( (*it).first ); | |||
911 | PropertyEventSequence* pSeq = (*it).second; | |||
912 | ||||
913 | // Remove current element. | |||
914 | aListeners.erase( it ); | |||
915 | ||||
916 | // Propagate event. | |||
917 | pListener->propertiesChange( pSeq->getEvents() ); | |||
918 | ||||
919 | delete pSeq; | |||
920 | ||||
921 | it = aListeners.begin(); | |||
922 | } | |||
923 | } | |||
924 | } | |||
925 | ||||
926 | //========================================================================= | |||
927 | void ContentImplHelper::notifyPropertySetInfoChange( | |||
928 | const beans::PropertySetInfoChangeEvent& evt ) const | |||
929 | { | |||
930 | if ( !m_pImpl->m_pPropSetChangeListeners ) | |||
931 | return; | |||
932 | ||||
933 | // Notify event listeners. | |||
934 | cppu::OInterfaceIteratorHelper aIter( *m_pImpl->m_pPropSetChangeListeners ); | |||
935 | while ( aIter.hasMoreElements() ) | |||
936 | { | |||
937 | // Propagate event. | |||
938 | uno::Reference< beans::XPropertySetInfoChangeListener > | |||
939 | xListener( aIter.next(), uno::UNO_QUERY ); | |||
940 | if ( xListener.is() ) | |||
941 | xListener->propertySetInfoChange( evt ); | |||
942 | } | |||
943 | } | |||
944 | ||||
945 | //========================================================================= | |||
946 | void ContentImplHelper::notifyContentEvent( | |||
947 | const com::sun::star::ucb::ContentEvent& evt ) const | |||
948 | { | |||
949 | if ( !m_pImpl->m_pContentEventListeners ) | |||
950 | return; | |||
951 | ||||
952 | // Notify event listeners. | |||
953 | cppu::OInterfaceIteratorHelper aIter( *m_pImpl->m_pContentEventListeners ); | |||
954 | while ( aIter.hasMoreElements() ) | |||
955 | { | |||
956 | // Propagate event. | |||
957 | uno::Reference< | |||
958 | com::sun::star::ucb::XContentEventListener > xListener( | |||
959 | aIter.next(), uno::UNO_QUERY ); | |||
960 | if ( xListener.is() ) | |||
961 | xListener->contentEvent( evt ); | |||
962 | } | |||
963 | } | |||
964 | ||||
965 | //========================================================================= | |||
966 | void ContentImplHelper::inserted() | |||
967 | { | |||
968 | // Content is not yet registered at provider. | |||
969 | m_xProvider->registerNewContent( this ); | |||
970 | ||||
971 | // If the parent content is currently not instanciated, there can be | |||
972 | // no listeners interested in changes ;-) | |||
973 | ||||
974 | rtl::Reference< ContentImplHelper > xParent | |||
975 | = m_xProvider->queryExistingContent( getParentURL() ); | |||
976 | ||||
977 | if ( xParent.is() ) | |||
978 | { | |||
979 | com::sun::star::ucb::ContentEvent aEvt( | |||
980 | static_cast< cppu::OWeakObject * >( xParent.get() ), // Source | |||
981 | com::sun::star::ucb::ContentAction::INSERTED, // Action | |||
982 | this, // Content | |||
983 | xParent->getIdentifier() ); // Id | |||
984 | xParent->notifyContentEvent( aEvt ); | |||
985 | } | |||
986 | } | |||
987 | ||||
988 | //========================================================================= | |||
989 | void ContentImplHelper::deleted() | |||
990 | { | |||
991 | uno::Reference< com::sun::star::ucb::XContent > xThis = this; | |||
992 | ||||
993 | rtl::Reference< ContentImplHelper > xParent | |||
994 | = m_xProvider->queryExistingContent( getParentURL() ); | |||
995 | ||||
996 | if ( xParent.is() ) | |||
997 | { | |||
998 | // Let parent notify "REMOVED" event. | |||
999 | com::sun::star::ucb::ContentEvent aEvt( | |||
1000 | static_cast< cppu::OWeakObject * >( xParent.get() ), | |||
1001 | com::sun::star::ucb::ContentAction::REMOVED, | |||
1002 | this, | |||
1003 | xParent->getIdentifier() ); | |||
1004 | xParent->notifyContentEvent( aEvt ); | |||
1005 | } | |||
1006 | ||||
1007 | // Notify "DELETED" event. | |||
1008 | com::sun::star::ucb::ContentEvent aEvt1( | |||
1009 | static_cast< cppu::OWeakObject * >( this ), | |||
1010 | com::sun::star::ucb::ContentAction::DELETED, | |||
1011 | this, | |||
1012 | getIdentifier() ); | |||
1013 | notifyContentEvent( aEvt1 ); | |||
1014 | ||||
1015 | m_xProvider->removeContent( this ); | |||
1016 | } | |||
1017 | ||||
1018 | //========================================================================= | |||
1019 | sal_Bool ContentImplHelper::exchange( | |||
1020 | const uno::Reference< com::sun::star::ucb::XContentIdentifier >& rNewId ) | |||
1021 | { | |||
1022 | uno::Reference< com::sun::star::ucb::XContent > xThis = this; | |||
1023 | ||||
1024 | osl::ClearableMutexGuard aGuard( m_aMutex ); | |||
1025 | ||||
1026 | rtl::Reference< ContentImplHelper > xContent | |||
1027 | = m_xProvider->queryExistingContent( rNewId ); | |||
1028 | if ( xContent.is() ) | |||
| ||||
1029 | { | |||
1030 | // @@@ | |||
1031 | // Big trouble. Another object with the new identity exists. | |||
1032 | // How shall I mutate to / merge with the other object? | |||
1033 | return sal_False((sal_Bool)0); | |||
1034 | } | |||
1035 | ||||
1036 | uno::Reference< com::sun::star::ucb::XContentIdentifier > xOldId | |||
1037 | = getIdentifier(); | |||
1038 | ||||
1039 | // Re-insert at provider. | |||
1040 | m_xProvider->removeContent( this ); | |||
| ||||
1041 | m_xIdentifier = rNewId; | |||
1042 | m_xProvider->registerNewContent( this ); | |||
1043 | ||||
1044 | aGuard.clear(); | |||
1045 | ||||
1046 | // Notify "EXCHANGED" event. | |||
1047 | com::sun::star::ucb::ContentEvent aEvt( | |||
1048 | static_cast< cppu::OWeakObject * >( this ), | |||
1049 | com::sun::star::ucb::ContentAction::EXCHANGED, | |||
1050 | this, | |||
1051 | xOldId ); | |||
1052 | notifyContentEvent( aEvt ); | |||
1053 | return sal_True((sal_Bool)1); | |||
1054 | } | |||
1055 | ||||
1056 | //========================================================================= | |||
1057 | uno::Reference< com::sun::star::ucb::XCommandInfo > | |||
1058 | ContentImplHelper::getCommandInfo( | |||
1059 | const uno::Reference< com::sun::star::ucb::XCommandEnvironment > & xEnv, | |||
1060 | sal_Bool bCache ) | |||
1061 | { | |||
1062 | osl::MutexGuard aGuard( m_aMutex ); | |||
1063 | ||||
1064 | if ( !m_pImpl->m_xCommandsInfo.is() ) | |||
1065 | m_pImpl->m_xCommandsInfo | |||
1066 | = new CommandProcessorInfo( m_xSMgr, xEnv, this ); | |||
1067 | else if ( !bCache ) | |||
1068 | m_pImpl->m_xCommandsInfo->reset(); | |||
1069 | ||||
1070 | return uno::Reference< com::sun::star::ucb::XCommandInfo >( | |||
1071 | m_pImpl->m_xCommandsInfo.get() ); | |||
1072 | } | |||
1073 | ||||
1074 | //========================================================================= | |||
1075 | uno::Reference< beans::XPropertySetInfo > | |||
1076 | ContentImplHelper::getPropertySetInfo( | |||
1077 | const uno::Reference< com::sun::star::ucb::XCommandEnvironment > & xEnv, | |||
1078 | sal_Bool bCache ) | |||
1079 | { | |||
1080 | osl::MutexGuard aGuard( m_aMutex ); | |||
1081 | ||||
1082 | if ( !m_pImpl->m_xPropSetInfo.is() ) | |||
1083 | m_pImpl->m_xPropSetInfo | |||
1084 | = new PropertySetInfo( m_xSMgr, xEnv, this ); | |||
1085 | else if ( !bCache ) | |||
1086 | m_pImpl->m_xPropSetInfo->reset(); | |||
1087 | ||||
1088 | return uno::Reference< beans::XPropertySetInfo >( | |||
1089 | m_pImpl->m_xPropSetInfo.get() ); | |||
1090 | } | |||
1091 | ||||
1092 | } // namespace ucbhelper | |||
1093 | ||||
1094 | /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |