1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski // MARKER(update_precomp.py): autogen include statement, do not remove
25*b1cdbd2cSJim Jagielski #include "precompiled_ucbhelper.hxx"
26*b1cdbd2cSJim Jagielski 
27*b1cdbd2cSJim Jagielski /**************************************************************************
28*b1cdbd2cSJim Jagielski                                 TODO
29*b1cdbd2cSJim Jagielski  **************************************************************************
30*b1cdbd2cSJim Jagielski 
31*b1cdbd2cSJim Jagielski  *************************************************************************/
32*b1cdbd2cSJim Jagielski #include <osl/diagnose.h>
33*b1cdbd2cSJim Jagielski #include <osl/mutex.hxx>
34*b1cdbd2cSJim Jagielski #include <salhelper/simplereferenceobject.hxx>
35*b1cdbd2cSJim Jagielski #include <cppuhelper/weak.hxx>
36*b1cdbd2cSJim Jagielski 
37*b1cdbd2cSJim Jagielski #include <cppuhelper/implbase1.hxx>
38*b1cdbd2cSJim Jagielski #include <com/sun/star/ucb/ContentCreationError.hpp>
39*b1cdbd2cSJim Jagielski #include <com/sun/star/ucb/XCommandEnvironment.hpp>
40*b1cdbd2cSJim Jagielski #include <com/sun/star/ucb/XCommandInfo.hpp>
41*b1cdbd2cSJim Jagielski #include <com/sun/star/ucb/XCommandProcessor.hpp>
42*b1cdbd2cSJim Jagielski #include <com/sun/star/ucb/Command.hpp>
43*b1cdbd2cSJim Jagielski #include <com/sun/star/ucb/CommandInfo.hpp>
44*b1cdbd2cSJim Jagielski #include <com/sun/star/ucb/ContentAction.hpp>
45*b1cdbd2cSJim Jagielski #include <com/sun/star/ucb/OpenCommandArgument2.hpp>
46*b1cdbd2cSJim Jagielski #include <com/sun/star/ucb/InsertCommandArgument.hpp>
47*b1cdbd2cSJim Jagielski #include <com/sun/star/ucb/GlobalTransferCommandArgument.hpp>
48*b1cdbd2cSJim Jagielski #include <com/sun/star/ucb/NameClash.hpp>
49*b1cdbd2cSJim Jagielski #include <com/sun/star/ucb/OpenMode.hpp>
50*b1cdbd2cSJim Jagielski #include <com/sun/star/ucb/XContentCreator.hpp>
51*b1cdbd2cSJim Jagielski #include <com/sun/star/ucb/XContentEventListener.hpp>
52*b1cdbd2cSJim Jagielski #include <com/sun/star/ucb/XContentIdentifierFactory.hpp>
53*b1cdbd2cSJim Jagielski #include <com/sun/star/ucb/XContentProvider.hpp>
54*b1cdbd2cSJim Jagielski #include <com/sun/star/ucb/XContentProviderManager.hpp>
55*b1cdbd2cSJim Jagielski #include <com/sun/star/ucb/XDynamicResultSet.hpp>
56*b1cdbd2cSJim Jagielski #include <com/sun/star/ucb/XSortedDynamicResultSetFactory.hpp>
57*b1cdbd2cSJim Jagielski #include <com/sun/star/beans/XPropertySetInfo.hpp>
58*b1cdbd2cSJim Jagielski #include <com/sun/star/beans/Property.hpp>
59*b1cdbd2cSJim Jagielski #include <com/sun/star/beans/PropertyValue.hpp>
60*b1cdbd2cSJim Jagielski #include <com/sun/star/sdbc/XResultSet.hpp>
61*b1cdbd2cSJim Jagielski #include <com/sun/star/sdbc/XRow.hpp>
62*b1cdbd2cSJim Jagielski #include <com/sun/star/lang/IllegalArgumentException.hpp>
63*b1cdbd2cSJim Jagielski #include <com/sun/star/beans/UnknownPropertyException.hpp>
64*b1cdbd2cSJim Jagielski #include <ucbhelper/macros.hxx>
65*b1cdbd2cSJim Jagielski #include <ucbhelper/content.hxx>
66*b1cdbd2cSJim Jagielski #include <ucbhelper/contentbroker.hxx>
67*b1cdbd2cSJim Jagielski #include <ucbhelper/activedatasink.hxx>
68*b1cdbd2cSJim Jagielski #include <ucbhelper/activedatastreamer.hxx>
69*b1cdbd2cSJim Jagielski #include <ucbhelper/interactionrequest.hxx>
70*b1cdbd2cSJim Jagielski #include <ucbhelper/cancelcommandexecution.hxx>
71*b1cdbd2cSJim Jagielski 
72*b1cdbd2cSJim Jagielski using namespace com::sun::star::container;
73*b1cdbd2cSJim Jagielski using namespace com::sun::star::beans;
74*b1cdbd2cSJim Jagielski using namespace com::sun::star::io;
75*b1cdbd2cSJim Jagielski using namespace com::sun::star::lang;
76*b1cdbd2cSJim Jagielski using namespace com::sun::star::sdbc;
77*b1cdbd2cSJim Jagielski using namespace com::sun::star::task;
78*b1cdbd2cSJim Jagielski using namespace com::sun::star::ucb;
79*b1cdbd2cSJim Jagielski using namespace com::sun::star::uno;
80*b1cdbd2cSJim Jagielski 
81*b1cdbd2cSJim Jagielski namespace ucbhelper
82*b1cdbd2cSJim Jagielski {
83*b1cdbd2cSJim Jagielski 
84*b1cdbd2cSJim Jagielski class EmptyInputStream : public ::cppu::WeakImplHelper1< XInputStream >
85*b1cdbd2cSJim Jagielski {
86*b1cdbd2cSJim Jagielski public:
87*b1cdbd2cSJim Jagielski     virtual sal_Int32 SAL_CALL readBytes(
88*b1cdbd2cSJim Jagielski         Sequence< sal_Int8 > & data, sal_Int32 nBytesToRead )
89*b1cdbd2cSJim Jagielski         throw (IOException, RuntimeException);
90*b1cdbd2cSJim Jagielski     virtual sal_Int32 SAL_CALL readSomeBytes(
91*b1cdbd2cSJim Jagielski         Sequence< sal_Int8 > & data, sal_Int32 nMaxBytesToRead )
92*b1cdbd2cSJim Jagielski         throw (IOException, RuntimeException);
93*b1cdbd2cSJim Jagielski     virtual void SAL_CALL skipBytes( sal_Int32 nBytesToSkip )
94*b1cdbd2cSJim Jagielski         throw (IOException, RuntimeException);
95*b1cdbd2cSJim Jagielski     virtual sal_Int32 SAL_CALL available()
96*b1cdbd2cSJim Jagielski         throw (IOException, RuntimeException);
97*b1cdbd2cSJim Jagielski     virtual void SAL_CALL closeInput()
98*b1cdbd2cSJim Jagielski         throw (IOException, RuntimeException);
99*b1cdbd2cSJim Jagielski };
100*b1cdbd2cSJim Jagielski 
readBytes(Sequence<sal_Int8> & data,sal_Int32)101*b1cdbd2cSJim Jagielski sal_Int32 EmptyInputStream::readBytes(
102*b1cdbd2cSJim Jagielski     Sequence< sal_Int8 > & data, sal_Int32 )
103*b1cdbd2cSJim Jagielski     throw (IOException, RuntimeException)
104*b1cdbd2cSJim Jagielski {
105*b1cdbd2cSJim Jagielski     data.realloc( 0 );
106*b1cdbd2cSJim Jagielski     return 0;
107*b1cdbd2cSJim Jagielski }
108*b1cdbd2cSJim Jagielski 
readSomeBytes(Sequence<sal_Int8> & data,sal_Int32)109*b1cdbd2cSJim Jagielski sal_Int32 EmptyInputStream::readSomeBytes(
110*b1cdbd2cSJim Jagielski     Sequence< sal_Int8 > & data, sal_Int32 )
111*b1cdbd2cSJim Jagielski     throw (IOException, RuntimeException)
112*b1cdbd2cSJim Jagielski {
113*b1cdbd2cSJim Jagielski     data.realloc( 0 );
114*b1cdbd2cSJim Jagielski     return 0;
115*b1cdbd2cSJim Jagielski }
116*b1cdbd2cSJim Jagielski 
skipBytes(sal_Int32)117*b1cdbd2cSJim Jagielski void EmptyInputStream::skipBytes( sal_Int32 )
118*b1cdbd2cSJim Jagielski     throw (IOException, RuntimeException)
119*b1cdbd2cSJim Jagielski {
120*b1cdbd2cSJim Jagielski }
121*b1cdbd2cSJim Jagielski 
available()122*b1cdbd2cSJim Jagielski sal_Int32 EmptyInputStream::available()
123*b1cdbd2cSJim Jagielski     throw (IOException, RuntimeException)
124*b1cdbd2cSJim Jagielski {
125*b1cdbd2cSJim Jagielski     return 0;
126*b1cdbd2cSJim Jagielski }
127*b1cdbd2cSJim Jagielski 
closeInput()128*b1cdbd2cSJim Jagielski void EmptyInputStream::closeInput()
129*b1cdbd2cSJim Jagielski     throw (IOException, RuntimeException)
130*b1cdbd2cSJim Jagielski {
131*b1cdbd2cSJim Jagielski }
132*b1cdbd2cSJim Jagielski 
133*b1cdbd2cSJim Jagielski 
134*b1cdbd2cSJim Jagielski //=========================================================================
135*b1cdbd2cSJim Jagielski //=========================================================================
136*b1cdbd2cSJim Jagielski //
137*b1cdbd2cSJim Jagielski // class ContentEventListener_Impl.
138*b1cdbd2cSJim Jagielski //
139*b1cdbd2cSJim Jagielski //=========================================================================
140*b1cdbd2cSJim Jagielski //=========================================================================
141*b1cdbd2cSJim Jagielski 
142*b1cdbd2cSJim Jagielski class ContentEventListener_Impl : public cppu::OWeakObject,
143*b1cdbd2cSJim Jagielski                                       public XContentEventListener
144*b1cdbd2cSJim Jagielski {
145*b1cdbd2cSJim Jagielski     Content_Impl& m_rContent;
146*b1cdbd2cSJim Jagielski 
147*b1cdbd2cSJim Jagielski public:
ContentEventListener_Impl(Content_Impl & rContent)148*b1cdbd2cSJim Jagielski     ContentEventListener_Impl( Content_Impl& rContent )
149*b1cdbd2cSJim Jagielski     : m_rContent( rContent ) {}
150*b1cdbd2cSJim Jagielski 
151*b1cdbd2cSJim Jagielski     // XInterface
152*b1cdbd2cSJim Jagielski     XINTERFACE_DECL()
153*b1cdbd2cSJim Jagielski 
154*b1cdbd2cSJim Jagielski     // XContentEventListener
155*b1cdbd2cSJim Jagielski     virtual void SAL_CALL contentEvent( const ContentEvent& evt )
156*b1cdbd2cSJim Jagielski         throw( RuntimeException );
157*b1cdbd2cSJim Jagielski 
158*b1cdbd2cSJim Jagielski     // XEventListener ( base of XContentEventListener )
159*b1cdbd2cSJim Jagielski     virtual void SAL_CALL disposing( const EventObject& Source )
160*b1cdbd2cSJim Jagielski         throw( RuntimeException );
161*b1cdbd2cSJim Jagielski };
162*b1cdbd2cSJim Jagielski 
163*b1cdbd2cSJim Jagielski //=========================================================================
164*b1cdbd2cSJim Jagielski //=========================================================================
165*b1cdbd2cSJim Jagielski //
166*b1cdbd2cSJim Jagielski // class Content_Impl.
167*b1cdbd2cSJim Jagielski //
168*b1cdbd2cSJim Jagielski //=========================================================================
169*b1cdbd2cSJim Jagielski //=========================================================================
170*b1cdbd2cSJim Jagielski 
171*b1cdbd2cSJim Jagielski class Content_Impl : public salhelper::SimpleReferenceObject
172*b1cdbd2cSJim Jagielski {
173*b1cdbd2cSJim Jagielski friend class ContentEventListener_Impl;
174*b1cdbd2cSJim Jagielski 
175*b1cdbd2cSJim Jagielski     mutable rtl::OUString               m_aURL;
176*b1cdbd2cSJim Jagielski     Reference< XMultiServiceFactory >   m_xSMgr;
177*b1cdbd2cSJim Jagielski     Reference< XContent >               m_xContent;
178*b1cdbd2cSJim Jagielski     Reference< XCommandProcessor >          m_xCommandProcessor;
179*b1cdbd2cSJim Jagielski     Reference< XCommandEnvironment >    m_xEnv;
180*b1cdbd2cSJim Jagielski     Reference< XContentEventListener >  m_xContentEventListener;
181*b1cdbd2cSJim Jagielski     mutable osl::Mutex                  m_aMutex;
182*b1cdbd2cSJim Jagielski     sal_Int32                           m_nCommandId;
183*b1cdbd2cSJim Jagielski 
184*b1cdbd2cSJim Jagielski private:
185*b1cdbd2cSJim Jagielski     void reinit( const Reference< XContent >& xContent );
186*b1cdbd2cSJim Jagielski     void disposing(const EventObject& Source);
187*b1cdbd2cSJim Jagielski 
188*b1cdbd2cSJim Jagielski public:
Content_Impl()189*b1cdbd2cSJim Jagielski     Content_Impl() : m_nCommandId( 0 ) {};
190*b1cdbd2cSJim Jagielski     Content_Impl( const Reference< XMultiServiceFactory >& rSMgr,
191*b1cdbd2cSJim Jagielski                   const Reference< XContent >& rContent,
192*b1cdbd2cSJim Jagielski                   const Reference< XCommandEnvironment >& rEnv );
193*b1cdbd2cSJim Jagielski 
194*b1cdbd2cSJim Jagielski     virtual ~Content_Impl();
195*b1cdbd2cSJim Jagielski 
196*b1cdbd2cSJim Jagielski     const rtl::OUString&           getURL() const;
197*b1cdbd2cSJim Jagielski     Reference< XContent >          getContent();
198*b1cdbd2cSJim Jagielski     Reference< XCommandProcessor > getCommandProcessor();
199*b1cdbd2cSJim Jagielski     sal_Int32 getCommandId();
getServiceManager()200*b1cdbd2cSJim Jagielski     Reference< XMultiServiceFactory > getServiceManager() { return m_xSMgr; }
201*b1cdbd2cSJim Jagielski 
202*b1cdbd2cSJim Jagielski     Any  executeCommand( const Command& rCommand );
203*b1cdbd2cSJim Jagielski     void abortCommand();
204*b1cdbd2cSJim Jagielski 
205*b1cdbd2cSJim Jagielski     inline const Reference< XCommandEnvironment >& getEnvironment() const;
206*b1cdbd2cSJim Jagielski     inline void setEnvironment(
207*b1cdbd2cSJim Jagielski                         const Reference< XCommandEnvironment >& xNewEnv );
208*b1cdbd2cSJim Jagielski 
209*b1cdbd2cSJim Jagielski     void inserted();
210*b1cdbd2cSJim Jagielski };
211*b1cdbd2cSJim Jagielski 
212*b1cdbd2cSJim Jagielski //=========================================================================
213*b1cdbd2cSJim Jagielski // Helpers.
214*b1cdbd2cSJim Jagielski //=========================================================================
215*b1cdbd2cSJim Jagielski 
ensureContentProviderForURL(const ContentBroker & rBroker,const rtl::OUString & rURL)216*b1cdbd2cSJim Jagielski static void ensureContentProviderForURL( const ContentBroker & rBroker,
217*b1cdbd2cSJim Jagielski                                          const rtl::OUString & rURL )
218*b1cdbd2cSJim Jagielski     throw ( ContentCreationException, RuntimeException )
219*b1cdbd2cSJim Jagielski {
220*b1cdbd2cSJim Jagielski     Reference< XContentProviderManager > xMgr
221*b1cdbd2cSJim Jagielski         = rBroker.getContentProviderManagerInterface();
222*b1cdbd2cSJim Jagielski     if ( !xMgr.is() )
223*b1cdbd2cSJim Jagielski     {
224*b1cdbd2cSJim Jagielski         throw RuntimeException(
225*b1cdbd2cSJim Jagielski             rtl::OUString::createFromAscii(
226*b1cdbd2cSJim Jagielski                 "UCB does not implement mandatory interface "
227*b1cdbd2cSJim Jagielski                 "XContentProviderManager!" ),
228*b1cdbd2cSJim Jagielski             Reference< XInterface >() );
229*b1cdbd2cSJim Jagielski     }
230*b1cdbd2cSJim Jagielski     else
231*b1cdbd2cSJim Jagielski     {
232*b1cdbd2cSJim Jagielski         Reference< XContentProvider > xProv
233*b1cdbd2cSJim Jagielski             = xMgr->queryContentProvider( rURL );
234*b1cdbd2cSJim Jagielski         if ( !xProv.is() )
235*b1cdbd2cSJim Jagielski         {
236*b1cdbd2cSJim Jagielski             throw ContentCreationException(
237*b1cdbd2cSJim Jagielski                 rtl::OUString::createFromAscii(
238*b1cdbd2cSJim Jagielski                     "No Content Provider available for given URL!" ),
239*b1cdbd2cSJim Jagielski                 Reference< XInterface >(),
240*b1cdbd2cSJim Jagielski                 ContentCreationError_NO_CONTENT_PROVIDER );
241*b1cdbd2cSJim Jagielski         }
242*b1cdbd2cSJim Jagielski     }
243*b1cdbd2cSJim Jagielski }
244*b1cdbd2cSJim Jagielski 
245*b1cdbd2cSJim Jagielski //=========================================================================
getContentBroker(bool bThrow)246*b1cdbd2cSJim Jagielski static ContentBroker* getContentBroker( bool bThrow )
247*b1cdbd2cSJim Jagielski     throw ( ContentCreationException, RuntimeException )
248*b1cdbd2cSJim Jagielski {
249*b1cdbd2cSJim Jagielski     ContentBroker* pBroker = ContentBroker::get();
250*b1cdbd2cSJim Jagielski 
251*b1cdbd2cSJim Jagielski     if ( !pBroker )
252*b1cdbd2cSJim Jagielski     {
253*b1cdbd2cSJim Jagielski         if ( bThrow )
254*b1cdbd2cSJim Jagielski             throw RuntimeException(
255*b1cdbd2cSJim Jagielski                     rtl::OUString::createFromAscii( "No Content Broker!" ),
256*b1cdbd2cSJim Jagielski                     Reference< XInterface >() );
257*b1cdbd2cSJim Jagielski     }
258*b1cdbd2cSJim Jagielski     else
259*b1cdbd2cSJim Jagielski     {
260*b1cdbd2cSJim Jagielski #if OSL_DEBUG_LEVEL > 1
261*b1cdbd2cSJim Jagielski         Reference< XContentProviderManager > xMgr
262*b1cdbd2cSJim Jagielski             = pBroker->getContentProviderManagerInterface();
263*b1cdbd2cSJim Jagielski         if ( !xMgr.is() )
264*b1cdbd2cSJim Jagielski         {
265*b1cdbd2cSJim Jagielski             if ( bThrow )
266*b1cdbd2cSJim Jagielski                 throw RuntimeException(
267*b1cdbd2cSJim Jagielski                         rtl::OUString::createFromAscii(
268*b1cdbd2cSJim Jagielski                             "UCB does not implement mandatory interface "
269*b1cdbd2cSJim Jagielski                             "XContentProviderManager!" ),
270*b1cdbd2cSJim Jagielski                         Reference< XInterface >() );
271*b1cdbd2cSJim Jagielski         }
272*b1cdbd2cSJim Jagielski         else
273*b1cdbd2cSJim Jagielski         {
274*b1cdbd2cSJim Jagielski             OSL_ENSURE( xMgr->queryContentProviders().getLength(),
275*b1cdbd2cSJim Jagielski                         "Content Broker not configured (no providers)!" );
276*b1cdbd2cSJim Jagielski         }
277*b1cdbd2cSJim Jagielski #endif
278*b1cdbd2cSJim Jagielski     }
279*b1cdbd2cSJim Jagielski 
280*b1cdbd2cSJim Jagielski     return pBroker;
281*b1cdbd2cSJim Jagielski }
282*b1cdbd2cSJim Jagielski 
283*b1cdbd2cSJim Jagielski //=========================================================================
getContentIdentifier(const ContentBroker & rBroker,const rtl::OUString & rURL,bool bThrow)284*b1cdbd2cSJim Jagielski static Reference< XContentIdentifier > getContentIdentifier(
285*b1cdbd2cSJim Jagielski                                     const ContentBroker & rBroker,
286*b1cdbd2cSJim Jagielski                                     const rtl::OUString & rURL,
287*b1cdbd2cSJim Jagielski                                     bool bThrow )
288*b1cdbd2cSJim Jagielski     throw ( ContentCreationException, RuntimeException )
289*b1cdbd2cSJim Jagielski {
290*b1cdbd2cSJim Jagielski     Reference< XContentIdentifierFactory > xIdFac
291*b1cdbd2cSJim Jagielski                         = rBroker.getContentIdentifierFactoryInterface();
292*b1cdbd2cSJim Jagielski     if ( xIdFac.is() )
293*b1cdbd2cSJim Jagielski     {
294*b1cdbd2cSJim Jagielski         Reference< XContentIdentifier > xId
295*b1cdbd2cSJim Jagielski             = xIdFac->createContentIdentifier( rURL );
296*b1cdbd2cSJim Jagielski 
297*b1cdbd2cSJim Jagielski         if ( xId.is() )
298*b1cdbd2cSJim Jagielski             return xId;
299*b1cdbd2cSJim Jagielski 
300*b1cdbd2cSJim Jagielski         if ( bThrow )
301*b1cdbd2cSJim Jagielski         {
302*b1cdbd2cSJim Jagielski             ensureContentProviderForURL( rBroker, rURL );
303*b1cdbd2cSJim Jagielski 
304*b1cdbd2cSJim Jagielski             throw ContentCreationException(
305*b1cdbd2cSJim Jagielski                 rtl::OUString::createFromAscii(
306*b1cdbd2cSJim Jagielski                     "Unable to create Content Identifier!" ),
307*b1cdbd2cSJim Jagielski                 Reference< XInterface >(),
308*b1cdbd2cSJim Jagielski                 ContentCreationError_IDENTIFIER_CREATION_FAILED );
309*b1cdbd2cSJim Jagielski         }
310*b1cdbd2cSJim Jagielski     }
311*b1cdbd2cSJim Jagielski     else
312*b1cdbd2cSJim Jagielski     {
313*b1cdbd2cSJim Jagielski         if ( bThrow )
314*b1cdbd2cSJim Jagielski             throw RuntimeException(
315*b1cdbd2cSJim Jagielski                     rtl::OUString::createFromAscii(
316*b1cdbd2cSJim Jagielski                         "UCB does not implement mandatory interface "
317*b1cdbd2cSJim Jagielski                         "XContentIdentifierFactory!" ),
318*b1cdbd2cSJim Jagielski                     Reference< XInterface >() );
319*b1cdbd2cSJim Jagielski     }
320*b1cdbd2cSJim Jagielski 
321*b1cdbd2cSJim Jagielski     return Reference< XContentIdentifier >();
322*b1cdbd2cSJim Jagielski }
323*b1cdbd2cSJim Jagielski 
324*b1cdbd2cSJim Jagielski //=========================================================================
getContent(const ContentBroker & rBroker,const Reference<XContentIdentifier> & xId,bool bThrow)325*b1cdbd2cSJim Jagielski static Reference< XContent > getContent(
326*b1cdbd2cSJim Jagielski                                     const ContentBroker & rBroker,
327*b1cdbd2cSJim Jagielski                                     const Reference< XContentIdentifier > & xId,
328*b1cdbd2cSJim Jagielski                                     bool bThrow )
329*b1cdbd2cSJim Jagielski     throw ( ContentCreationException, RuntimeException )
330*b1cdbd2cSJim Jagielski {
331*b1cdbd2cSJim Jagielski     Reference< XContentProvider > xProvider
332*b1cdbd2cSJim Jagielski         = rBroker.getContentProviderInterface();
333*b1cdbd2cSJim Jagielski     if ( xProvider.is() )
334*b1cdbd2cSJim Jagielski     {
335*b1cdbd2cSJim Jagielski         Reference< XContent > xContent;
336*b1cdbd2cSJim Jagielski         rtl::OUString msg;
337*b1cdbd2cSJim Jagielski         try
338*b1cdbd2cSJim Jagielski         {
339*b1cdbd2cSJim Jagielski             xContent = xProvider->queryContent( xId );
340*b1cdbd2cSJim Jagielski         }
341*b1cdbd2cSJim Jagielski         catch ( IllegalIdentifierException const & e )
342*b1cdbd2cSJim Jagielski         {
343*b1cdbd2cSJim Jagielski             msg = e.Message;
344*b1cdbd2cSJim Jagielski             // handled below.
345*b1cdbd2cSJim Jagielski         }
346*b1cdbd2cSJim Jagielski 
347*b1cdbd2cSJim Jagielski         if ( xContent.is() )
348*b1cdbd2cSJim Jagielski             return xContent;
349*b1cdbd2cSJim Jagielski 
350*b1cdbd2cSJim Jagielski         if ( bThrow )
351*b1cdbd2cSJim Jagielski         {
352*b1cdbd2cSJim Jagielski             ensureContentProviderForURL( rBroker, xId->getContentIdentifier() );
353*b1cdbd2cSJim Jagielski 
354*b1cdbd2cSJim Jagielski             throw ContentCreationException(
355*b1cdbd2cSJim Jagielski                     rtl::OUString::createFromAscii(
356*b1cdbd2cSJim Jagielski                         "Unable to create Content! " ) + msg,
357*b1cdbd2cSJim Jagielski                     Reference< XInterface >(),
358*b1cdbd2cSJim Jagielski                     ContentCreationError_CONTENT_CREATION_FAILED );
359*b1cdbd2cSJim Jagielski         }
360*b1cdbd2cSJim Jagielski     }
361*b1cdbd2cSJim Jagielski     else
362*b1cdbd2cSJim Jagielski     {
363*b1cdbd2cSJim Jagielski         if ( bThrow )
364*b1cdbd2cSJim Jagielski             throw RuntimeException(
365*b1cdbd2cSJim Jagielski                     rtl::OUString::createFromAscii(
366*b1cdbd2cSJim Jagielski                         "UCB does not implement mandatory interface "
367*b1cdbd2cSJim Jagielski                         "XContentProvider!" ),
368*b1cdbd2cSJim Jagielski                     Reference< XInterface >() );
369*b1cdbd2cSJim Jagielski     }
370*b1cdbd2cSJim Jagielski 
371*b1cdbd2cSJim Jagielski     return Reference< XContent >();
372*b1cdbd2cSJim Jagielski }
373*b1cdbd2cSJim Jagielski 
374*b1cdbd2cSJim Jagielski //=========================================================================
375*b1cdbd2cSJim Jagielski //=========================================================================
376*b1cdbd2cSJim Jagielski //
377*b1cdbd2cSJim Jagielski // Content Implementation.
378*b1cdbd2cSJim Jagielski //
379*b1cdbd2cSJim Jagielski //=========================================================================
380*b1cdbd2cSJim Jagielski //=========================================================================
381*b1cdbd2cSJim Jagielski 
Content()382*b1cdbd2cSJim Jagielski Content::Content()
383*b1cdbd2cSJim Jagielski : m_xImpl( new Content_Impl )
384*b1cdbd2cSJim Jagielski {
385*b1cdbd2cSJim Jagielski }
386*b1cdbd2cSJim Jagielski 
387*b1cdbd2cSJim Jagielski //=========================================================================
Content(const rtl::OUString & rURL,const Reference<XCommandEnvironment> & rEnv)388*b1cdbd2cSJim Jagielski Content::Content( const rtl::OUString& rURL,
389*b1cdbd2cSJim Jagielski                   const Reference< XCommandEnvironment >& rEnv )
390*b1cdbd2cSJim Jagielski     throw ( ContentCreationException, RuntimeException )
391*b1cdbd2cSJim Jagielski {
392*b1cdbd2cSJim Jagielski     ContentBroker* pBroker = getContentBroker( true );
393*b1cdbd2cSJim Jagielski 
394*b1cdbd2cSJim Jagielski     Reference< XContentIdentifier > xId
395*b1cdbd2cSJim Jagielski         = getContentIdentifier( *pBroker, rURL, true );
396*b1cdbd2cSJim Jagielski 
397*b1cdbd2cSJim Jagielski     Reference< XContent > xContent = getContent( *pBroker, xId, true );
398*b1cdbd2cSJim Jagielski 
399*b1cdbd2cSJim Jagielski     m_xImpl = new Content_Impl( pBroker->getServiceManager(), xContent, rEnv );
400*b1cdbd2cSJim Jagielski }
401*b1cdbd2cSJim Jagielski 
402*b1cdbd2cSJim Jagielski //=========================================================================
Content(const Reference<XContentIdentifier> & rId,const Reference<XCommandEnvironment> & rEnv)403*b1cdbd2cSJim Jagielski Content::Content( const Reference< XContentIdentifier >& rId,
404*b1cdbd2cSJim Jagielski                   const Reference< XCommandEnvironment >& rEnv )
405*b1cdbd2cSJim Jagielski     throw ( ContentCreationException, RuntimeException )
406*b1cdbd2cSJim Jagielski {
407*b1cdbd2cSJim Jagielski     ContentBroker* pBroker = getContentBroker( true );
408*b1cdbd2cSJim Jagielski 
409*b1cdbd2cSJim Jagielski     Reference< XContent > xContent = getContent( *pBroker, rId, true );
410*b1cdbd2cSJim Jagielski 
411*b1cdbd2cSJim Jagielski     m_xImpl = new Content_Impl( pBroker->getServiceManager(), xContent, rEnv );
412*b1cdbd2cSJim Jagielski }
413*b1cdbd2cSJim Jagielski 
414*b1cdbd2cSJim Jagielski //=========================================================================
Content(const Reference<XContent> & rContent,const Reference<XCommandEnvironment> & rEnv)415*b1cdbd2cSJim Jagielski Content::Content( const Reference< XContent >& rContent,
416*b1cdbd2cSJim Jagielski                   const Reference< XCommandEnvironment >& rEnv )
417*b1cdbd2cSJim Jagielski     throw ( ContentCreationException, RuntimeException )
418*b1cdbd2cSJim Jagielski {
419*b1cdbd2cSJim Jagielski     ContentBroker* pBroker = getContentBroker( true );
420*b1cdbd2cSJim Jagielski 
421*b1cdbd2cSJim Jagielski     m_xImpl = new Content_Impl( pBroker->getServiceManager(), rContent, rEnv );
422*b1cdbd2cSJim Jagielski }
423*b1cdbd2cSJim Jagielski 
424*b1cdbd2cSJim Jagielski //=========================================================================
Content(const Content & rOther)425*b1cdbd2cSJim Jagielski Content::Content( const Content& rOther )
426*b1cdbd2cSJim Jagielski {
427*b1cdbd2cSJim Jagielski     m_xImpl = rOther.m_xImpl;
428*b1cdbd2cSJim Jagielski }
429*b1cdbd2cSJim Jagielski 
430*b1cdbd2cSJim Jagielski //=========================================================================
431*b1cdbd2cSJim Jagielski // static
create(const rtl::OUString & rURL,const Reference<XCommandEnvironment> & rEnv,Content & rContent)432*b1cdbd2cSJim Jagielski sal_Bool Content::create( const rtl::OUString& rURL,
433*b1cdbd2cSJim Jagielski                           const Reference< XCommandEnvironment >& rEnv,
434*b1cdbd2cSJim Jagielski                           Content& rContent )
435*b1cdbd2cSJim Jagielski {
436*b1cdbd2cSJim Jagielski     ContentBroker* pBroker = getContentBroker( false );
437*b1cdbd2cSJim Jagielski     if ( !pBroker )
438*b1cdbd2cSJim Jagielski         return sal_False;
439*b1cdbd2cSJim Jagielski 
440*b1cdbd2cSJim Jagielski     Reference< XContentIdentifier > xId
441*b1cdbd2cSJim Jagielski         = getContentIdentifier( *pBroker, rURL, false );
442*b1cdbd2cSJim Jagielski     if ( !xId.is() )
443*b1cdbd2cSJim Jagielski         return sal_False;
444*b1cdbd2cSJim Jagielski 
445*b1cdbd2cSJim Jagielski     Reference< XContent > xContent = getContent( *pBroker, xId, false );
446*b1cdbd2cSJim Jagielski     if ( !xContent.is() )
447*b1cdbd2cSJim Jagielski         return sal_False;
448*b1cdbd2cSJim Jagielski 
449*b1cdbd2cSJim Jagielski     rContent.m_xImpl
450*b1cdbd2cSJim Jagielski         = new Content_Impl( pBroker->getServiceManager(), xContent, rEnv );
451*b1cdbd2cSJim Jagielski 
452*b1cdbd2cSJim Jagielski     return sal_True;
453*b1cdbd2cSJim Jagielski }
454*b1cdbd2cSJim Jagielski 
455*b1cdbd2cSJim Jagielski //=========================================================================
456*b1cdbd2cSJim Jagielski // static
create(const Reference<XContentIdentifier> & rId,const Reference<XCommandEnvironment> & rEnv,Content & rContent)457*b1cdbd2cSJim Jagielski sal_Bool Content::create( const Reference< XContentIdentifier >& rId,
458*b1cdbd2cSJim Jagielski                           const Reference< XCommandEnvironment >& rEnv,
459*b1cdbd2cSJim Jagielski                           Content& rContent )
460*b1cdbd2cSJim Jagielski {
461*b1cdbd2cSJim Jagielski     ContentBroker* pBroker = getContentBroker( false );
462*b1cdbd2cSJim Jagielski     if ( !pBroker )
463*b1cdbd2cSJim Jagielski         return sal_False;
464*b1cdbd2cSJim Jagielski 
465*b1cdbd2cSJim Jagielski     Reference< XContent > xContent = getContent( *pBroker, rId, false );
466*b1cdbd2cSJim Jagielski     if ( !xContent.is() )
467*b1cdbd2cSJim Jagielski         return sal_False;
468*b1cdbd2cSJim Jagielski 
469*b1cdbd2cSJim Jagielski     rContent.m_xImpl
470*b1cdbd2cSJim Jagielski         = new Content_Impl( pBroker->getServiceManager(), xContent, rEnv );
471*b1cdbd2cSJim Jagielski 
472*b1cdbd2cSJim Jagielski     return sal_True;
473*b1cdbd2cSJim Jagielski }
474*b1cdbd2cSJim Jagielski 
475*b1cdbd2cSJim Jagielski //=========================================================================
476*b1cdbd2cSJim Jagielski // static
create(const Reference<XContent> & xContent,const Reference<XCommandEnvironment> & rEnv,Content & rContent)477*b1cdbd2cSJim Jagielski sal_Bool Content::create( const Reference< XContent >& xContent,
478*b1cdbd2cSJim Jagielski                           const Reference< XCommandEnvironment >& rEnv,
479*b1cdbd2cSJim Jagielski                           Content& rContent )
480*b1cdbd2cSJim Jagielski {
481*b1cdbd2cSJim Jagielski     ContentBroker* pBroker = getContentBroker( false );
482*b1cdbd2cSJim Jagielski     if ( !pBroker )
483*b1cdbd2cSJim Jagielski         return sal_False;
484*b1cdbd2cSJim Jagielski 
485*b1cdbd2cSJim Jagielski     rContent.m_xImpl
486*b1cdbd2cSJim Jagielski         = new Content_Impl( pBroker->getServiceManager(), xContent, rEnv );
487*b1cdbd2cSJim Jagielski 
488*b1cdbd2cSJim Jagielski     return sal_True;
489*b1cdbd2cSJim Jagielski }
490*b1cdbd2cSJim Jagielski 
491*b1cdbd2cSJim Jagielski //=========================================================================
~Content()492*b1cdbd2cSJim Jagielski Content::~Content()
493*b1cdbd2cSJim Jagielski {
494*b1cdbd2cSJim Jagielski }
495*b1cdbd2cSJim Jagielski 
496*b1cdbd2cSJim Jagielski //=========================================================================
operator =(const Content & rOther)497*b1cdbd2cSJim Jagielski Content& Content::operator=( const Content& rOther )
498*b1cdbd2cSJim Jagielski {
499*b1cdbd2cSJim Jagielski     m_xImpl = rOther.m_xImpl;
500*b1cdbd2cSJim Jagielski     return *this;
501*b1cdbd2cSJim Jagielski }
502*b1cdbd2cSJim Jagielski 
503*b1cdbd2cSJim Jagielski //=========================================================================
get() const504*b1cdbd2cSJim Jagielski Reference< XContent > Content::get() const
505*b1cdbd2cSJim Jagielski {
506*b1cdbd2cSJim Jagielski     return m_xImpl->getContent();
507*b1cdbd2cSJim Jagielski }
508*b1cdbd2cSJim Jagielski 
509*b1cdbd2cSJim Jagielski //=========================================================================
getURL() const510*b1cdbd2cSJim Jagielski const rtl::OUString& Content::getURL() const
511*b1cdbd2cSJim Jagielski {
512*b1cdbd2cSJim Jagielski     return m_xImpl->getURL();
513*b1cdbd2cSJim Jagielski }
514*b1cdbd2cSJim Jagielski 
515*b1cdbd2cSJim Jagielski //=========================================================================
getCommandEnvironment() const516*b1cdbd2cSJim Jagielski const Reference< XCommandEnvironment >& Content::getCommandEnvironment() const
517*b1cdbd2cSJim Jagielski {
518*b1cdbd2cSJim Jagielski     return m_xImpl->getEnvironment();
519*b1cdbd2cSJim Jagielski }
520*b1cdbd2cSJim Jagielski 
521*b1cdbd2cSJim Jagielski //=========================================================================
setCommandEnvironment(const Reference<XCommandEnvironment> & xNewEnv)522*b1cdbd2cSJim Jagielski void Content::setCommandEnvironment(
523*b1cdbd2cSJim Jagielski                         const Reference< XCommandEnvironment >& xNewEnv )
524*b1cdbd2cSJim Jagielski {
525*b1cdbd2cSJim Jagielski     m_xImpl->setEnvironment( xNewEnv );
526*b1cdbd2cSJim Jagielski }
527*b1cdbd2cSJim Jagielski 
528*b1cdbd2cSJim Jagielski //=========================================================================
getCommands()529*b1cdbd2cSJim Jagielski Reference< XCommandInfo > Content::getCommands()
530*b1cdbd2cSJim Jagielski     throw( CommandAbortedException, RuntimeException, Exception )
531*b1cdbd2cSJim Jagielski {
532*b1cdbd2cSJim Jagielski     Command aCommand;
533*b1cdbd2cSJim Jagielski     aCommand.Name     = rtl::OUString::createFromAscii( "getCommandInfo" );
534*b1cdbd2cSJim Jagielski     aCommand.Handle   = -1; // n/a
535*b1cdbd2cSJim Jagielski     aCommand.Argument = Any();
536*b1cdbd2cSJim Jagielski 
537*b1cdbd2cSJim Jagielski     Any aResult = m_xImpl->executeCommand( aCommand );
538*b1cdbd2cSJim Jagielski 
539*b1cdbd2cSJim Jagielski     Reference< XCommandInfo > xInfo;
540*b1cdbd2cSJim Jagielski     aResult >>= xInfo;
541*b1cdbd2cSJim Jagielski     return xInfo;
542*b1cdbd2cSJim Jagielski }
543*b1cdbd2cSJim Jagielski 
544*b1cdbd2cSJim Jagielski //=========================================================================
getProperties()545*b1cdbd2cSJim Jagielski Reference< XPropertySetInfo > Content::getProperties()
546*b1cdbd2cSJim Jagielski     throw( CommandAbortedException, RuntimeException, Exception )
547*b1cdbd2cSJim Jagielski {
548*b1cdbd2cSJim Jagielski     Command aCommand;
549*b1cdbd2cSJim Jagielski     aCommand.Name     = rtl::OUString::createFromAscii( "getPropertySetInfo" );
550*b1cdbd2cSJim Jagielski     aCommand.Handle   = -1; // n/a
551*b1cdbd2cSJim Jagielski     aCommand.Argument = Any();
552*b1cdbd2cSJim Jagielski 
553*b1cdbd2cSJim Jagielski     Any aResult = m_xImpl->executeCommand( aCommand );
554*b1cdbd2cSJim Jagielski 
555*b1cdbd2cSJim Jagielski     Reference< XPropertySetInfo > xInfo;
556*b1cdbd2cSJim Jagielski     aResult >>= xInfo;
557*b1cdbd2cSJim Jagielski     return xInfo;
558*b1cdbd2cSJim Jagielski }
559*b1cdbd2cSJim Jagielski 
560*b1cdbd2cSJim Jagielski //=========================================================================
getPropertyValue(const rtl::OUString & rPropertyName)561*b1cdbd2cSJim Jagielski Any Content::getPropertyValue( const rtl::OUString& rPropertyName )
562*b1cdbd2cSJim Jagielski     throw( CommandAbortedException, RuntimeException, Exception )
563*b1cdbd2cSJim Jagielski {
564*b1cdbd2cSJim Jagielski     Sequence< rtl::OUString > aNames( 1 );
565*b1cdbd2cSJim Jagielski     aNames.getArray()[ 0 ] = rPropertyName;
566*b1cdbd2cSJim Jagielski 
567*b1cdbd2cSJim Jagielski     Sequence< Any > aRet = getPropertyValues( aNames );
568*b1cdbd2cSJim Jagielski     return aRet.getConstArray()[ 0 ];
569*b1cdbd2cSJim Jagielski }
570*b1cdbd2cSJim Jagielski 
571*b1cdbd2cSJim Jagielski //=========================================================================
getPropertyValue(sal_Int32 nPropertyHandle)572*b1cdbd2cSJim Jagielski Any Content::getPropertyValue( sal_Int32 nPropertyHandle )
573*b1cdbd2cSJim Jagielski     throw( CommandAbortedException, RuntimeException, Exception )
574*b1cdbd2cSJim Jagielski {
575*b1cdbd2cSJim Jagielski     Sequence< sal_Int32 > aHandles( 1 );
576*b1cdbd2cSJim Jagielski     aHandles.getArray()[ 0 ] = nPropertyHandle;
577*b1cdbd2cSJim Jagielski 
578*b1cdbd2cSJim Jagielski     Sequence< Any > aRet = getPropertyValues( aHandles );
579*b1cdbd2cSJim Jagielski     return aRet.getConstArray()[ 0 ];
580*b1cdbd2cSJim Jagielski }
581*b1cdbd2cSJim Jagielski 
582*b1cdbd2cSJim Jagielski //=========================================================================
setPropertyValue(const rtl::OUString & rName,const Any & rValue)583*b1cdbd2cSJim Jagielski Any Content::setPropertyValue( const rtl::OUString& rName,
584*b1cdbd2cSJim Jagielski                                 const Any& rValue )
585*b1cdbd2cSJim Jagielski     throw( CommandAbortedException, RuntimeException, Exception )
586*b1cdbd2cSJim Jagielski {
587*b1cdbd2cSJim Jagielski     Sequence< rtl::OUString > aNames( 1 );
588*b1cdbd2cSJim Jagielski     aNames.getArray()[ 0 ] = rName;
589*b1cdbd2cSJim Jagielski 
590*b1cdbd2cSJim Jagielski     Sequence< Any > aValues( 1 );
591*b1cdbd2cSJim Jagielski     aValues.getArray()[ 0 ] = rValue;
592*b1cdbd2cSJim Jagielski 
593*b1cdbd2cSJim Jagielski     Sequence< Any > aErrors = setPropertyValues( aNames, aValues );
594*b1cdbd2cSJim Jagielski     return aErrors.getConstArray()[ 0 ];
595*b1cdbd2cSJim Jagielski }
596*b1cdbd2cSJim Jagielski 
597*b1cdbd2cSJim Jagielski //=========================================================================
setPropertyValue(const sal_Int32 nPropertyHandle,const Any & rValue)598*b1cdbd2cSJim Jagielski Any Content::setPropertyValue( const sal_Int32 nPropertyHandle,
599*b1cdbd2cSJim Jagielski                                 const Any& rValue )
600*b1cdbd2cSJim Jagielski     throw( CommandAbortedException, RuntimeException, Exception )
601*b1cdbd2cSJim Jagielski {
602*b1cdbd2cSJim Jagielski     Sequence< sal_Int32 > aHandles( 1 );
603*b1cdbd2cSJim Jagielski     aHandles.getArray()[ 0 ] = nPropertyHandle;
604*b1cdbd2cSJim Jagielski 
605*b1cdbd2cSJim Jagielski     Sequence< Any > aValues( 1 );
606*b1cdbd2cSJim Jagielski     aValues.getArray()[ 0 ] = rValue;
607*b1cdbd2cSJim Jagielski 
608*b1cdbd2cSJim Jagielski     Sequence< Any > aErrors = setPropertyValues( aHandles, aValues );
609*b1cdbd2cSJim Jagielski     return aErrors.getConstArray()[ 0 ];
610*b1cdbd2cSJim Jagielski }
611*b1cdbd2cSJim Jagielski 
612*b1cdbd2cSJim Jagielski //=========================================================================
getPropertyValues(const Sequence<rtl::OUString> & rPropertyNames)613*b1cdbd2cSJim Jagielski Sequence< Any > Content::getPropertyValues(
614*b1cdbd2cSJim Jagielski                             const Sequence< rtl::OUString >& rPropertyNames )
615*b1cdbd2cSJim Jagielski     throw( CommandAbortedException, RuntimeException, Exception )
616*b1cdbd2cSJim Jagielski {
617*b1cdbd2cSJim Jagielski     Reference< XRow > xRow = getPropertyValuesInterface( rPropertyNames );
618*b1cdbd2cSJim Jagielski 
619*b1cdbd2cSJim Jagielski     sal_Int32 nCount = rPropertyNames.getLength();
620*b1cdbd2cSJim Jagielski     Sequence< Any > aValues( nCount );
621*b1cdbd2cSJim Jagielski 
622*b1cdbd2cSJim Jagielski     if ( xRow.is() )
623*b1cdbd2cSJim Jagielski     {
624*b1cdbd2cSJim Jagielski         Any* pValues = aValues.getArray();
625*b1cdbd2cSJim Jagielski 
626*b1cdbd2cSJim Jagielski         for ( sal_Int32 n = 0; n < nCount; ++n )
627*b1cdbd2cSJim Jagielski             pValues[ n ] = xRow->getObject( n + 1, Reference< XNameAccess >() );
628*b1cdbd2cSJim Jagielski     }
629*b1cdbd2cSJim Jagielski 
630*b1cdbd2cSJim Jagielski     return aValues;
631*b1cdbd2cSJim Jagielski }
632*b1cdbd2cSJim Jagielski 
633*b1cdbd2cSJim Jagielski //=========================================================================
getPropertyValues(const Sequence<sal_Int32> & nPropertyHandles)634*b1cdbd2cSJim Jagielski Sequence< Any > Content::getPropertyValues(
635*b1cdbd2cSJim Jagielski                             const Sequence< sal_Int32 >& nPropertyHandles )
636*b1cdbd2cSJim Jagielski     throw( CommandAbortedException, RuntimeException, Exception )
637*b1cdbd2cSJim Jagielski {
638*b1cdbd2cSJim Jagielski     Reference< XRow > xRow = getPropertyValuesInterface( nPropertyHandles );
639*b1cdbd2cSJim Jagielski 
640*b1cdbd2cSJim Jagielski     sal_Int32 nCount = nPropertyHandles.getLength();
641*b1cdbd2cSJim Jagielski     Sequence< Any > aValues( nCount );
642*b1cdbd2cSJim Jagielski 
643*b1cdbd2cSJim Jagielski     if ( xRow.is() )
644*b1cdbd2cSJim Jagielski     {
645*b1cdbd2cSJim Jagielski         Any* pValues = aValues.getArray();
646*b1cdbd2cSJim Jagielski 
647*b1cdbd2cSJim Jagielski         for ( sal_Int32 n = 0; n < nCount; ++n )
648*b1cdbd2cSJim Jagielski             pValues[ n ] = xRow->getObject( n + 1, Reference< XNameAccess >() );
649*b1cdbd2cSJim Jagielski     }
650*b1cdbd2cSJim Jagielski 
651*b1cdbd2cSJim Jagielski     return aValues;
652*b1cdbd2cSJim Jagielski }
653*b1cdbd2cSJim Jagielski 
654*b1cdbd2cSJim Jagielski //=========================================================================
getPropertyValuesInterface(const Sequence<rtl::OUString> & rPropertyNames)655*b1cdbd2cSJim Jagielski Reference< XRow > Content::getPropertyValuesInterface(
656*b1cdbd2cSJim Jagielski                             const Sequence< rtl::OUString >& rPropertyNames )
657*b1cdbd2cSJim Jagielski     throw( CommandAbortedException, RuntimeException, Exception )
658*b1cdbd2cSJim Jagielski {
659*b1cdbd2cSJim Jagielski     sal_Int32 nCount = rPropertyNames.getLength();
660*b1cdbd2cSJim Jagielski     Sequence< Property > aProps( nCount );
661*b1cdbd2cSJim Jagielski     Property* pProps = aProps.getArray();
662*b1cdbd2cSJim Jagielski 
663*b1cdbd2cSJim Jagielski     const rtl::OUString* pNames  = rPropertyNames.getConstArray();
664*b1cdbd2cSJim Jagielski 
665*b1cdbd2cSJim Jagielski     for ( sal_Int32 n = 0; n< nCount; ++n )
666*b1cdbd2cSJim Jagielski     {
667*b1cdbd2cSJim Jagielski         Property& rProp = pProps[ n ];
668*b1cdbd2cSJim Jagielski 
669*b1cdbd2cSJim Jagielski         rProp.Name       = pNames[ n ];
670*b1cdbd2cSJim Jagielski         rProp.Handle     = -1; // n/a
671*b1cdbd2cSJim Jagielski //        rProp.Type       =
672*b1cdbd2cSJim Jagielski //        rProp.Attributes = ;
673*b1cdbd2cSJim Jagielski     }
674*b1cdbd2cSJim Jagielski 
675*b1cdbd2cSJim Jagielski     Command aCommand;
676*b1cdbd2cSJim Jagielski     aCommand.Name     = rtl::OUString::createFromAscii( "getPropertyValues" );
677*b1cdbd2cSJim Jagielski     aCommand.Handle   = -1; // n/a
678*b1cdbd2cSJim Jagielski     aCommand.Argument <<= aProps;
679*b1cdbd2cSJim Jagielski 
680*b1cdbd2cSJim Jagielski     Any aResult = m_xImpl->executeCommand( aCommand );
681*b1cdbd2cSJim Jagielski 
682*b1cdbd2cSJim Jagielski     Reference< XRow > xRow;
683*b1cdbd2cSJim Jagielski     aResult >>= xRow;
684*b1cdbd2cSJim Jagielski     return xRow;
685*b1cdbd2cSJim Jagielski }
686*b1cdbd2cSJim Jagielski 
687*b1cdbd2cSJim Jagielski //=========================================================================
getPropertyValuesInterface(const Sequence<sal_Int32> & nPropertyHandles)688*b1cdbd2cSJim Jagielski Reference< XRow > Content::getPropertyValuesInterface(
689*b1cdbd2cSJim Jagielski                             const Sequence< sal_Int32 >& nPropertyHandles )
690*b1cdbd2cSJim Jagielski     throw( CommandAbortedException, RuntimeException, Exception )
691*b1cdbd2cSJim Jagielski {
692*b1cdbd2cSJim Jagielski     sal_Int32 nCount = nPropertyHandles.getLength();
693*b1cdbd2cSJim Jagielski     Sequence< Property > aProps( nCount );
694*b1cdbd2cSJim Jagielski     Property* pProps = aProps.getArray();
695*b1cdbd2cSJim Jagielski 
696*b1cdbd2cSJim Jagielski     const sal_Int32* pHandles  = nPropertyHandles.getConstArray();
697*b1cdbd2cSJim Jagielski 
698*b1cdbd2cSJim Jagielski     for ( sal_Int32 n = 0; n< nCount; ++n )
699*b1cdbd2cSJim Jagielski     {
700*b1cdbd2cSJim Jagielski         Property& rProp = pProps[ n ];
701*b1cdbd2cSJim Jagielski 
702*b1cdbd2cSJim Jagielski         rProp.Name       = rtl::OUString(); // n/a
703*b1cdbd2cSJim Jagielski         rProp.Handle     = pHandles[ n ];
704*b1cdbd2cSJim Jagielski //        rProp.Type       =
705*b1cdbd2cSJim Jagielski //        rProp.Attributes = ;
706*b1cdbd2cSJim Jagielski     }
707*b1cdbd2cSJim Jagielski 
708*b1cdbd2cSJim Jagielski     Command aCommand;
709*b1cdbd2cSJim Jagielski     aCommand.Name     = rtl::OUString::createFromAscii( "getPropertyValues" );
710*b1cdbd2cSJim Jagielski     aCommand.Handle   = -1; // n/a
711*b1cdbd2cSJim Jagielski     aCommand.Argument <<= aProps;
712*b1cdbd2cSJim Jagielski 
713*b1cdbd2cSJim Jagielski     Any aResult = m_xImpl->executeCommand( aCommand );
714*b1cdbd2cSJim Jagielski 
715*b1cdbd2cSJim Jagielski     Reference< XRow > xRow;
716*b1cdbd2cSJim Jagielski     aResult >>= xRow;
717*b1cdbd2cSJim Jagielski     return xRow;
718*b1cdbd2cSJim Jagielski }
719*b1cdbd2cSJim Jagielski 
720*b1cdbd2cSJim Jagielski //=========================================================================
setPropertyValues(const Sequence<rtl::OUString> & rPropertyNames,const Sequence<Any> & rValues)721*b1cdbd2cSJim Jagielski Sequence< Any > Content::setPropertyValues(
722*b1cdbd2cSJim Jagielski                             const Sequence< rtl::OUString >& rPropertyNames,
723*b1cdbd2cSJim Jagielski                                 const Sequence< Any >& rValues )
724*b1cdbd2cSJim Jagielski     throw( CommandAbortedException, RuntimeException, Exception )
725*b1cdbd2cSJim Jagielski {
726*b1cdbd2cSJim Jagielski     if ( rPropertyNames.getLength() != rValues.getLength() )
727*b1cdbd2cSJim Jagielski     {
728*b1cdbd2cSJim Jagielski         ucbhelper::cancelCommandExecution(
729*b1cdbd2cSJim Jagielski             makeAny( IllegalArgumentException(
730*b1cdbd2cSJim Jagielski                         rtl::OUString::createFromAscii(
731*b1cdbd2cSJim Jagielski                             "Length of property names sequence and value "
732*b1cdbd2cSJim Jagielski                             "sequence are unequal!" ),
733*b1cdbd2cSJim Jagielski                         get(),
734*b1cdbd2cSJim Jagielski                         -1 ) ),
735*b1cdbd2cSJim Jagielski             m_xImpl->getEnvironment() );
736*b1cdbd2cSJim Jagielski         // Unreachable
737*b1cdbd2cSJim Jagielski     }
738*b1cdbd2cSJim Jagielski 
739*b1cdbd2cSJim Jagielski     sal_Int32 nCount = rValues.getLength();
740*b1cdbd2cSJim Jagielski     Sequence< PropertyValue > aProps( nCount );
741*b1cdbd2cSJim Jagielski     PropertyValue* pProps = aProps.getArray();
742*b1cdbd2cSJim Jagielski 
743*b1cdbd2cSJim Jagielski     const rtl::OUString* pNames  = rPropertyNames.getConstArray();
744*b1cdbd2cSJim Jagielski     const Any* pValues = rValues.getConstArray();
745*b1cdbd2cSJim Jagielski 
746*b1cdbd2cSJim Jagielski     for ( sal_Int32 n = 0; n< nCount; ++n )
747*b1cdbd2cSJim Jagielski     {
748*b1cdbd2cSJim Jagielski         PropertyValue& rProp = pProps[ n ];
749*b1cdbd2cSJim Jagielski 
750*b1cdbd2cSJim Jagielski         rProp.Name   = pNames[ n ];
751*b1cdbd2cSJim Jagielski         rProp.Handle = -1; // n/a
752*b1cdbd2cSJim Jagielski         rProp.Value  = pValues[ n ];
753*b1cdbd2cSJim Jagielski //        rProp.State  = ;
754*b1cdbd2cSJim Jagielski     }
755*b1cdbd2cSJim Jagielski 
756*b1cdbd2cSJim Jagielski     Command aCommand;
757*b1cdbd2cSJim Jagielski     aCommand.Name     = rtl::OUString::createFromAscii( "setPropertyValues" );
758*b1cdbd2cSJim Jagielski     aCommand.Handle   = -1; // n/a
759*b1cdbd2cSJim Jagielski     aCommand.Argument <<= aProps;
760*b1cdbd2cSJim Jagielski 
761*b1cdbd2cSJim Jagielski     Any aResult = m_xImpl->executeCommand( aCommand );
762*b1cdbd2cSJim Jagielski 
763*b1cdbd2cSJim Jagielski     Sequence< Any > aErrors;
764*b1cdbd2cSJim Jagielski     aResult >>= aErrors;
765*b1cdbd2cSJim Jagielski     return aErrors;
766*b1cdbd2cSJim Jagielski }
767*b1cdbd2cSJim Jagielski 
768*b1cdbd2cSJim Jagielski //=========================================================================
setPropertyValues(const Sequence<sal_Int32> & nPropertyHandles,const Sequence<Any> & rValues)769*b1cdbd2cSJim Jagielski Sequence< Any > Content::setPropertyValues(
770*b1cdbd2cSJim Jagielski                             const Sequence< sal_Int32 >& nPropertyHandles,
771*b1cdbd2cSJim Jagielski                                 const Sequence< Any >& rValues )
772*b1cdbd2cSJim Jagielski     throw( CommandAbortedException, RuntimeException, Exception )
773*b1cdbd2cSJim Jagielski {
774*b1cdbd2cSJim Jagielski     if ( nPropertyHandles.getLength() != rValues.getLength() )
775*b1cdbd2cSJim Jagielski     {
776*b1cdbd2cSJim Jagielski         ucbhelper::cancelCommandExecution(
777*b1cdbd2cSJim Jagielski             makeAny( IllegalArgumentException(
778*b1cdbd2cSJim Jagielski                         rtl::OUString::createFromAscii(
779*b1cdbd2cSJim Jagielski                             "Length of property handles sequence and value "
780*b1cdbd2cSJim Jagielski                             "sequence are unequal!" ),
781*b1cdbd2cSJim Jagielski                         get(),
782*b1cdbd2cSJim Jagielski                         -1 ) ),
783*b1cdbd2cSJim Jagielski             m_xImpl->getEnvironment() );
784*b1cdbd2cSJim Jagielski         // Unreachable
785*b1cdbd2cSJim Jagielski     }
786*b1cdbd2cSJim Jagielski 
787*b1cdbd2cSJim Jagielski     sal_Int32 nCount = rValues.getLength();
788*b1cdbd2cSJim Jagielski     Sequence< PropertyValue > aProps( nCount );
789*b1cdbd2cSJim Jagielski     PropertyValue* pProps = aProps.getArray();
790*b1cdbd2cSJim Jagielski 
791*b1cdbd2cSJim Jagielski     const sal_Int32* pHandles = nPropertyHandles.getConstArray();
792*b1cdbd2cSJim Jagielski     const Any*       pValues  = rValues.getConstArray();
793*b1cdbd2cSJim Jagielski 
794*b1cdbd2cSJim Jagielski     for ( sal_Int32 n = 0; n< nCount; ++n )
795*b1cdbd2cSJim Jagielski     {
796*b1cdbd2cSJim Jagielski         PropertyValue& rProp = pProps[ n ];
797*b1cdbd2cSJim Jagielski 
798*b1cdbd2cSJim Jagielski         rProp.Name   = rtl::OUString(); // n/a
799*b1cdbd2cSJim Jagielski         rProp.Handle = pHandles[ n ];
800*b1cdbd2cSJim Jagielski         rProp.Value  = pValues[ n ];
801*b1cdbd2cSJim Jagielski //        rProp.State  = ;
802*b1cdbd2cSJim Jagielski     }
803*b1cdbd2cSJim Jagielski 
804*b1cdbd2cSJim Jagielski     Command aCommand;
805*b1cdbd2cSJim Jagielski     aCommand.Name     = rtl::OUString::createFromAscii( "setPropertyValues" );
806*b1cdbd2cSJim Jagielski     aCommand.Handle   = -1; // n/a
807*b1cdbd2cSJim Jagielski     aCommand.Argument <<= aProps;
808*b1cdbd2cSJim Jagielski 
809*b1cdbd2cSJim Jagielski     Any aResult = m_xImpl->executeCommand( aCommand );
810*b1cdbd2cSJim Jagielski 
811*b1cdbd2cSJim Jagielski     Sequence< Any > aErrors;
812*b1cdbd2cSJim Jagielski     aResult >>= aErrors;
813*b1cdbd2cSJim Jagielski     return aErrors;
814*b1cdbd2cSJim Jagielski }
815*b1cdbd2cSJim Jagielski 
816*b1cdbd2cSJim Jagielski //=========================================================================
executeCommand(const rtl::OUString & rCommandName,const Any & rCommandArgument)817*b1cdbd2cSJim Jagielski Any Content::executeCommand( const rtl::OUString& rCommandName,
818*b1cdbd2cSJim Jagielski                              const Any& rCommandArgument )
819*b1cdbd2cSJim Jagielski     throw( CommandAbortedException, RuntimeException, Exception )
820*b1cdbd2cSJim Jagielski {
821*b1cdbd2cSJim Jagielski     Command aCommand;
822*b1cdbd2cSJim Jagielski     aCommand.Name     = rCommandName;
823*b1cdbd2cSJim Jagielski     aCommand.Handle   = -1; // n/a
824*b1cdbd2cSJim Jagielski     aCommand.Argument = rCommandArgument;
825*b1cdbd2cSJim Jagielski 
826*b1cdbd2cSJim Jagielski     return m_xImpl->executeCommand( aCommand );
827*b1cdbd2cSJim Jagielski }
828*b1cdbd2cSJim Jagielski 
829*b1cdbd2cSJim Jagielski //=========================================================================
executeCommand(sal_Int32 nCommandHandle,const Any & rCommandArgument)830*b1cdbd2cSJim Jagielski Any Content::executeCommand( sal_Int32 nCommandHandle,
831*b1cdbd2cSJim Jagielski                              const Any& rCommandArgument )
832*b1cdbd2cSJim Jagielski     throw( CommandAbortedException, RuntimeException, Exception )
833*b1cdbd2cSJim Jagielski {
834*b1cdbd2cSJim Jagielski     Command aCommand;
835*b1cdbd2cSJim Jagielski     aCommand.Name     = rtl::OUString(); // n/a
836*b1cdbd2cSJim Jagielski     aCommand.Handle   = nCommandHandle;
837*b1cdbd2cSJim Jagielski     aCommand.Argument = rCommandArgument;
838*b1cdbd2cSJim Jagielski 
839*b1cdbd2cSJim Jagielski     return m_xImpl->executeCommand( aCommand );
840*b1cdbd2cSJim Jagielski }
841*b1cdbd2cSJim Jagielski 
842*b1cdbd2cSJim Jagielski //=========================================================================
abortCommand()843*b1cdbd2cSJim Jagielski void Content::abortCommand()
844*b1cdbd2cSJim Jagielski {
845*b1cdbd2cSJim Jagielski     m_xImpl->abortCommand();
846*b1cdbd2cSJim Jagielski }
847*b1cdbd2cSJim Jagielski 
848*b1cdbd2cSJim Jagielski //=========================================================================
createCursorAny(const Sequence<rtl::OUString> & rPropertyNames,ResultSetInclude eMode)849*b1cdbd2cSJim Jagielski Any Content::createCursorAny( const Sequence< rtl::OUString >& rPropertyNames,
850*b1cdbd2cSJim Jagielski                               ResultSetInclude eMode )
851*b1cdbd2cSJim Jagielski     throw( CommandAbortedException, RuntimeException, Exception )
852*b1cdbd2cSJim Jagielski {
853*b1cdbd2cSJim Jagielski     sal_Int32 nCount = rPropertyNames.getLength();
854*b1cdbd2cSJim Jagielski     Sequence< Property > aProps( nCount );
855*b1cdbd2cSJim Jagielski     Property* pProps = aProps.getArray();
856*b1cdbd2cSJim Jagielski     const rtl::OUString* pNames = rPropertyNames.getConstArray();
857*b1cdbd2cSJim Jagielski     for ( sal_Int32 n = 0; n < nCount; ++n )
858*b1cdbd2cSJim Jagielski     {
859*b1cdbd2cSJim Jagielski         Property& rProp = pProps[ n ];
860*b1cdbd2cSJim Jagielski         rProp.Name   = pNames[ n ];
861*b1cdbd2cSJim Jagielski         rProp.Handle = -1; // n/a
862*b1cdbd2cSJim Jagielski     }
863*b1cdbd2cSJim Jagielski 
864*b1cdbd2cSJim Jagielski     OpenCommandArgument2 aArg;
865*b1cdbd2cSJim Jagielski     aArg.Mode       = ( eMode == INCLUDE_FOLDERS_ONLY )
866*b1cdbd2cSJim Jagielski                         ? OpenMode::FOLDERS
867*b1cdbd2cSJim Jagielski                         : ( eMode == INCLUDE_DOCUMENTS_ONLY )
868*b1cdbd2cSJim Jagielski                             ? OpenMode::DOCUMENTS : OpenMode::ALL;
869*b1cdbd2cSJim Jagielski     aArg.Priority   = 0; // unused
870*b1cdbd2cSJim Jagielski     aArg.Sink       = Reference< XInterface >(); // unused
871*b1cdbd2cSJim Jagielski     aArg.Properties = aProps;
872*b1cdbd2cSJim Jagielski 
873*b1cdbd2cSJim Jagielski     Command aCommand;
874*b1cdbd2cSJim Jagielski     aCommand.Name     = rtl::OUString::createFromAscii( "open" );
875*b1cdbd2cSJim Jagielski     aCommand.Handle   = -1; // n/a
876*b1cdbd2cSJim Jagielski     aCommand.Argument <<= aArg;
877*b1cdbd2cSJim Jagielski 
878*b1cdbd2cSJim Jagielski     return m_xImpl->executeCommand( aCommand );
879*b1cdbd2cSJim Jagielski }
880*b1cdbd2cSJim Jagielski 
881*b1cdbd2cSJim Jagielski //=========================================================================
createCursorAny(const Sequence<sal_Int32> & rPropertyHandles,ResultSetInclude eMode)882*b1cdbd2cSJim Jagielski Any Content::createCursorAny( const Sequence< sal_Int32 >& rPropertyHandles,
883*b1cdbd2cSJim Jagielski                               ResultSetInclude eMode )
884*b1cdbd2cSJim Jagielski     throw( CommandAbortedException, RuntimeException, Exception )
885*b1cdbd2cSJim Jagielski {
886*b1cdbd2cSJim Jagielski     sal_Int32 nCount = rPropertyHandles.getLength();
887*b1cdbd2cSJim Jagielski     Sequence< Property > aProps( nCount );
888*b1cdbd2cSJim Jagielski     Property* pProps = aProps.getArray();
889*b1cdbd2cSJim Jagielski     const sal_Int32* pHandles = rPropertyHandles.getConstArray();
890*b1cdbd2cSJim Jagielski     for ( sal_Int32 n = 0; n < nCount; ++n )
891*b1cdbd2cSJim Jagielski     {
892*b1cdbd2cSJim Jagielski         Property& rProp = pProps[ n ];
893*b1cdbd2cSJim Jagielski         rProp.Name   = rtl::OUString(); // n/a
894*b1cdbd2cSJim Jagielski         rProp.Handle = pHandles[ n ];
895*b1cdbd2cSJim Jagielski     }
896*b1cdbd2cSJim Jagielski 
897*b1cdbd2cSJim Jagielski     OpenCommandArgument2 aArg;
898*b1cdbd2cSJim Jagielski     aArg.Mode       = ( eMode == INCLUDE_FOLDERS_ONLY )
899*b1cdbd2cSJim Jagielski                         ? OpenMode::FOLDERS
900*b1cdbd2cSJim Jagielski                         : ( eMode == INCLUDE_DOCUMENTS_ONLY )
901*b1cdbd2cSJim Jagielski                             ? OpenMode::DOCUMENTS : OpenMode::ALL;
902*b1cdbd2cSJim Jagielski     aArg.Priority   = 0; // unused
903*b1cdbd2cSJim Jagielski     aArg.Sink       = Reference< XInterface >(); // unused
904*b1cdbd2cSJim Jagielski     aArg.Properties = aProps;
905*b1cdbd2cSJim Jagielski 
906*b1cdbd2cSJim Jagielski     Command aCommand;
907*b1cdbd2cSJim Jagielski     aCommand.Name     = rtl::OUString::createFromAscii( "open" );
908*b1cdbd2cSJim Jagielski     aCommand.Handle   = -1; // n/a
909*b1cdbd2cSJim Jagielski     aCommand.Argument <<= aArg;
910*b1cdbd2cSJim Jagielski 
911*b1cdbd2cSJim Jagielski     return m_xImpl->executeCommand( aCommand );
912*b1cdbd2cSJim Jagielski }
913*b1cdbd2cSJim Jagielski 
914*b1cdbd2cSJim Jagielski //=========================================================================
createCursor(const Sequence<rtl::OUString> & rPropertyNames,ResultSetInclude eMode)915*b1cdbd2cSJim Jagielski Reference< XResultSet > Content::createCursor(
916*b1cdbd2cSJim Jagielski                             const Sequence< rtl::OUString >& rPropertyNames,
917*b1cdbd2cSJim Jagielski                             ResultSetInclude eMode )
918*b1cdbd2cSJim Jagielski     throw( CommandAbortedException, RuntimeException, Exception )
919*b1cdbd2cSJim Jagielski {
920*b1cdbd2cSJim Jagielski     Any aCursorAny = createCursorAny( rPropertyNames, eMode );
921*b1cdbd2cSJim Jagielski 
922*b1cdbd2cSJim Jagielski     Reference< XDynamicResultSet > xDynSet;
923*b1cdbd2cSJim Jagielski     Reference< XResultSet > aResult;
924*b1cdbd2cSJim Jagielski 
925*b1cdbd2cSJim Jagielski     aCursorAny >>= xDynSet;
926*b1cdbd2cSJim Jagielski     if ( xDynSet.is() )
927*b1cdbd2cSJim Jagielski         aResult = xDynSet->getStaticResultSet();
928*b1cdbd2cSJim Jagielski 
929*b1cdbd2cSJim Jagielski     OSL_ENSURE( aResult.is(), "Content::createCursor - no cursor!" );
930*b1cdbd2cSJim Jagielski 
931*b1cdbd2cSJim Jagielski     if ( !aResult.is() )
932*b1cdbd2cSJim Jagielski     {
933*b1cdbd2cSJim Jagielski         // Former, the open command directly returned a XResultSet.
934*b1cdbd2cSJim Jagielski         aCursorAny >>= aResult;
935*b1cdbd2cSJim Jagielski 
936*b1cdbd2cSJim Jagielski         OSL_ENSURE( !aResult.is(),
937*b1cdbd2cSJim Jagielski                     "Content::createCursor - open-Command must "
938*b1cdbd2cSJim Jagielski                     "return a Reference< XDynnamicResultSet >!" );
939*b1cdbd2cSJim Jagielski     }
940*b1cdbd2cSJim Jagielski 
941*b1cdbd2cSJim Jagielski     return aResult;
942*b1cdbd2cSJim Jagielski }
943*b1cdbd2cSJim Jagielski 
944*b1cdbd2cSJim Jagielski //=========================================================================
createCursor(const Sequence<sal_Int32> & rPropertyHandles,ResultSetInclude eMode)945*b1cdbd2cSJim Jagielski Reference< XResultSet > Content::createCursor(
946*b1cdbd2cSJim Jagielski                             const Sequence< sal_Int32 >& rPropertyHandles,
947*b1cdbd2cSJim Jagielski                             ResultSetInclude eMode )
948*b1cdbd2cSJim Jagielski     throw( CommandAbortedException, RuntimeException, Exception )
949*b1cdbd2cSJim Jagielski {
950*b1cdbd2cSJim Jagielski     Any aCursorAny = createCursorAny( rPropertyHandles, eMode );
951*b1cdbd2cSJim Jagielski 
952*b1cdbd2cSJim Jagielski     Reference< XDynamicResultSet > xDynSet;
953*b1cdbd2cSJim Jagielski     Reference< XResultSet > aResult;
954*b1cdbd2cSJim Jagielski 
955*b1cdbd2cSJim Jagielski     aCursorAny >>= xDynSet;
956*b1cdbd2cSJim Jagielski     if ( xDynSet.is() )
957*b1cdbd2cSJim Jagielski         aResult = xDynSet->getStaticResultSet();
958*b1cdbd2cSJim Jagielski 
959*b1cdbd2cSJim Jagielski     OSL_ENSURE( aResult.is(), "Content::createCursor - no cursor!" );
960*b1cdbd2cSJim Jagielski 
961*b1cdbd2cSJim Jagielski     if ( !aResult.is() )
962*b1cdbd2cSJim Jagielski     {
963*b1cdbd2cSJim Jagielski         // Former, the open command directly returned a XResultSet.
964*b1cdbd2cSJim Jagielski         aCursorAny >>= aResult;
965*b1cdbd2cSJim Jagielski 
966*b1cdbd2cSJim Jagielski         OSL_ENSURE( !aResult.is(),
967*b1cdbd2cSJim Jagielski                     "Content::createCursor - open-Command must "
968*b1cdbd2cSJim Jagielski                     "return a Reference< XDynnamicResultSet >!" );
969*b1cdbd2cSJim Jagielski     }
970*b1cdbd2cSJim Jagielski 
971*b1cdbd2cSJim Jagielski     return aResult;
972*b1cdbd2cSJim Jagielski }
973*b1cdbd2cSJim Jagielski 
974*b1cdbd2cSJim Jagielski //=========================================================================
createDynamicCursor(const Sequence<rtl::OUString> & rPropertyNames,ResultSetInclude eMode)975*b1cdbd2cSJim Jagielski Reference< XDynamicResultSet > Content::createDynamicCursor(
976*b1cdbd2cSJim Jagielski                             const Sequence< rtl::OUString >& rPropertyNames,
977*b1cdbd2cSJim Jagielski                             ResultSetInclude eMode )
978*b1cdbd2cSJim Jagielski     throw( CommandAbortedException, RuntimeException, Exception )
979*b1cdbd2cSJim Jagielski {
980*b1cdbd2cSJim Jagielski     Reference< XDynamicResultSet > aResult;
981*b1cdbd2cSJim Jagielski     createCursorAny( rPropertyNames, eMode ) >>= aResult;
982*b1cdbd2cSJim Jagielski 
983*b1cdbd2cSJim Jagielski     OSL_ENSURE( aResult.is(), "Content::createDynamicCursor - no cursor!" );
984*b1cdbd2cSJim Jagielski 
985*b1cdbd2cSJim Jagielski     return aResult;
986*b1cdbd2cSJim Jagielski }
987*b1cdbd2cSJim Jagielski 
988*b1cdbd2cSJim Jagielski //=========================================================================
createDynamicCursor(const Sequence<sal_Int32> & rPropertyHandles,ResultSetInclude eMode)989*b1cdbd2cSJim Jagielski Reference< XDynamicResultSet > Content::createDynamicCursor(
990*b1cdbd2cSJim Jagielski                             const Sequence< sal_Int32 >& rPropertyHandles,
991*b1cdbd2cSJim Jagielski                             ResultSetInclude eMode )
992*b1cdbd2cSJim Jagielski     throw( CommandAbortedException, RuntimeException, Exception )
993*b1cdbd2cSJim Jagielski {
994*b1cdbd2cSJim Jagielski     Reference< XDynamicResultSet > aResult;
995*b1cdbd2cSJim Jagielski     createCursorAny( rPropertyHandles, eMode ) >>= aResult;
996*b1cdbd2cSJim Jagielski 
997*b1cdbd2cSJim Jagielski     OSL_ENSURE( aResult.is(), "Content::createDynamicCursor - no cursor!" );
998*b1cdbd2cSJim Jagielski 
999*b1cdbd2cSJim Jagielski     return aResult;
1000*b1cdbd2cSJim Jagielski }
1001*b1cdbd2cSJim Jagielski 
1002*b1cdbd2cSJim Jagielski //=========================================================================
createSortedDynamicCursor(const Sequence<rtl::OUString> & rPropertyNames,const Sequence<NumberedSortingInfo> & rSortInfo,Reference<XAnyCompareFactory> rAnyCompareFactory,ResultSetInclude eMode)1003*b1cdbd2cSJim Jagielski Reference< XDynamicResultSet > Content::createSortedDynamicCursor(
1004*b1cdbd2cSJim Jagielski                             const Sequence< rtl::OUString >& rPropertyNames,
1005*b1cdbd2cSJim Jagielski                             const Sequence< NumberedSortingInfo >& rSortInfo,
1006*b1cdbd2cSJim Jagielski                             Reference< XAnyCompareFactory > rAnyCompareFactory,
1007*b1cdbd2cSJim Jagielski                             ResultSetInclude eMode )
1008*b1cdbd2cSJim Jagielski     throw( CommandAbortedException, RuntimeException, Exception )
1009*b1cdbd2cSJim Jagielski {
1010*b1cdbd2cSJim Jagielski     Reference< XDynamicResultSet > aResult;
1011*b1cdbd2cSJim Jagielski     Reference< XDynamicResultSet > aOrigCursor = createDynamicCursor( rPropertyNames, eMode );
1012*b1cdbd2cSJim Jagielski 
1013*b1cdbd2cSJim Jagielski     if( aOrigCursor.is() )
1014*b1cdbd2cSJim Jagielski     {
1015*b1cdbd2cSJim Jagielski         Reference< XMultiServiceFactory > aServiceManager = m_xImpl->getServiceManager();
1016*b1cdbd2cSJim Jagielski 
1017*b1cdbd2cSJim Jagielski         if( aServiceManager.is() )
1018*b1cdbd2cSJim Jagielski         {
1019*b1cdbd2cSJim Jagielski             Reference< XSortedDynamicResultSetFactory > aSortFactory( aServiceManager->createInstance(
1020*b1cdbd2cSJim Jagielski                                 rtl::OUString::createFromAscii( "com.sun.star.ucb.SortedDynamicResultSetFactory" )),
1021*b1cdbd2cSJim Jagielski                                 UNO_QUERY );
1022*b1cdbd2cSJim Jagielski 
1023*b1cdbd2cSJim Jagielski             aResult = aSortFactory->createSortedDynamicResultSet( aOrigCursor,
1024*b1cdbd2cSJim Jagielski                                                               rSortInfo,
1025*b1cdbd2cSJim Jagielski                                                               rAnyCompareFactory );
1026*b1cdbd2cSJim Jagielski         }
1027*b1cdbd2cSJim Jagielski 
1028*b1cdbd2cSJim Jagielski         OSL_ENSURE( aResult.is(), "Content::createSortedDynamicCursor - no sorted cursor!\n" );
1029*b1cdbd2cSJim Jagielski 
1030*b1cdbd2cSJim Jagielski         if( !aResult.is() )
1031*b1cdbd2cSJim Jagielski             aResult = aOrigCursor;
1032*b1cdbd2cSJim Jagielski     }
1033*b1cdbd2cSJim Jagielski 
1034*b1cdbd2cSJim Jagielski     return aResult;
1035*b1cdbd2cSJim Jagielski }
1036*b1cdbd2cSJim Jagielski 
1037*b1cdbd2cSJim Jagielski //=========================================================================
createSortedDynamicCursor(const Sequence<sal_Int32> & rPropertyHandles,const Sequence<NumberedSortingInfo> & rSortInfo,Reference<XAnyCompareFactory> rAnyCompareFactory,ResultSetInclude eMode)1038*b1cdbd2cSJim Jagielski Reference< XDynamicResultSet > Content::createSortedDynamicCursor(
1039*b1cdbd2cSJim Jagielski                             const Sequence< sal_Int32 >& rPropertyHandles,
1040*b1cdbd2cSJim Jagielski                             const Sequence< NumberedSortingInfo >& rSortInfo,
1041*b1cdbd2cSJim Jagielski                             Reference< XAnyCompareFactory > rAnyCompareFactory,
1042*b1cdbd2cSJim Jagielski                             ResultSetInclude eMode )
1043*b1cdbd2cSJim Jagielski     throw( CommandAbortedException, RuntimeException, Exception )
1044*b1cdbd2cSJim Jagielski {
1045*b1cdbd2cSJim Jagielski     Reference< XDynamicResultSet > aResult;
1046*b1cdbd2cSJim Jagielski     Reference< XDynamicResultSet > aOrigCursor = createDynamicCursor( rPropertyHandles, eMode );
1047*b1cdbd2cSJim Jagielski 
1048*b1cdbd2cSJim Jagielski     if( aOrigCursor.is() )
1049*b1cdbd2cSJim Jagielski     {
1050*b1cdbd2cSJim Jagielski         Reference< XMultiServiceFactory > aServiceManager = m_xImpl->getServiceManager();
1051*b1cdbd2cSJim Jagielski 
1052*b1cdbd2cSJim Jagielski         if( aServiceManager.is() )
1053*b1cdbd2cSJim Jagielski         {
1054*b1cdbd2cSJim Jagielski             Reference< XSortedDynamicResultSetFactory > aSortFactory( aServiceManager->createInstance(
1055*b1cdbd2cSJim Jagielski                                 rtl::OUString::createFromAscii( "com.sun.star.ucb.SortedDynamicResultSetFactory" )),
1056*b1cdbd2cSJim Jagielski                                 UNO_QUERY );
1057*b1cdbd2cSJim Jagielski 
1058*b1cdbd2cSJim Jagielski             aResult = aSortFactory->createSortedDynamicResultSet( aOrigCursor,
1059*b1cdbd2cSJim Jagielski                                                               rSortInfo,
1060*b1cdbd2cSJim Jagielski                                                               rAnyCompareFactory );
1061*b1cdbd2cSJim Jagielski         }
1062*b1cdbd2cSJim Jagielski 
1063*b1cdbd2cSJim Jagielski         OSL_ENSURE( aResult.is(), "Content::createSortedDynamicCursor - no sorted cursor!\n" );
1064*b1cdbd2cSJim Jagielski 
1065*b1cdbd2cSJim Jagielski         if( !aResult.is() )
1066*b1cdbd2cSJim Jagielski             aResult = aOrigCursor;
1067*b1cdbd2cSJim Jagielski     }
1068*b1cdbd2cSJim Jagielski 
1069*b1cdbd2cSJim Jagielski     return aResult;
1070*b1cdbd2cSJim Jagielski }
1071*b1cdbd2cSJim Jagielski 
1072*b1cdbd2cSJim Jagielski //=========================================================================
createSortedCursor(const Sequence<rtl::OUString> & rPropertyNames,const Sequence<NumberedSortingInfo> & rSortInfo,Reference<XAnyCompareFactory> rAnyCompareFactory,ResultSetInclude eMode)1073*b1cdbd2cSJim Jagielski Reference< XResultSet > Content::createSortedCursor(
1074*b1cdbd2cSJim Jagielski                             const Sequence< rtl::OUString >& rPropertyNames,
1075*b1cdbd2cSJim Jagielski                             const Sequence< NumberedSortingInfo >& rSortInfo,
1076*b1cdbd2cSJim Jagielski                             Reference< XAnyCompareFactory > rAnyCompareFactory,
1077*b1cdbd2cSJim Jagielski                             ResultSetInclude eMode )
1078*b1cdbd2cSJim Jagielski     throw( CommandAbortedException, RuntimeException, Exception )
1079*b1cdbd2cSJim Jagielski {
1080*b1cdbd2cSJim Jagielski     Reference< XResultSet > aResult;
1081*b1cdbd2cSJim Jagielski     Reference< XDynamicResultSet > aDynSet;
1082*b1cdbd2cSJim Jagielski 
1083*b1cdbd2cSJim Jagielski     Any aCursorAny = createCursorAny( rPropertyNames, eMode );
1084*b1cdbd2cSJim Jagielski 
1085*b1cdbd2cSJim Jagielski     aCursorAny >>= aDynSet;
1086*b1cdbd2cSJim Jagielski 
1087*b1cdbd2cSJim Jagielski     if( aDynSet.is() )
1088*b1cdbd2cSJim Jagielski     {
1089*b1cdbd2cSJim Jagielski         Reference< XDynamicResultSet > aDynResult;
1090*b1cdbd2cSJim Jagielski         Reference< XMultiServiceFactory > aServiceManager = m_xImpl->getServiceManager();
1091*b1cdbd2cSJim Jagielski 
1092*b1cdbd2cSJim Jagielski         if( aServiceManager.is() )
1093*b1cdbd2cSJim Jagielski         {
1094*b1cdbd2cSJim Jagielski             Reference< XSortedDynamicResultSetFactory > aSortFactory( aServiceManager->createInstance(
1095*b1cdbd2cSJim Jagielski                                 rtl::OUString::createFromAscii( "com.sun.star.ucb.SortedDynamicResultSetFactory" )),
1096*b1cdbd2cSJim Jagielski                                 UNO_QUERY );
1097*b1cdbd2cSJim Jagielski 
1098*b1cdbd2cSJim Jagielski             aDynResult = aSortFactory->createSortedDynamicResultSet( aDynSet,
1099*b1cdbd2cSJim Jagielski                                                               rSortInfo,
1100*b1cdbd2cSJim Jagielski                                                               rAnyCompareFactory );
1101*b1cdbd2cSJim Jagielski         }
1102*b1cdbd2cSJim Jagielski 
1103*b1cdbd2cSJim Jagielski         OSL_ENSURE( aDynResult.is(), "Content::createSortedCursor - no sorted cursor!\n" );
1104*b1cdbd2cSJim Jagielski 
1105*b1cdbd2cSJim Jagielski         if( aDynResult.is() )
1106*b1cdbd2cSJim Jagielski             aResult = aDynResult->getStaticResultSet();
1107*b1cdbd2cSJim Jagielski         else
1108*b1cdbd2cSJim Jagielski             aResult = aDynSet->getStaticResultSet();
1109*b1cdbd2cSJim Jagielski     }
1110*b1cdbd2cSJim Jagielski 
1111*b1cdbd2cSJim Jagielski     OSL_ENSURE( aResult.is(), "Content::createSortedCursor - no cursor!" );
1112*b1cdbd2cSJim Jagielski 
1113*b1cdbd2cSJim Jagielski     if ( !aResult.is() )
1114*b1cdbd2cSJim Jagielski     {
1115*b1cdbd2cSJim Jagielski         // Former, the open command directly returned a XResultSet.
1116*b1cdbd2cSJim Jagielski         aCursorAny >>= aResult;
1117*b1cdbd2cSJim Jagielski 
1118*b1cdbd2cSJim Jagielski         OSL_ENSURE( !aResult.is(),
1119*b1cdbd2cSJim Jagielski                     "Content::createCursor - open-Command must "
1120*b1cdbd2cSJim Jagielski                     "return a Reference< XDynnamicResultSet >!" );
1121*b1cdbd2cSJim Jagielski     }
1122*b1cdbd2cSJim Jagielski 
1123*b1cdbd2cSJim Jagielski     return aResult;
1124*b1cdbd2cSJim Jagielski }
1125*b1cdbd2cSJim Jagielski 
1126*b1cdbd2cSJim Jagielski //=========================================================================
createSortedCursor(const Sequence<sal_Int32> & rPropertyHandles,const Sequence<NumberedSortingInfo> & rSortInfo,Reference<XAnyCompareFactory> rAnyCompareFactory,ResultSetInclude eMode)1127*b1cdbd2cSJim Jagielski Reference< XResultSet > Content::createSortedCursor(
1128*b1cdbd2cSJim Jagielski                             const Sequence< sal_Int32 >& rPropertyHandles,
1129*b1cdbd2cSJim Jagielski                             const Sequence< NumberedSortingInfo >& rSortInfo,
1130*b1cdbd2cSJim Jagielski                             Reference< XAnyCompareFactory > rAnyCompareFactory,
1131*b1cdbd2cSJim Jagielski                             ResultSetInclude eMode )
1132*b1cdbd2cSJim Jagielski     throw( CommandAbortedException, RuntimeException, Exception )
1133*b1cdbd2cSJim Jagielski {
1134*b1cdbd2cSJim Jagielski     Reference< XResultSet > aResult;
1135*b1cdbd2cSJim Jagielski     Reference< XDynamicResultSet > aDynSet;
1136*b1cdbd2cSJim Jagielski 
1137*b1cdbd2cSJim Jagielski     Any aCursorAny = createCursorAny( rPropertyHandles, eMode );
1138*b1cdbd2cSJim Jagielski 
1139*b1cdbd2cSJim Jagielski     aCursorAny >>= aDynSet;
1140*b1cdbd2cSJim Jagielski 
1141*b1cdbd2cSJim Jagielski     if( aDynSet.is() )
1142*b1cdbd2cSJim Jagielski     {
1143*b1cdbd2cSJim Jagielski         Reference< XDynamicResultSet > aDynResult;
1144*b1cdbd2cSJim Jagielski         Reference< XMultiServiceFactory > aServiceManager = m_xImpl->getServiceManager();
1145*b1cdbd2cSJim Jagielski 
1146*b1cdbd2cSJim Jagielski         if( aServiceManager.is() )
1147*b1cdbd2cSJim Jagielski         {
1148*b1cdbd2cSJim Jagielski             Reference< XSortedDynamicResultSetFactory > aSortFactory( aServiceManager->createInstance(
1149*b1cdbd2cSJim Jagielski                                 rtl::OUString::createFromAscii( "com.sun.star.ucb.SortedDynamicResultSetFactory" )),
1150*b1cdbd2cSJim Jagielski                                 UNO_QUERY );
1151*b1cdbd2cSJim Jagielski 
1152*b1cdbd2cSJim Jagielski             aDynResult = aSortFactory->createSortedDynamicResultSet( aDynSet,
1153*b1cdbd2cSJim Jagielski                                                               rSortInfo,
1154*b1cdbd2cSJim Jagielski                                                               rAnyCompareFactory );
1155*b1cdbd2cSJim Jagielski         }
1156*b1cdbd2cSJim Jagielski 
1157*b1cdbd2cSJim Jagielski         OSL_ENSURE( aDynResult.is(), "Content::createSortedCursor - no sorted cursor!\n" );
1158*b1cdbd2cSJim Jagielski 
1159*b1cdbd2cSJim Jagielski         if( aDynResult.is() )
1160*b1cdbd2cSJim Jagielski             aResult = aDynResult->getStaticResultSet();
1161*b1cdbd2cSJim Jagielski         else
1162*b1cdbd2cSJim Jagielski             aResult = aDynSet->getStaticResultSet();
1163*b1cdbd2cSJim Jagielski     }
1164*b1cdbd2cSJim Jagielski 
1165*b1cdbd2cSJim Jagielski     OSL_ENSURE( aResult.is(), "Content::createSortedCursor - no cursor!" );
1166*b1cdbd2cSJim Jagielski 
1167*b1cdbd2cSJim Jagielski     if ( !aResult.is() )
1168*b1cdbd2cSJim Jagielski     {
1169*b1cdbd2cSJim Jagielski         // Former, the open command directly returned a XResultSet.
1170*b1cdbd2cSJim Jagielski         aCursorAny >>= aResult;
1171*b1cdbd2cSJim Jagielski 
1172*b1cdbd2cSJim Jagielski         OSL_ENSURE( !aResult.is(),
1173*b1cdbd2cSJim Jagielski                     "Content::createCursor - open-Command must "
1174*b1cdbd2cSJim Jagielski                     "return a Reference< XDynnamicResultSet >!" );
1175*b1cdbd2cSJim Jagielski     }
1176*b1cdbd2cSJim Jagielski 
1177*b1cdbd2cSJim Jagielski     return aResult;
1178*b1cdbd2cSJim Jagielski }
1179*b1cdbd2cSJim Jagielski 
1180*b1cdbd2cSJim Jagielski //=========================================================================
openStream()1181*b1cdbd2cSJim Jagielski Reference< XInputStream > Content::openStream()
1182*b1cdbd2cSJim Jagielski     throw( CommandAbortedException, RuntimeException, Exception )
1183*b1cdbd2cSJim Jagielski {
1184*b1cdbd2cSJim Jagielski     if ( !isDocument() )
1185*b1cdbd2cSJim Jagielski         return Reference< XInputStream >();
1186*b1cdbd2cSJim Jagielski 
1187*b1cdbd2cSJim Jagielski     Reference< XActiveDataSink > xSink = new ActiveDataSink;
1188*b1cdbd2cSJim Jagielski 
1189*b1cdbd2cSJim Jagielski     OpenCommandArgument2 aArg;
1190*b1cdbd2cSJim Jagielski     aArg.Mode       = OpenMode::DOCUMENT;
1191*b1cdbd2cSJim Jagielski     aArg.Priority   = 0; // unused
1192*b1cdbd2cSJim Jagielski     aArg.Sink       = xSink;
1193*b1cdbd2cSJim Jagielski     aArg.Properties = Sequence< Property >( 0 ); // unused
1194*b1cdbd2cSJim Jagielski 
1195*b1cdbd2cSJim Jagielski     Command aCommand;
1196*b1cdbd2cSJim Jagielski     aCommand.Name     = rtl::OUString::createFromAscii( "open" );
1197*b1cdbd2cSJim Jagielski     aCommand.Handle   = -1; // n/a
1198*b1cdbd2cSJim Jagielski     aCommand.Argument <<= aArg;
1199*b1cdbd2cSJim Jagielski 
1200*b1cdbd2cSJim Jagielski     m_xImpl->executeCommand( aCommand );
1201*b1cdbd2cSJim Jagielski 
1202*b1cdbd2cSJim Jagielski     return xSink->getInputStream();
1203*b1cdbd2cSJim Jagielski }
1204*b1cdbd2cSJim Jagielski 
1205*b1cdbd2cSJim Jagielski //=========================================================================
openStreamNoLock()1206*b1cdbd2cSJim Jagielski Reference< XInputStream > Content::openStreamNoLock()
1207*b1cdbd2cSJim Jagielski     throw( CommandAbortedException, RuntimeException, Exception )
1208*b1cdbd2cSJim Jagielski {
1209*b1cdbd2cSJim Jagielski     if ( !isDocument() )
1210*b1cdbd2cSJim Jagielski         return Reference< XInputStream >();
1211*b1cdbd2cSJim Jagielski 
1212*b1cdbd2cSJim Jagielski     Reference< XActiveDataSink > xSink = new ActiveDataSink;
1213*b1cdbd2cSJim Jagielski 
1214*b1cdbd2cSJim Jagielski     OpenCommandArgument2 aArg;
1215*b1cdbd2cSJim Jagielski     aArg.Mode       = OpenMode::DOCUMENT_SHARE_DENY_NONE;
1216*b1cdbd2cSJim Jagielski     aArg.Priority   = 0; // unused
1217*b1cdbd2cSJim Jagielski     aArg.Sink       = xSink;
1218*b1cdbd2cSJim Jagielski     aArg.Properties = Sequence< Property >( 0 ); // unused
1219*b1cdbd2cSJim Jagielski 
1220*b1cdbd2cSJim Jagielski     Command aCommand;
1221*b1cdbd2cSJim Jagielski     aCommand.Name     = rtl::OUString::createFromAscii( "open" );
1222*b1cdbd2cSJim Jagielski     aCommand.Handle   = -1; // n/a
1223*b1cdbd2cSJim Jagielski     aCommand.Argument <<= aArg;
1224*b1cdbd2cSJim Jagielski 
1225*b1cdbd2cSJim Jagielski     m_xImpl->executeCommand( aCommand );
1226*b1cdbd2cSJim Jagielski 
1227*b1cdbd2cSJim Jagielski     return xSink->getInputStream();
1228*b1cdbd2cSJim Jagielski }
1229*b1cdbd2cSJim Jagielski 
1230*b1cdbd2cSJim Jagielski //=========================================================================
openWriteableStream()1231*b1cdbd2cSJim Jagielski Reference< XStream > Content::openWriteableStream()
1232*b1cdbd2cSJim Jagielski     throw( CommandAbortedException, RuntimeException, Exception )
1233*b1cdbd2cSJim Jagielski {
1234*b1cdbd2cSJim Jagielski     if ( !isDocument() )
1235*b1cdbd2cSJim Jagielski         return Reference< XStream >();
1236*b1cdbd2cSJim Jagielski 
1237*b1cdbd2cSJim Jagielski     Reference< XActiveDataStreamer > xStreamer = new ActiveDataStreamer;
1238*b1cdbd2cSJim Jagielski 
1239*b1cdbd2cSJim Jagielski     OpenCommandArgument2 aArg;
1240*b1cdbd2cSJim Jagielski     aArg.Mode       = OpenMode::DOCUMENT;
1241*b1cdbd2cSJim Jagielski     aArg.Priority   = 0; // unused
1242*b1cdbd2cSJim Jagielski     aArg.Sink       = xStreamer;
1243*b1cdbd2cSJim Jagielski     aArg.Properties = Sequence< Property >( 0 ); // unused
1244*b1cdbd2cSJim Jagielski 
1245*b1cdbd2cSJim Jagielski     Command aCommand;
1246*b1cdbd2cSJim Jagielski     aCommand.Name     = rtl::OUString::createFromAscii( "open" );
1247*b1cdbd2cSJim Jagielski     aCommand.Handle   = -1; // n/a
1248*b1cdbd2cSJim Jagielski     aCommand.Argument <<= aArg;
1249*b1cdbd2cSJim Jagielski 
1250*b1cdbd2cSJim Jagielski     m_xImpl->executeCommand( aCommand );
1251*b1cdbd2cSJim Jagielski 
1252*b1cdbd2cSJim Jagielski     return xStreamer->getStream();
1253*b1cdbd2cSJim Jagielski }
1254*b1cdbd2cSJim Jagielski 
1255*b1cdbd2cSJim Jagielski //=========================================================================
openWriteableStreamNoLock()1256*b1cdbd2cSJim Jagielski Reference< XStream > Content::openWriteableStreamNoLock()
1257*b1cdbd2cSJim Jagielski     throw( CommandAbortedException, RuntimeException, Exception )
1258*b1cdbd2cSJim Jagielski {
1259*b1cdbd2cSJim Jagielski     if ( !isDocument() )
1260*b1cdbd2cSJim Jagielski         return Reference< XStream >();
1261*b1cdbd2cSJim Jagielski 
1262*b1cdbd2cSJim Jagielski     Reference< XActiveDataStreamer > xStreamer = new ActiveDataStreamer;
1263*b1cdbd2cSJim Jagielski 
1264*b1cdbd2cSJim Jagielski     OpenCommandArgument2 aArg;
1265*b1cdbd2cSJim Jagielski     aArg.Mode       = OpenMode::DOCUMENT_SHARE_DENY_NONE;
1266*b1cdbd2cSJim Jagielski     aArg.Priority   = 0; // unused
1267*b1cdbd2cSJim Jagielski     aArg.Sink       = xStreamer;
1268*b1cdbd2cSJim Jagielski     aArg.Properties = Sequence< Property >( 0 ); // unused
1269*b1cdbd2cSJim Jagielski 
1270*b1cdbd2cSJim Jagielski     Command aCommand;
1271*b1cdbd2cSJim Jagielski     aCommand.Name     = rtl::OUString::createFromAscii( "open" );
1272*b1cdbd2cSJim Jagielski     aCommand.Handle   = -1; // n/a
1273*b1cdbd2cSJim Jagielski     aCommand.Argument <<= aArg;
1274*b1cdbd2cSJim Jagielski 
1275*b1cdbd2cSJim Jagielski     m_xImpl->executeCommand( aCommand );
1276*b1cdbd2cSJim Jagielski 
1277*b1cdbd2cSJim Jagielski     return xStreamer->getStream();
1278*b1cdbd2cSJim Jagielski }
1279*b1cdbd2cSJim Jagielski 
1280*b1cdbd2cSJim Jagielski //=========================================================================
openStream(const Reference<XActiveDataSink> & rSink)1281*b1cdbd2cSJim Jagielski sal_Bool Content::openStream( const Reference< XActiveDataSink >& rSink )
1282*b1cdbd2cSJim Jagielski     throw( CommandAbortedException, RuntimeException, Exception )
1283*b1cdbd2cSJim Jagielski {
1284*b1cdbd2cSJim Jagielski     if ( !isDocument() )
1285*b1cdbd2cSJim Jagielski         return sal_False;
1286*b1cdbd2cSJim Jagielski 
1287*b1cdbd2cSJim Jagielski     OpenCommandArgument2 aArg;
1288*b1cdbd2cSJim Jagielski     aArg.Mode       = OpenMode::DOCUMENT;
1289*b1cdbd2cSJim Jagielski     aArg.Priority   = 0; // unused
1290*b1cdbd2cSJim Jagielski     aArg.Sink       = rSink;
1291*b1cdbd2cSJim Jagielski     aArg.Properties = Sequence< Property >( 0 ); // unused
1292*b1cdbd2cSJim Jagielski 
1293*b1cdbd2cSJim Jagielski     Command aCommand;
1294*b1cdbd2cSJim Jagielski     aCommand.Name     = rtl::OUString::createFromAscii( "open" );
1295*b1cdbd2cSJim Jagielski     aCommand.Handle   = -1; // n/a
1296*b1cdbd2cSJim Jagielski     aCommand.Argument <<= aArg;
1297*b1cdbd2cSJim Jagielski 
1298*b1cdbd2cSJim Jagielski     m_xImpl->executeCommand( aCommand );
1299*b1cdbd2cSJim Jagielski 
1300*b1cdbd2cSJim Jagielski     return sal_True;
1301*b1cdbd2cSJim Jagielski }
1302*b1cdbd2cSJim Jagielski 
1303*b1cdbd2cSJim Jagielski //=========================================================================
openStream(const Reference<XOutputStream> & rStream)1304*b1cdbd2cSJim Jagielski sal_Bool Content::openStream( const Reference< XOutputStream >& rStream )
1305*b1cdbd2cSJim Jagielski     throw( CommandAbortedException, RuntimeException, Exception )
1306*b1cdbd2cSJim Jagielski {
1307*b1cdbd2cSJim Jagielski     if ( !isDocument() )
1308*b1cdbd2cSJim Jagielski         return sal_False;
1309*b1cdbd2cSJim Jagielski 
1310*b1cdbd2cSJim Jagielski     OpenCommandArgument2 aArg;
1311*b1cdbd2cSJim Jagielski     aArg.Mode       = OpenMode::DOCUMENT;
1312*b1cdbd2cSJim Jagielski     aArg.Priority   = 0; // unused
1313*b1cdbd2cSJim Jagielski     aArg.Sink       = rStream;
1314*b1cdbd2cSJim Jagielski     aArg.Properties = Sequence< Property >( 0 ); // unused
1315*b1cdbd2cSJim Jagielski 
1316*b1cdbd2cSJim Jagielski     Command aCommand;
1317*b1cdbd2cSJim Jagielski     aCommand.Name     = rtl::OUString::createFromAscii( "open" );
1318*b1cdbd2cSJim Jagielski     aCommand.Handle   = -1; // n/a
1319*b1cdbd2cSJim Jagielski     aCommand.Argument <<= aArg;
1320*b1cdbd2cSJim Jagielski 
1321*b1cdbd2cSJim Jagielski     m_xImpl->executeCommand( aCommand );
1322*b1cdbd2cSJim Jagielski 
1323*b1cdbd2cSJim Jagielski     return sal_True;
1324*b1cdbd2cSJim Jagielski }
1325*b1cdbd2cSJim Jagielski 
1326*b1cdbd2cSJim Jagielski //=========================================================================
writeStream(const Reference<XInputStream> & rStream,sal_Bool bReplaceExisting)1327*b1cdbd2cSJim Jagielski void Content::writeStream( const Reference< XInputStream >& rStream,
1328*b1cdbd2cSJim Jagielski                            sal_Bool bReplaceExisting )
1329*b1cdbd2cSJim Jagielski     throw( CommandAbortedException, RuntimeException, Exception )
1330*b1cdbd2cSJim Jagielski {
1331*b1cdbd2cSJim Jagielski     InsertCommandArgument aArg;
1332*b1cdbd2cSJim Jagielski     aArg.Data            = rStream.is() ? rStream : new EmptyInputStream;
1333*b1cdbd2cSJim Jagielski     aArg.ReplaceExisting = bReplaceExisting;
1334*b1cdbd2cSJim Jagielski 
1335*b1cdbd2cSJim Jagielski     Command aCommand;
1336*b1cdbd2cSJim Jagielski     aCommand.Name     = rtl::OUString::createFromAscii( "insert" );
1337*b1cdbd2cSJim Jagielski     aCommand.Handle   = -1; // n/a
1338*b1cdbd2cSJim Jagielski     aCommand.Argument <<= aArg;
1339*b1cdbd2cSJim Jagielski 
1340*b1cdbd2cSJim Jagielski     m_xImpl->executeCommand( aCommand );
1341*b1cdbd2cSJim Jagielski 
1342*b1cdbd2cSJim Jagielski     m_xImpl->inserted();
1343*b1cdbd2cSJim Jagielski }
1344*b1cdbd2cSJim Jagielski 
1345*b1cdbd2cSJim Jagielski //=========================================================================
queryCreatableContentsInfo()1346*b1cdbd2cSJim Jagielski Sequence< ContentInfo > Content::queryCreatableContentsInfo()
1347*b1cdbd2cSJim Jagielski     throw( CommandAbortedException, RuntimeException, Exception )
1348*b1cdbd2cSJim Jagielski {
1349*b1cdbd2cSJim Jagielski     // First, try it using "CreatableContentsInfo" property -> the "new" way.
1350*b1cdbd2cSJim Jagielski     Sequence< ContentInfo > aInfo;
1351*b1cdbd2cSJim Jagielski     if ( getPropertyValue(
1352*b1cdbd2cSJim Jagielski              rtl::OUString::createFromAscii( "CreatableContentsInfo" ) )
1353*b1cdbd2cSJim Jagielski          >>= aInfo )
1354*b1cdbd2cSJim Jagielski         return aInfo;
1355*b1cdbd2cSJim Jagielski 
1356*b1cdbd2cSJim Jagielski     // Second, try it using XContentCreator interface -> the "old" way (not
1357*b1cdbd2cSJim Jagielski     // providing the chance to supply an XCommandEnvironment.
1358*b1cdbd2cSJim Jagielski     Reference< XContentCreator > xCreator( m_xImpl->getContent(), UNO_QUERY );
1359*b1cdbd2cSJim Jagielski     if ( xCreator.is() )
1360*b1cdbd2cSJim Jagielski         aInfo = xCreator->queryCreatableContentsInfo();
1361*b1cdbd2cSJim Jagielski 
1362*b1cdbd2cSJim Jagielski     return aInfo;
1363*b1cdbd2cSJim Jagielski }
1364*b1cdbd2cSJim Jagielski 
1365*b1cdbd2cSJim Jagielski //=========================================================================
insertNewContent(const rtl::OUString & rContentType,const Sequence<rtl::OUString> & rPropertyNames,const Sequence<Any> & rPropertyValues,Content & rNewContent)1366*b1cdbd2cSJim Jagielski sal_Bool Content::insertNewContent( const rtl::OUString& rContentType,
1367*b1cdbd2cSJim Jagielski                                     const Sequence< rtl::OUString >&
1368*b1cdbd2cSJim Jagielski                                         rPropertyNames,
1369*b1cdbd2cSJim Jagielski                                     const Sequence< Any >& rPropertyValues,
1370*b1cdbd2cSJim Jagielski                                     Content& rNewContent )
1371*b1cdbd2cSJim Jagielski     throw( CommandAbortedException, RuntimeException, Exception )
1372*b1cdbd2cSJim Jagielski {
1373*b1cdbd2cSJim Jagielski     return insertNewContent( rContentType,
1374*b1cdbd2cSJim Jagielski                              rPropertyNames,
1375*b1cdbd2cSJim Jagielski                              rPropertyValues,
1376*b1cdbd2cSJim Jagielski                              new EmptyInputStream,
1377*b1cdbd2cSJim Jagielski                              rNewContent );
1378*b1cdbd2cSJim Jagielski }
1379*b1cdbd2cSJim Jagielski 
1380*b1cdbd2cSJim Jagielski //=========================================================================
insertNewContent(const rtl::OUString & rContentType,const Sequence<sal_Int32> & nPropertyHandles,const Sequence<Any> & rPropertyValues,Content & rNewContent)1381*b1cdbd2cSJim Jagielski sal_Bool Content::insertNewContent( const rtl::OUString& rContentType,
1382*b1cdbd2cSJim Jagielski                                     const Sequence< sal_Int32 >&
1383*b1cdbd2cSJim Jagielski                                         nPropertyHandles,
1384*b1cdbd2cSJim Jagielski                                     const Sequence< Any >& rPropertyValues,
1385*b1cdbd2cSJim Jagielski                                     Content& rNewContent )
1386*b1cdbd2cSJim Jagielski     throw( CommandAbortedException, RuntimeException, Exception )
1387*b1cdbd2cSJim Jagielski {
1388*b1cdbd2cSJim Jagielski     return insertNewContent( rContentType,
1389*b1cdbd2cSJim Jagielski                              nPropertyHandles,
1390*b1cdbd2cSJim Jagielski                              rPropertyValues,
1391*b1cdbd2cSJim Jagielski                              new EmptyInputStream,
1392*b1cdbd2cSJim Jagielski                              rNewContent );
1393*b1cdbd2cSJim Jagielski }
1394*b1cdbd2cSJim Jagielski 
1395*b1cdbd2cSJim Jagielski //=========================================================================
insertNewContent(const rtl::OUString & rContentType,const Sequence<rtl::OUString> & rPropertyNames,const Sequence<Any> & rPropertyValues,const Reference<XInputStream> & rData,Content & rNewContent)1396*b1cdbd2cSJim Jagielski sal_Bool Content::insertNewContent( const rtl::OUString& rContentType,
1397*b1cdbd2cSJim Jagielski                                     const Sequence< rtl::OUString >&
1398*b1cdbd2cSJim Jagielski                                         rPropertyNames,
1399*b1cdbd2cSJim Jagielski                                     const Sequence< Any >& rPropertyValues,
1400*b1cdbd2cSJim Jagielski                                     const Reference< XInputStream >& rData,
1401*b1cdbd2cSJim Jagielski                                     Content& rNewContent )
1402*b1cdbd2cSJim Jagielski     throw( CommandAbortedException, RuntimeException, Exception )
1403*b1cdbd2cSJim Jagielski {
1404*b1cdbd2cSJim Jagielski     if ( rContentType.getLength() == 0 )
1405*b1cdbd2cSJim Jagielski         return sal_False;
1406*b1cdbd2cSJim Jagielski 
1407*b1cdbd2cSJim Jagielski     // First, try it using "createNewContent" command -> the "new" way.
1408*b1cdbd2cSJim Jagielski     ContentInfo aInfo;
1409*b1cdbd2cSJim Jagielski     aInfo.Type = rContentType;
1410*b1cdbd2cSJim Jagielski     aInfo.Attributes = 0;
1411*b1cdbd2cSJim Jagielski 
1412*b1cdbd2cSJim Jagielski     Command aCommand;
1413*b1cdbd2cSJim Jagielski     aCommand.Name     = rtl::OUString::createFromAscii( "createNewContent" );
1414*b1cdbd2cSJim Jagielski     aCommand.Handle   = -1; // n/a
1415*b1cdbd2cSJim Jagielski     aCommand.Argument <<= aInfo;
1416*b1cdbd2cSJim Jagielski 
1417*b1cdbd2cSJim Jagielski     Reference< XContent > xNew;
1418*b1cdbd2cSJim Jagielski     try
1419*b1cdbd2cSJim Jagielski     {
1420*b1cdbd2cSJim Jagielski         m_xImpl->executeCommand( aCommand ) >>= xNew;
1421*b1cdbd2cSJim Jagielski     }
1422*b1cdbd2cSJim Jagielski     catch ( RuntimeException const & )
1423*b1cdbd2cSJim Jagielski     {
1424*b1cdbd2cSJim Jagielski         throw;
1425*b1cdbd2cSJim Jagielski     }
1426*b1cdbd2cSJim Jagielski     catch ( Exception const & )
1427*b1cdbd2cSJim Jagielski     {
1428*b1cdbd2cSJim Jagielski     }
1429*b1cdbd2cSJim Jagielski 
1430*b1cdbd2cSJim Jagielski     if ( !xNew.is() )
1431*b1cdbd2cSJim Jagielski     {
1432*b1cdbd2cSJim Jagielski         // Second, try it using XContentCreator interface -> the "old"
1433*b1cdbd2cSJim Jagielski         // way (not providing the chance to supply an XCommandEnvironment.
1434*b1cdbd2cSJim Jagielski         Reference< XContentCreator > xCreator( m_xImpl->getContent(), UNO_QUERY );
1435*b1cdbd2cSJim Jagielski 
1436*b1cdbd2cSJim Jagielski         if ( !xCreator.is() )
1437*b1cdbd2cSJim Jagielski             return sal_False;
1438*b1cdbd2cSJim Jagielski 
1439*b1cdbd2cSJim Jagielski         xNew = xCreator->createNewContent( aInfo );
1440*b1cdbd2cSJim Jagielski 
1441*b1cdbd2cSJim Jagielski         if ( !xNew.is() )
1442*b1cdbd2cSJim Jagielski             return sal_False;
1443*b1cdbd2cSJim Jagielski     }
1444*b1cdbd2cSJim Jagielski 
1445*b1cdbd2cSJim Jagielski     Content aNewContent( xNew, m_xImpl->getEnvironment() );
1446*b1cdbd2cSJim Jagielski     aNewContent.setPropertyValues( rPropertyNames, rPropertyValues );
1447*b1cdbd2cSJim Jagielski     aNewContent.executeCommand( rtl::OUString::createFromAscii( "insert" ),
1448*b1cdbd2cSJim Jagielski                                 makeAny(
1449*b1cdbd2cSJim Jagielski                                     InsertCommandArgument(
1450*b1cdbd2cSJim Jagielski                                         rData.is() ? rData : new EmptyInputStream,
1451*b1cdbd2cSJim Jagielski                                         sal_False /* ReplaceExisting */ ) ) );
1452*b1cdbd2cSJim Jagielski     aNewContent.m_xImpl->inserted();
1453*b1cdbd2cSJim Jagielski 
1454*b1cdbd2cSJim Jagielski     rNewContent = aNewContent;
1455*b1cdbd2cSJim Jagielski     return sal_True;
1456*b1cdbd2cSJim Jagielski }
1457*b1cdbd2cSJim Jagielski 
1458*b1cdbd2cSJim Jagielski //=========================================================================
insertNewContent(const rtl::OUString & rContentType,const Sequence<sal_Int32> & nPropertyHandles,const Sequence<Any> & rPropertyValues,const Reference<XInputStream> & rData,Content & rNewContent)1459*b1cdbd2cSJim Jagielski sal_Bool Content::insertNewContent( const rtl::OUString& rContentType,
1460*b1cdbd2cSJim Jagielski                                     const Sequence< sal_Int32 >&
1461*b1cdbd2cSJim Jagielski                                         nPropertyHandles,
1462*b1cdbd2cSJim Jagielski                                     const Sequence< Any >& rPropertyValues,
1463*b1cdbd2cSJim Jagielski                                     const Reference< XInputStream >& rData,
1464*b1cdbd2cSJim Jagielski                                     Content& rNewContent )
1465*b1cdbd2cSJim Jagielski     throw( CommandAbortedException, RuntimeException, Exception )
1466*b1cdbd2cSJim Jagielski {
1467*b1cdbd2cSJim Jagielski     if ( rContentType.getLength() == 0 )
1468*b1cdbd2cSJim Jagielski         return sal_False;
1469*b1cdbd2cSJim Jagielski 
1470*b1cdbd2cSJim Jagielski     // First, try it using "createNewContent" command -> the "new" way.
1471*b1cdbd2cSJim Jagielski     ContentInfo aInfo;
1472*b1cdbd2cSJim Jagielski     aInfo.Type = rContentType;
1473*b1cdbd2cSJim Jagielski     aInfo.Attributes = 0;
1474*b1cdbd2cSJim Jagielski 
1475*b1cdbd2cSJim Jagielski     Command aCommand;
1476*b1cdbd2cSJim Jagielski     aCommand.Name     = rtl::OUString::createFromAscii( "createNewContent" );
1477*b1cdbd2cSJim Jagielski     aCommand.Handle   = -1; // n/a
1478*b1cdbd2cSJim Jagielski     aCommand.Argument <<= aInfo;
1479*b1cdbd2cSJim Jagielski 
1480*b1cdbd2cSJim Jagielski     Reference< XContent > xNew;
1481*b1cdbd2cSJim Jagielski     try
1482*b1cdbd2cSJim Jagielski     {
1483*b1cdbd2cSJim Jagielski         m_xImpl->executeCommand( aCommand ) >>= xNew;
1484*b1cdbd2cSJim Jagielski     }
1485*b1cdbd2cSJim Jagielski     catch ( RuntimeException const & )
1486*b1cdbd2cSJim Jagielski     {
1487*b1cdbd2cSJim Jagielski         throw;
1488*b1cdbd2cSJim Jagielski     }
1489*b1cdbd2cSJim Jagielski     catch ( Exception const & )
1490*b1cdbd2cSJim Jagielski     {
1491*b1cdbd2cSJim Jagielski     }
1492*b1cdbd2cSJim Jagielski 
1493*b1cdbd2cSJim Jagielski     if ( !xNew.is() )
1494*b1cdbd2cSJim Jagielski     {
1495*b1cdbd2cSJim Jagielski         // Second, try it using XContentCreator interface -> the "old"
1496*b1cdbd2cSJim Jagielski         // way (not providing the chance to supply an XCommandEnvironment.
1497*b1cdbd2cSJim Jagielski         Reference< XContentCreator > xCreator( m_xImpl->getContent(), UNO_QUERY );
1498*b1cdbd2cSJim Jagielski 
1499*b1cdbd2cSJim Jagielski         if ( !xCreator.is() )
1500*b1cdbd2cSJim Jagielski             return sal_False;
1501*b1cdbd2cSJim Jagielski 
1502*b1cdbd2cSJim Jagielski         xNew = xCreator->createNewContent( aInfo );
1503*b1cdbd2cSJim Jagielski 
1504*b1cdbd2cSJim Jagielski         if ( !xNew.is() )
1505*b1cdbd2cSJim Jagielski             return sal_False;
1506*b1cdbd2cSJim Jagielski     }
1507*b1cdbd2cSJim Jagielski 
1508*b1cdbd2cSJim Jagielski     Content aNewContent( xNew, m_xImpl->getEnvironment() );
1509*b1cdbd2cSJim Jagielski     aNewContent.setPropertyValues( nPropertyHandles, rPropertyValues );
1510*b1cdbd2cSJim Jagielski     aNewContent.executeCommand( rtl::OUString::createFromAscii( "insert" ),
1511*b1cdbd2cSJim Jagielski                                 makeAny(
1512*b1cdbd2cSJim Jagielski                                     InsertCommandArgument(
1513*b1cdbd2cSJim Jagielski                                         rData.is() ? rData : new EmptyInputStream,
1514*b1cdbd2cSJim Jagielski                                         sal_False /* ReplaceExisting */ ) ) );
1515*b1cdbd2cSJim Jagielski     aNewContent.m_xImpl->inserted();
1516*b1cdbd2cSJim Jagielski 
1517*b1cdbd2cSJim Jagielski     rNewContent = aNewContent;
1518*b1cdbd2cSJim Jagielski     return sal_True;
1519*b1cdbd2cSJim Jagielski }
1520*b1cdbd2cSJim Jagielski 
1521*b1cdbd2cSJim Jagielski //=========================================================================
transferContent(const Content & rSourceContent,InsertOperation eOperation,const rtl::OUString & rTitle,const sal_Int32 nNameClashAction)1522*b1cdbd2cSJim Jagielski sal_Bool Content::transferContent( const Content& rSourceContent,
1523*b1cdbd2cSJim Jagielski                                    InsertOperation eOperation,
1524*b1cdbd2cSJim Jagielski                                    const rtl::OUString & rTitle,
1525*b1cdbd2cSJim Jagielski                                    const sal_Int32 nNameClashAction )
1526*b1cdbd2cSJim Jagielski     throw( CommandAbortedException, RuntimeException, Exception )
1527*b1cdbd2cSJim Jagielski {
1528*b1cdbd2cSJim Jagielski     ContentBroker* pBroker = ContentBroker::get();
1529*b1cdbd2cSJim Jagielski     if ( !pBroker )
1530*b1cdbd2cSJim Jagielski     {
1531*b1cdbd2cSJim Jagielski         OSL_ENSURE( sal_False,
1532*b1cdbd2cSJim Jagielski                     "Content::transferContent - No Content Broker!" );
1533*b1cdbd2cSJim Jagielski         return sal_False;
1534*b1cdbd2cSJim Jagielski     }
1535*b1cdbd2cSJim Jagielski 
1536*b1cdbd2cSJim Jagielski     Reference< XCommandProcessor > xCmdProc(
1537*b1cdbd2cSJim Jagielski                                     pBroker->getCommandProcessorInterface() );
1538*b1cdbd2cSJim Jagielski     if ( !xCmdProc.is() )
1539*b1cdbd2cSJim Jagielski     {
1540*b1cdbd2cSJim Jagielski         OSL_ENSURE( sal_False,
1541*b1cdbd2cSJim Jagielski                     "Content::transferContent - No XCommandProcessor!" );
1542*b1cdbd2cSJim Jagielski         return sal_False;
1543*b1cdbd2cSJim Jagielski     }
1544*b1cdbd2cSJim Jagielski 
1545*b1cdbd2cSJim Jagielski     // Execute command "globalTransfer" at UCB.
1546*b1cdbd2cSJim Jagielski 
1547*b1cdbd2cSJim Jagielski     TransferCommandOperation eTransOp = TransferCommandOperation();
1548*b1cdbd2cSJim Jagielski     switch ( eOperation )
1549*b1cdbd2cSJim Jagielski     {
1550*b1cdbd2cSJim Jagielski         case InsertOperation_COPY:
1551*b1cdbd2cSJim Jagielski             eTransOp = TransferCommandOperation_COPY;
1552*b1cdbd2cSJim Jagielski             break;
1553*b1cdbd2cSJim Jagielski 
1554*b1cdbd2cSJim Jagielski         case InsertOperation_MOVE:
1555*b1cdbd2cSJim Jagielski             eTransOp = TransferCommandOperation_MOVE;
1556*b1cdbd2cSJim Jagielski             break;
1557*b1cdbd2cSJim Jagielski 
1558*b1cdbd2cSJim Jagielski         case InsertOperation_LINK:
1559*b1cdbd2cSJim Jagielski             eTransOp = TransferCommandOperation_LINK;
1560*b1cdbd2cSJim Jagielski             break;
1561*b1cdbd2cSJim Jagielski 
1562*b1cdbd2cSJim Jagielski         default:
1563*b1cdbd2cSJim Jagielski             ucbhelper::cancelCommandExecution(
1564*b1cdbd2cSJim Jagielski                 makeAny( IllegalArgumentException(
1565*b1cdbd2cSJim Jagielski                             rtl::OUString::createFromAscii(
1566*b1cdbd2cSJim Jagielski                                 "Unknown transfer operation!" ),
1567*b1cdbd2cSJim Jagielski                             get(),
1568*b1cdbd2cSJim Jagielski                             -1 ) ),
1569*b1cdbd2cSJim Jagielski                          m_xImpl->getEnvironment() );
1570*b1cdbd2cSJim Jagielski             // Unreachable
1571*b1cdbd2cSJim Jagielski     }
1572*b1cdbd2cSJim Jagielski 
1573*b1cdbd2cSJim Jagielski     GlobalTransferCommandArgument aTransferArg(
1574*b1cdbd2cSJim Jagielski                                         eTransOp,
1575*b1cdbd2cSJim Jagielski                                         rSourceContent.getURL(), // SourceURL
1576*b1cdbd2cSJim Jagielski                                         getURL(),   // TargetFolderURL,
1577*b1cdbd2cSJim Jagielski                                         rTitle,
1578*b1cdbd2cSJim Jagielski                                         nNameClashAction );
1579*b1cdbd2cSJim Jagielski     Command aCommand;
1580*b1cdbd2cSJim Jagielski     aCommand.Name     = rtl::OUString::createFromAscii( "globalTransfer" );
1581*b1cdbd2cSJim Jagielski     aCommand.Handle   = -1; // n/a
1582*b1cdbd2cSJim Jagielski     aCommand.Argument <<= aTransferArg;
1583*b1cdbd2cSJim Jagielski 
1584*b1cdbd2cSJim Jagielski     xCmdProc->execute( aCommand, 0, m_xImpl->getEnvironment() );
1585*b1cdbd2cSJim Jagielski     return sal_True;
1586*b1cdbd2cSJim Jagielski }
1587*b1cdbd2cSJim Jagielski 
1588*b1cdbd2cSJim Jagielski //=========================================================================
isFolder()1589*b1cdbd2cSJim Jagielski sal_Bool Content::isFolder()
1590*b1cdbd2cSJim Jagielski     throw( CommandAbortedException, RuntimeException, Exception )
1591*b1cdbd2cSJim Jagielski {
1592*b1cdbd2cSJim Jagielski     sal_Bool bFolder = sal_False;
1593*b1cdbd2cSJim Jagielski     if ( getPropertyValue( rtl::OUString::createFromAscii( "IsFolder" ) )
1594*b1cdbd2cSJim Jagielski         >>= bFolder )
1595*b1cdbd2cSJim Jagielski         return bFolder;
1596*b1cdbd2cSJim Jagielski 
1597*b1cdbd2cSJim Jagielski      ucbhelper::cancelCommandExecution(
1598*b1cdbd2cSJim Jagielski          makeAny( UnknownPropertyException(
1599*b1cdbd2cSJim Jagielski                     rtl::OUString::createFromAscii(
1600*b1cdbd2cSJim Jagielski                         "Unable to retreive value of property 'IsFolder'!" ),
1601*b1cdbd2cSJim Jagielski                     get() ) ),
1602*b1cdbd2cSJim Jagielski          m_xImpl->getEnvironment() );
1603*b1cdbd2cSJim Jagielski 
1604*b1cdbd2cSJim Jagielski     // Unreachable - cancelCommandExecution always throws an exception.
1605*b1cdbd2cSJim Jagielski     // But some compilers complain...
1606*b1cdbd2cSJim Jagielski     return sal_False;
1607*b1cdbd2cSJim Jagielski }
1608*b1cdbd2cSJim Jagielski 
1609*b1cdbd2cSJim Jagielski //=========================================================================
isDocument()1610*b1cdbd2cSJim Jagielski sal_Bool Content::isDocument()
1611*b1cdbd2cSJim Jagielski     throw( CommandAbortedException, RuntimeException, Exception )
1612*b1cdbd2cSJim Jagielski {
1613*b1cdbd2cSJim Jagielski     sal_Bool bDoc = sal_False;
1614*b1cdbd2cSJim Jagielski     if ( getPropertyValue( rtl::OUString::createFromAscii( "IsDocument" ) )
1615*b1cdbd2cSJim Jagielski         >>= bDoc )
1616*b1cdbd2cSJim Jagielski         return bDoc;
1617*b1cdbd2cSJim Jagielski 
1618*b1cdbd2cSJim Jagielski      ucbhelper::cancelCommandExecution(
1619*b1cdbd2cSJim Jagielski          makeAny( UnknownPropertyException(
1620*b1cdbd2cSJim Jagielski                     rtl::OUString::createFromAscii(
1621*b1cdbd2cSJim Jagielski                         "Unable to retreive value of property 'IsDocument'!" ),
1622*b1cdbd2cSJim Jagielski                     get() ) ),
1623*b1cdbd2cSJim Jagielski          m_xImpl->getEnvironment() );
1624*b1cdbd2cSJim Jagielski 
1625*b1cdbd2cSJim Jagielski     // Unreachable - cancelCommandExecution always throws an exception,
1626*b1cdbd2cSJim Jagielski     // But some compilers complain...
1627*b1cdbd2cSJim Jagielski     return sal_False;
1628*b1cdbd2cSJim Jagielski }
1629*b1cdbd2cSJim Jagielski 
1630*b1cdbd2cSJim Jagielski //->i126305 ===============================================================
lock()1631*b1cdbd2cSJim Jagielski void Content::lock()
1632*b1cdbd2cSJim Jagielski     throw( CommandAbortedException, RuntimeException, Exception )
1633*b1cdbd2cSJim Jagielski {
1634*b1cdbd2cSJim Jagielski     Command aCommand;
1635*b1cdbd2cSJim Jagielski     aCommand.Name     = rtl::OUString::createFromAscii( "lock" );
1636*b1cdbd2cSJim Jagielski     aCommand.Handle   = -1; // n/a
1637*b1cdbd2cSJim Jagielski     //    aCommand.Argument <<= aArg;
1638*b1cdbd2cSJim Jagielski 
1639*b1cdbd2cSJim Jagielski     m_xImpl->executeCommand( aCommand );
1640*b1cdbd2cSJim Jagielski 
1641*b1cdbd2cSJim Jagielski     //    return xSink->getInputStream();
1642*b1cdbd2cSJim Jagielski }
1643*b1cdbd2cSJim Jagielski 
1644*b1cdbd2cSJim Jagielski //=========================================================================
unlock()1645*b1cdbd2cSJim Jagielski void Content::unlock()
1646*b1cdbd2cSJim Jagielski     throw( CommandAbortedException, RuntimeException, Exception )
1647*b1cdbd2cSJim Jagielski {
1648*b1cdbd2cSJim Jagielski 
1649*b1cdbd2cSJim Jagielski     //    OpenCommandArgument2 aArg;
1650*b1cdbd2cSJim Jagielski     //aArg.Mode       = OpenMode::DOCUMENT_SHARE_DENY_NONE;
1651*b1cdbd2cSJim Jagielski     //aArg.Priority   = 0; // unused
1652*b1cdbd2cSJim Jagielski     //aArg.Sink       = xSink;
1653*b1cdbd2cSJim Jagielski     //aArg.Properties = Sequence< Property >( 0 ); // unused
1654*b1cdbd2cSJim Jagielski 
1655*b1cdbd2cSJim Jagielski     Command aCommand;
1656*b1cdbd2cSJim Jagielski     aCommand.Name     = rtl::OUString::createFromAscii( "unlock" );
1657*b1cdbd2cSJim Jagielski     aCommand.Handle   = -1; // n/a
1658*b1cdbd2cSJim Jagielski     //    aCommand.Argument <<= aArg;
1659*b1cdbd2cSJim Jagielski 
1660*b1cdbd2cSJim Jagielski     m_xImpl->executeCommand( aCommand );
1661*b1cdbd2cSJim Jagielski 
1662*b1cdbd2cSJim Jagielski }
1663*b1cdbd2cSJim Jagielski //<-i126305
1664*b1cdbd2cSJim Jagielski 
1665*b1cdbd2cSJim Jagielski //=========================================================================
1666*b1cdbd2cSJim Jagielski //=========================================================================
1667*b1cdbd2cSJim Jagielski //
1668*b1cdbd2cSJim Jagielski // Content_Impl Implementation.
1669*b1cdbd2cSJim Jagielski //
1670*b1cdbd2cSJim Jagielski //=========================================================================
1671*b1cdbd2cSJim Jagielski //=========================================================================
1672*b1cdbd2cSJim Jagielski 
Content_Impl(const Reference<XMultiServiceFactory> & rSMgr,const Reference<XContent> & rContent,const Reference<XCommandEnvironment> & rEnv)1673*b1cdbd2cSJim Jagielski Content_Impl::Content_Impl( const Reference< XMultiServiceFactory >& rSMgr,
1674*b1cdbd2cSJim Jagielski                             const Reference< XContent >& rContent,
1675*b1cdbd2cSJim Jagielski                             const Reference< XCommandEnvironment >& rEnv )
1676*b1cdbd2cSJim Jagielski : m_xSMgr( rSMgr ),
1677*b1cdbd2cSJim Jagielski   m_xContent( rContent ),
1678*b1cdbd2cSJim Jagielski   m_xEnv( rEnv ),
1679*b1cdbd2cSJim Jagielski   m_nCommandId( 0 )
1680*b1cdbd2cSJim Jagielski {
1681*b1cdbd2cSJim Jagielski     if ( m_xContent.is() )
1682*b1cdbd2cSJim Jagielski     {
1683*b1cdbd2cSJim Jagielski         m_xContentEventListener = new ContentEventListener_Impl( *this );
1684*b1cdbd2cSJim Jagielski         m_xContent->addContentEventListener( m_xContentEventListener );
1685*b1cdbd2cSJim Jagielski 
1686*b1cdbd2cSJim Jagielski #if OSL_DEBUG_LEVEL > 1
1687*b1cdbd2cSJim Jagielski         // Only done on demand in product version for performance reasons,
1688*b1cdbd2cSJim Jagielski         // but a nice debug helper.
1689*b1cdbd2cSJim Jagielski         getURL();
1690*b1cdbd2cSJim Jagielski #endif
1691*b1cdbd2cSJim Jagielski     }
1692*b1cdbd2cSJim Jagielski }
1693*b1cdbd2cSJim Jagielski 
1694*b1cdbd2cSJim Jagielski //=========================================================================
reinit(const Reference<XContent> & xContent)1695*b1cdbd2cSJim Jagielski void Content_Impl::reinit( const Reference< XContent >& xContent )
1696*b1cdbd2cSJim Jagielski {
1697*b1cdbd2cSJim Jagielski     osl::MutexGuard aGuard( m_aMutex );
1698*b1cdbd2cSJim Jagielski 
1699*b1cdbd2cSJim Jagielski     m_xCommandProcessor = 0;
1700*b1cdbd2cSJim Jagielski     m_nCommandId = 0;
1701*b1cdbd2cSJim Jagielski 
1702*b1cdbd2cSJim Jagielski     // #92581# - Don't reset m_aURL!!!
1703*b1cdbd2cSJim Jagielski 
1704*b1cdbd2cSJim Jagielski     if ( m_xContent.is() )
1705*b1cdbd2cSJim Jagielski     {
1706*b1cdbd2cSJim Jagielski         try
1707*b1cdbd2cSJim Jagielski         {
1708*b1cdbd2cSJim Jagielski             m_xContent->removeContentEventListener( m_xContentEventListener );
1709*b1cdbd2cSJim Jagielski         }
1710*b1cdbd2cSJim Jagielski         catch ( RuntimeException const & )
1711*b1cdbd2cSJim Jagielski         {
1712*b1cdbd2cSJim Jagielski         }
1713*b1cdbd2cSJim Jagielski     }
1714*b1cdbd2cSJim Jagielski 
1715*b1cdbd2cSJim Jagielski     if ( xContent.is() )
1716*b1cdbd2cSJim Jagielski     {
1717*b1cdbd2cSJim Jagielski         m_xContent = xContent;
1718*b1cdbd2cSJim Jagielski         m_xContent->addContentEventListener( m_xContentEventListener );
1719*b1cdbd2cSJim Jagielski 
1720*b1cdbd2cSJim Jagielski #if OSL_DEBUG_LEVEL > 1
1721*b1cdbd2cSJim Jagielski         // Only done on demand in product version for performance reasons,
1722*b1cdbd2cSJim Jagielski         // but a nice debug helper.
1723*b1cdbd2cSJim Jagielski         getURL();
1724*b1cdbd2cSJim Jagielski #endif
1725*b1cdbd2cSJim Jagielski     }
1726*b1cdbd2cSJim Jagielski     else
1727*b1cdbd2cSJim Jagielski     {
1728*b1cdbd2cSJim Jagielski         // We need m_xContent's URL in order to be able to create the
1729*b1cdbd2cSJim Jagielski         // content object again if demanded ( --> Content_Impl::getContent() )
1730*b1cdbd2cSJim Jagielski         getURL();
1731*b1cdbd2cSJim Jagielski 
1732*b1cdbd2cSJim Jagielski         m_xContent = 0;
1733*b1cdbd2cSJim Jagielski     }
1734*b1cdbd2cSJim Jagielski }
1735*b1cdbd2cSJim Jagielski 
1736*b1cdbd2cSJim Jagielski //=========================================================================
1737*b1cdbd2cSJim Jagielski // virtual
~Content_Impl()1738*b1cdbd2cSJim Jagielski Content_Impl::~Content_Impl()
1739*b1cdbd2cSJim Jagielski {
1740*b1cdbd2cSJim Jagielski     if ( m_xContent.is() )
1741*b1cdbd2cSJim Jagielski     {
1742*b1cdbd2cSJim Jagielski         try
1743*b1cdbd2cSJim Jagielski         {
1744*b1cdbd2cSJim Jagielski             m_xContent->removeContentEventListener( m_xContentEventListener );
1745*b1cdbd2cSJim Jagielski         }
1746*b1cdbd2cSJim Jagielski         catch ( RuntimeException const & )
1747*b1cdbd2cSJim Jagielski         {
1748*b1cdbd2cSJim Jagielski         }
1749*b1cdbd2cSJim Jagielski     }
1750*b1cdbd2cSJim Jagielski }
1751*b1cdbd2cSJim Jagielski 
1752*b1cdbd2cSJim Jagielski //=========================================================================
disposing(const EventObject & Source)1753*b1cdbd2cSJim Jagielski void Content_Impl::disposing( const EventObject& Source )
1754*b1cdbd2cSJim Jagielski {
1755*b1cdbd2cSJim Jagielski     Reference<XContent> xContent;
1756*b1cdbd2cSJim Jagielski 
1757*b1cdbd2cSJim Jagielski     {
1758*b1cdbd2cSJim Jagielski         osl::MutexGuard aGuard( m_aMutex );
1759*b1cdbd2cSJim Jagielski         if(Source.Source != m_xContent)
1760*b1cdbd2cSJim Jagielski             return;
1761*b1cdbd2cSJim Jagielski 
1762*b1cdbd2cSJim Jagielski         xContent = m_xContent;
1763*b1cdbd2cSJim Jagielski 
1764*b1cdbd2cSJim Jagielski         m_nCommandId = 0;
1765*b1cdbd2cSJim Jagielski         m_aURL = rtl::OUString();
1766*b1cdbd2cSJim Jagielski         m_xCommandProcessor = 0;
1767*b1cdbd2cSJim Jagielski         m_xContent = 0;
1768*b1cdbd2cSJim Jagielski     }
1769*b1cdbd2cSJim Jagielski 
1770*b1cdbd2cSJim Jagielski     if ( xContent.is() )
1771*b1cdbd2cSJim Jagielski     {
1772*b1cdbd2cSJim Jagielski         try
1773*b1cdbd2cSJim Jagielski         {
1774*b1cdbd2cSJim Jagielski             xContent->removeContentEventListener( m_xContentEventListener );
1775*b1cdbd2cSJim Jagielski         }
1776*b1cdbd2cSJim Jagielski         catch ( RuntimeException const & )
1777*b1cdbd2cSJim Jagielski         {
1778*b1cdbd2cSJim Jagielski         }
1779*b1cdbd2cSJim Jagielski     }
1780*b1cdbd2cSJim Jagielski }
1781*b1cdbd2cSJim Jagielski 
1782*b1cdbd2cSJim Jagielski //=========================================================================
getURL() const1783*b1cdbd2cSJim Jagielski const rtl::OUString& Content_Impl::getURL() const
1784*b1cdbd2cSJim Jagielski {
1785*b1cdbd2cSJim Jagielski     if ( !m_aURL.getLength() && m_xContent.is() )
1786*b1cdbd2cSJim Jagielski     {
1787*b1cdbd2cSJim Jagielski         osl::MutexGuard aGuard( m_aMutex );
1788*b1cdbd2cSJim Jagielski 
1789*b1cdbd2cSJim Jagielski         if ( !m_aURL.getLength() && m_xContent.is() )
1790*b1cdbd2cSJim Jagielski         {
1791*b1cdbd2cSJim Jagielski             Reference< XContentIdentifier > xId = m_xContent->getIdentifier();
1792*b1cdbd2cSJim Jagielski             if ( xId.is() )
1793*b1cdbd2cSJim Jagielski                 m_aURL = xId->getContentIdentifier();
1794*b1cdbd2cSJim Jagielski         }
1795*b1cdbd2cSJim Jagielski     }
1796*b1cdbd2cSJim Jagielski 
1797*b1cdbd2cSJim Jagielski     return m_aURL;
1798*b1cdbd2cSJim Jagielski }
1799*b1cdbd2cSJim Jagielski 
1800*b1cdbd2cSJim Jagielski //=========================================================================
getContent()1801*b1cdbd2cSJim Jagielski Reference< XContent > Content_Impl::getContent()
1802*b1cdbd2cSJim Jagielski {
1803*b1cdbd2cSJim Jagielski     if ( !m_xContent.is() && m_aURL.getLength() )
1804*b1cdbd2cSJim Jagielski     {
1805*b1cdbd2cSJim Jagielski         osl::MutexGuard aGuard( m_aMutex );
1806*b1cdbd2cSJim Jagielski 
1807*b1cdbd2cSJim Jagielski         if ( !m_xContent.is() && m_aURL.getLength() )
1808*b1cdbd2cSJim Jagielski         {
1809*b1cdbd2cSJim Jagielski             ContentBroker* pBroker = ContentBroker::get();
1810*b1cdbd2cSJim Jagielski 
1811*b1cdbd2cSJim Jagielski             OSL_ENSURE( pBroker, "No Content Broker!" );
1812*b1cdbd2cSJim Jagielski 
1813*b1cdbd2cSJim Jagielski             if ( pBroker )
1814*b1cdbd2cSJim Jagielski             {
1815*b1cdbd2cSJim Jagielski                 OSL_ENSURE( pBroker->getContentProviderManagerInterface()
1816*b1cdbd2cSJim Jagielski                                         ->queryContentProviders().getLength(),
1817*b1cdbd2cSJim Jagielski                             "Content Broker not configured (no providers)!" );
1818*b1cdbd2cSJim Jagielski 
1819*b1cdbd2cSJim Jagielski                 Reference< XContentIdentifierFactory > xIdFac
1820*b1cdbd2cSJim Jagielski                             = pBroker->getContentIdentifierFactoryInterface();
1821*b1cdbd2cSJim Jagielski 
1822*b1cdbd2cSJim Jagielski                 OSL_ENSURE( xIdFac.is(), "No Content Identifier factory!" );
1823*b1cdbd2cSJim Jagielski 
1824*b1cdbd2cSJim Jagielski                 if ( xIdFac.is() )
1825*b1cdbd2cSJim Jagielski                 {
1826*b1cdbd2cSJim Jagielski                     Reference< XContentIdentifier > xId
1827*b1cdbd2cSJim Jagielski                                 = xIdFac->createContentIdentifier( m_aURL );
1828*b1cdbd2cSJim Jagielski 
1829*b1cdbd2cSJim Jagielski                     OSL_ENSURE( xId.is(), "No Content Identifier!" );
1830*b1cdbd2cSJim Jagielski 
1831*b1cdbd2cSJim Jagielski                     if ( xId.is() )
1832*b1cdbd2cSJim Jagielski                     {
1833*b1cdbd2cSJim Jagielski                         Reference< XContentProvider > xProvider
1834*b1cdbd2cSJim Jagielski                             = pBroker->getContentProviderInterface();
1835*b1cdbd2cSJim Jagielski 
1836*b1cdbd2cSJim Jagielski                         OSL_ENSURE( xProvider.is(), "No Content Provider!" );
1837*b1cdbd2cSJim Jagielski 
1838*b1cdbd2cSJim Jagielski                         if ( xProvider.is() )
1839*b1cdbd2cSJim Jagielski                         {
1840*b1cdbd2cSJim Jagielski                             try
1841*b1cdbd2cSJim Jagielski                             {
1842*b1cdbd2cSJim Jagielski                                 m_xContent = xProvider->queryContent( xId );
1843*b1cdbd2cSJim Jagielski                             }
1844*b1cdbd2cSJim Jagielski                             catch ( IllegalIdentifierException const & )
1845*b1cdbd2cSJim Jagielski                             {
1846*b1cdbd2cSJim Jagielski                             }
1847*b1cdbd2cSJim Jagielski 
1848*b1cdbd2cSJim Jagielski                             if ( m_xContent.is() )
1849*b1cdbd2cSJim Jagielski                                 m_xContent->addContentEventListener(
1850*b1cdbd2cSJim Jagielski                                                 m_xContentEventListener );
1851*b1cdbd2cSJim Jagielski                         }
1852*b1cdbd2cSJim Jagielski                     }
1853*b1cdbd2cSJim Jagielski                 }
1854*b1cdbd2cSJim Jagielski             }
1855*b1cdbd2cSJim Jagielski         }
1856*b1cdbd2cSJim Jagielski     }
1857*b1cdbd2cSJim Jagielski 
1858*b1cdbd2cSJim Jagielski     return m_xContent;
1859*b1cdbd2cSJim Jagielski }
1860*b1cdbd2cSJim Jagielski 
1861*b1cdbd2cSJim Jagielski //=========================================================================
getCommandProcessor()1862*b1cdbd2cSJim Jagielski Reference< XCommandProcessor > Content_Impl::getCommandProcessor()
1863*b1cdbd2cSJim Jagielski {
1864*b1cdbd2cSJim Jagielski     if ( !m_xCommandProcessor.is() )
1865*b1cdbd2cSJim Jagielski     {
1866*b1cdbd2cSJim Jagielski         osl::MutexGuard aGuard( m_aMutex );
1867*b1cdbd2cSJim Jagielski 
1868*b1cdbd2cSJim Jagielski         if ( !m_xCommandProcessor.is() )
1869*b1cdbd2cSJim Jagielski             m_xCommandProcessor
1870*b1cdbd2cSJim Jagielski                 = Reference< XCommandProcessor >( getContent(), UNO_QUERY );
1871*b1cdbd2cSJim Jagielski     }
1872*b1cdbd2cSJim Jagielski 
1873*b1cdbd2cSJim Jagielski     return m_xCommandProcessor;
1874*b1cdbd2cSJim Jagielski }
1875*b1cdbd2cSJim Jagielski 
1876*b1cdbd2cSJim Jagielski //=========================================================================
getCommandId()1877*b1cdbd2cSJim Jagielski sal_Int32 Content_Impl::getCommandId()
1878*b1cdbd2cSJim Jagielski {
1879*b1cdbd2cSJim Jagielski     if ( m_nCommandId == 0 )
1880*b1cdbd2cSJim Jagielski     {
1881*b1cdbd2cSJim Jagielski         osl::MutexGuard aGuard( m_aMutex );
1882*b1cdbd2cSJim Jagielski 
1883*b1cdbd2cSJim Jagielski         if ( m_nCommandId == 0 )
1884*b1cdbd2cSJim Jagielski         {
1885*b1cdbd2cSJim Jagielski             Reference< XCommandProcessor > xProc = getCommandProcessor();
1886*b1cdbd2cSJim Jagielski             if ( xProc.is() )
1887*b1cdbd2cSJim Jagielski                 m_nCommandId = xProc->createCommandIdentifier();
1888*b1cdbd2cSJim Jagielski         }
1889*b1cdbd2cSJim Jagielski     }
1890*b1cdbd2cSJim Jagielski 
1891*b1cdbd2cSJim Jagielski     return m_nCommandId;
1892*b1cdbd2cSJim Jagielski }
1893*b1cdbd2cSJim Jagielski 
1894*b1cdbd2cSJim Jagielski //=========================================================================
executeCommand(const Command & rCommand)1895*b1cdbd2cSJim Jagielski Any Content_Impl::executeCommand( const Command& rCommand )
1896*b1cdbd2cSJim Jagielski {
1897*b1cdbd2cSJim Jagielski     Reference< XCommandProcessor > xProc = getCommandProcessor();
1898*b1cdbd2cSJim Jagielski     if ( !xProc.is() )
1899*b1cdbd2cSJim Jagielski         return Any();
1900*b1cdbd2cSJim Jagielski 
1901*b1cdbd2cSJim Jagielski     // Execute command
1902*b1cdbd2cSJim Jagielski     return xProc->execute( rCommand, getCommandId(), m_xEnv );
1903*b1cdbd2cSJim Jagielski }
1904*b1cdbd2cSJim Jagielski 
1905*b1cdbd2cSJim Jagielski //=========================================================================
abortCommand()1906*b1cdbd2cSJim Jagielski void Content_Impl::abortCommand()
1907*b1cdbd2cSJim Jagielski {
1908*b1cdbd2cSJim Jagielski     sal_Int32 nCommandId;
1909*b1cdbd2cSJim Jagielski     Reference< XCommandProcessor > xCommandProcessor;
1910*b1cdbd2cSJim Jagielski     {
1911*b1cdbd2cSJim Jagielski         osl::MutexGuard aGuard( m_aMutex );
1912*b1cdbd2cSJim Jagielski         nCommandId = m_nCommandId;
1913*b1cdbd2cSJim Jagielski         xCommandProcessor = m_xCommandProcessor;
1914*b1cdbd2cSJim Jagielski     }
1915*b1cdbd2cSJim Jagielski 
1916*b1cdbd2cSJim Jagielski     if ( ( nCommandId != 0 ) && xCommandProcessor.is() )
1917*b1cdbd2cSJim Jagielski         xCommandProcessor->abort( nCommandId );
1918*b1cdbd2cSJim Jagielski }
1919*b1cdbd2cSJim Jagielski 
1920*b1cdbd2cSJim Jagielski //=========================================================================
1921*b1cdbd2cSJim Jagielski inline const Reference< XCommandEnvironment >&
getEnvironment() const1922*b1cdbd2cSJim Jagielski                                         Content_Impl::getEnvironment() const
1923*b1cdbd2cSJim Jagielski {
1924*b1cdbd2cSJim Jagielski     return m_xEnv;
1925*b1cdbd2cSJim Jagielski }
1926*b1cdbd2cSJim Jagielski 
1927*b1cdbd2cSJim Jagielski //=========================================================================
setEnvironment(const Reference<XCommandEnvironment> & xNewEnv)1928*b1cdbd2cSJim Jagielski inline void Content_Impl::setEnvironment(
1929*b1cdbd2cSJim Jagielski                         const Reference< XCommandEnvironment >& xNewEnv )
1930*b1cdbd2cSJim Jagielski {
1931*b1cdbd2cSJim Jagielski     osl::MutexGuard aGuard( m_aMutex );
1932*b1cdbd2cSJim Jagielski     m_xEnv = xNewEnv;
1933*b1cdbd2cSJim Jagielski }
1934*b1cdbd2cSJim Jagielski 
1935*b1cdbd2cSJim Jagielski //=========================================================================
inserted()1936*b1cdbd2cSJim Jagielski void Content_Impl::inserted()
1937*b1cdbd2cSJim Jagielski {
1938*b1cdbd2cSJim Jagielski     // URL might have changed during 'insert' => recalculate in next getURL()
1939*b1cdbd2cSJim Jagielski     osl::MutexGuard aGuard( m_aMutex );
1940*b1cdbd2cSJim Jagielski     m_aURL = ::rtl::OUString();
1941*b1cdbd2cSJim Jagielski }
1942*b1cdbd2cSJim Jagielski 
1943*b1cdbd2cSJim Jagielski //=========================================================================
1944*b1cdbd2cSJim Jagielski //=========================================================================
1945*b1cdbd2cSJim Jagielski //
1946*b1cdbd2cSJim Jagielski // ContentEventListener_Impl Implementation.
1947*b1cdbd2cSJim Jagielski //
1948*b1cdbd2cSJim Jagielski //=========================================================================
1949*b1cdbd2cSJim Jagielski //=========================================================================
1950*b1cdbd2cSJim Jagielski 
1951*b1cdbd2cSJim Jagielski //=========================================================================
1952*b1cdbd2cSJim Jagielski //
1953*b1cdbd2cSJim Jagielski // XInterface methods.
1954*b1cdbd2cSJim Jagielski //
1955*b1cdbd2cSJim Jagielski //=========================================================================
1956*b1cdbd2cSJim Jagielski 
1957*b1cdbd2cSJim Jagielski XINTERFACE_IMPL_2( ContentEventListener_Impl,
1958*b1cdbd2cSJim Jagielski                    XContentEventListener,
1959*b1cdbd2cSJim Jagielski                    XEventListener ); /* base of XContentEventListener */
1960*b1cdbd2cSJim Jagielski 
1961*b1cdbd2cSJim Jagielski //=========================================================================
1962*b1cdbd2cSJim Jagielski //
1963*b1cdbd2cSJim Jagielski // XContentEventListener methods.
1964*b1cdbd2cSJim Jagielski //
1965*b1cdbd2cSJim Jagielski //=========================================================================
1966*b1cdbd2cSJim Jagielski 
1967*b1cdbd2cSJim Jagielski // virtual
contentEvent(const ContentEvent & evt)1968*b1cdbd2cSJim Jagielski void SAL_CALL ContentEventListener_Impl::contentEvent( const ContentEvent& evt )
1969*b1cdbd2cSJim Jagielski     throw( RuntimeException )
1970*b1cdbd2cSJim Jagielski {
1971*b1cdbd2cSJim Jagielski     if ( evt.Source == m_rContent.m_xContent )
1972*b1cdbd2cSJim Jagielski     {
1973*b1cdbd2cSJim Jagielski         switch ( evt.Action )
1974*b1cdbd2cSJim Jagielski         {
1975*b1cdbd2cSJim Jagielski             case ContentAction::DELETED:
1976*b1cdbd2cSJim Jagielski                 m_rContent.reinit( Reference< XContent >() );
1977*b1cdbd2cSJim Jagielski                 break;
1978*b1cdbd2cSJim Jagielski 
1979*b1cdbd2cSJim Jagielski             case ContentAction::EXCHANGED:
1980*b1cdbd2cSJim Jagielski                 m_rContent.reinit( evt.Content );
1981*b1cdbd2cSJim Jagielski                 break;
1982*b1cdbd2cSJim Jagielski 
1983*b1cdbd2cSJim Jagielski             default:
1984*b1cdbd2cSJim Jagielski                 break;
1985*b1cdbd2cSJim Jagielski         }
1986*b1cdbd2cSJim Jagielski     }
1987*b1cdbd2cSJim Jagielski }
1988*b1cdbd2cSJim Jagielski 
1989*b1cdbd2cSJim Jagielski //=========================================================================
1990*b1cdbd2cSJim Jagielski //
1991*b1cdbd2cSJim Jagielski // XEventListenr methods.
1992*b1cdbd2cSJim Jagielski //
1993*b1cdbd2cSJim Jagielski //=========================================================================
1994*b1cdbd2cSJim Jagielski 
1995*b1cdbd2cSJim Jagielski // virtual
disposing(const EventObject & Source)1996*b1cdbd2cSJim Jagielski void SAL_CALL ContentEventListener_Impl::disposing( const EventObject& Source )
1997*b1cdbd2cSJim Jagielski     throw( RuntimeException )
1998*b1cdbd2cSJim Jagielski {
1999*b1cdbd2cSJim Jagielski     m_rContent.disposing(Source);
2000*b1cdbd2cSJim Jagielski }
2001*b1cdbd2cSJim Jagielski 
2002*b1cdbd2cSJim Jagielski } /* namespace ucbhelper */
2003*b1cdbd2cSJim Jagielski 
2004