File: | ucbhelper/source/provider/contenthelper.cxx |
Location: | line 1027, column 11 |
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 ); |
Called C++ object pointer is null | |
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: */ |