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_xmlhelp.hxx"
26*b1cdbd2cSJim Jagielski
27*b1cdbd2cSJim Jagielski /**************************************************************************
28*b1cdbd2cSJim Jagielski TODO
29*b1cdbd2cSJim Jagielski **************************************************************************
30*b1cdbd2cSJim Jagielski
31*b1cdbd2cSJim Jagielski *************************************************************************/
32*b1cdbd2cSJim Jagielski #include <com/sun/star/beans/PropertyAttribute.hpp>
33*b1cdbd2cSJim Jagielski #include <com/sun/star/beans/XPropertyAccess.hpp>
34*b1cdbd2cSJim Jagielski #include <com/sun/star/sdbc/XRow.hpp>
35*b1cdbd2cSJim Jagielski #include <com/sun/star/ucb/OpenCommandArgument2.hpp>
36*b1cdbd2cSJim Jagielski #include <com/sun/star/ucb/OpenMode.hpp>
37*b1cdbd2cSJim Jagielski #include <com/sun/star/ucb/XCommandInfo.hpp>
38*b1cdbd2cSJim Jagielski #include <com/sun/star/io/XActiveDataSink.hpp>
39*b1cdbd2cSJim Jagielski #include <com/sun/star/io/XOutputStream.hpp>
40*b1cdbd2cSJim Jagielski #include <com/sun/star/lang/IllegalAccessException.hpp>
41*b1cdbd2cSJim Jagielski #include <com/sun/star/ucb/UnsupportedDataSinkException.hpp>
42*b1cdbd2cSJim Jagielski #include <com/sun/star/io/XActiveDataStreamer.hpp>
43*b1cdbd2cSJim Jagielski #include <com/sun/star/ucb/XPersistentPropertySet.hpp>
44*b1cdbd2cSJim Jagielski #ifndef _VOS_DIAGNOSE_HXX_
45*b1cdbd2cSJim Jagielski #include <vos/diagnose.hxx>
46*b1cdbd2cSJim Jagielski #endif
47*b1cdbd2cSJim Jagielski #include <ucbhelper/contentidentifier.hxx>
48*b1cdbd2cSJim Jagielski #include <ucbhelper/propertyvalueset.hxx>
49*b1cdbd2cSJim Jagielski #ifndef _UCBHELPER_CANCELCOMMANDEXECUTION_HXX
50*b1cdbd2cSJim Jagielski #include <ucbhelper/cancelcommandexecution.hxx>
51*b1cdbd2cSJim Jagielski #endif
52*b1cdbd2cSJim Jagielski #include "content.hxx"
53*b1cdbd2cSJim Jagielski #include "provider.hxx"
54*b1cdbd2cSJim Jagielski #include "resultset.hxx"
55*b1cdbd2cSJim Jagielski #include "databases.hxx"
56*b1cdbd2cSJim Jagielski #include "resultsetfactory.hxx"
57*b1cdbd2cSJim Jagielski #include "resultsetbase.hxx"
58*b1cdbd2cSJim Jagielski #include "resultsetforroot.hxx"
59*b1cdbd2cSJim Jagielski #include "resultsetforquery.hxx"
60*b1cdbd2cSJim Jagielski
61*b1cdbd2cSJim Jagielski using namespace com::sun::star;
62*b1cdbd2cSJim Jagielski using namespace chelp;
63*b1cdbd2cSJim Jagielski
64*b1cdbd2cSJim Jagielski //=========================================================================
65*b1cdbd2cSJim Jagielski //=========================================================================
66*b1cdbd2cSJim Jagielski //
67*b1cdbd2cSJim Jagielski // Content Implementation.
68*b1cdbd2cSJim Jagielski //
69*b1cdbd2cSJim Jagielski //=========================================================================
70*b1cdbd2cSJim Jagielski //=========================================================================
71*b1cdbd2cSJim Jagielski
Content(const uno::Reference<lang::XMultiServiceFactory> & rxSMgr,::ucbhelper::ContentProviderImplHelper * pProvider,const uno::Reference<ucb::XContentIdentifier> & Identifier,Databases * pDatabases)72*b1cdbd2cSJim Jagielski Content::Content( const uno::Reference< lang::XMultiServiceFactory >& rxSMgr,
73*b1cdbd2cSJim Jagielski ::ucbhelper::ContentProviderImplHelper* pProvider,
74*b1cdbd2cSJim Jagielski const uno::Reference< ucb::XContentIdentifier >&
75*b1cdbd2cSJim Jagielski Identifier,
76*b1cdbd2cSJim Jagielski Databases* pDatabases )
77*b1cdbd2cSJim Jagielski : ContentImplHelper( rxSMgr, pProvider, Identifier ),
78*b1cdbd2cSJim Jagielski m_aURLParameter( Identifier->getContentIdentifier(),pDatabases ),
79*b1cdbd2cSJim Jagielski m_pDatabases( pDatabases ) // not owner
80*b1cdbd2cSJim Jagielski {
81*b1cdbd2cSJim Jagielski }
82*b1cdbd2cSJim Jagielski
83*b1cdbd2cSJim Jagielski //=========================================================================
84*b1cdbd2cSJim Jagielski // virtual
~Content()85*b1cdbd2cSJim Jagielski Content::~Content()
86*b1cdbd2cSJim Jagielski {
87*b1cdbd2cSJim Jagielski }
88*b1cdbd2cSJim Jagielski
89*b1cdbd2cSJim Jagielski //=========================================================================
90*b1cdbd2cSJim Jagielski //
91*b1cdbd2cSJim Jagielski // XInterface methods.
92*b1cdbd2cSJim Jagielski //
93*b1cdbd2cSJim Jagielski //=========================================================================
94*b1cdbd2cSJim Jagielski
95*b1cdbd2cSJim Jagielski // virtual
acquire()96*b1cdbd2cSJim Jagielski void SAL_CALL Content::acquire()
97*b1cdbd2cSJim Jagielski throw( )
98*b1cdbd2cSJim Jagielski {
99*b1cdbd2cSJim Jagielski ContentImplHelper::acquire();
100*b1cdbd2cSJim Jagielski }
101*b1cdbd2cSJim Jagielski
102*b1cdbd2cSJim Jagielski //=========================================================================
103*b1cdbd2cSJim Jagielski // virtual
release()104*b1cdbd2cSJim Jagielski void SAL_CALL Content::release()
105*b1cdbd2cSJim Jagielski throw( )
106*b1cdbd2cSJim Jagielski {
107*b1cdbd2cSJim Jagielski ContentImplHelper::release();
108*b1cdbd2cSJim Jagielski }
109*b1cdbd2cSJim Jagielski
110*b1cdbd2cSJim Jagielski //=========================================================================
111*b1cdbd2cSJim Jagielski // virtual
queryInterface(const uno::Type & rType)112*b1cdbd2cSJim Jagielski uno::Any SAL_CALL Content::queryInterface( const uno::Type & rType )
113*b1cdbd2cSJim Jagielski throw ( uno::RuntimeException )
114*b1cdbd2cSJim Jagielski {
115*b1cdbd2cSJim Jagielski uno::Any aRet;
116*b1cdbd2cSJim Jagielski return aRet.hasValue() ? aRet : ContentImplHelper::queryInterface( rType );
117*b1cdbd2cSJim Jagielski }
118*b1cdbd2cSJim Jagielski
119*b1cdbd2cSJim Jagielski //=========================================================================
120*b1cdbd2cSJim Jagielski //
121*b1cdbd2cSJim Jagielski // XTypeProvider methods.
122*b1cdbd2cSJim Jagielski //
123*b1cdbd2cSJim Jagielski //=========================================================================
124*b1cdbd2cSJim Jagielski
125*b1cdbd2cSJim Jagielski XTYPEPROVIDER_COMMON_IMPL( Content );
126*b1cdbd2cSJim Jagielski
127*b1cdbd2cSJim Jagielski //=========================================================================
128*b1cdbd2cSJim Jagielski // virtual
getTypes()129*b1cdbd2cSJim Jagielski uno::Sequence< uno::Type > SAL_CALL Content::getTypes()
130*b1cdbd2cSJim Jagielski throw( uno::RuntimeException )
131*b1cdbd2cSJim Jagielski {
132*b1cdbd2cSJim Jagielski static cppu::OTypeCollection* pCollection = NULL;
133*b1cdbd2cSJim Jagielski
134*b1cdbd2cSJim Jagielski if ( !pCollection )
135*b1cdbd2cSJim Jagielski {
136*b1cdbd2cSJim Jagielski osl::MutexGuard aGuard( osl::Mutex::getGlobalMutex() );
137*b1cdbd2cSJim Jagielski if ( !pCollection )
138*b1cdbd2cSJim Jagielski {
139*b1cdbd2cSJim Jagielski static cppu::OTypeCollection aCollection(
140*b1cdbd2cSJim Jagielski CPPU_TYPE_REF( lang::XTypeProvider ),
141*b1cdbd2cSJim Jagielski CPPU_TYPE_REF( lang::XServiceInfo ),
142*b1cdbd2cSJim Jagielski CPPU_TYPE_REF( lang::XComponent ),
143*b1cdbd2cSJim Jagielski CPPU_TYPE_REF( ucb::XContent ),
144*b1cdbd2cSJim Jagielski CPPU_TYPE_REF( ucb::XCommandProcessor ),
145*b1cdbd2cSJim Jagielski CPPU_TYPE_REF( beans::XPropertiesChangeNotifier ),
146*b1cdbd2cSJim Jagielski CPPU_TYPE_REF( ucb::XCommandInfoChangeNotifier ),
147*b1cdbd2cSJim Jagielski CPPU_TYPE_REF( beans::XPropertyContainer ),
148*b1cdbd2cSJim Jagielski CPPU_TYPE_REF( beans::XPropertySetInfoChangeNotifier ),
149*b1cdbd2cSJim Jagielski CPPU_TYPE_REF( container::XChild ) );
150*b1cdbd2cSJim Jagielski pCollection = &aCollection;
151*b1cdbd2cSJim Jagielski }
152*b1cdbd2cSJim Jagielski }
153*b1cdbd2cSJim Jagielski
154*b1cdbd2cSJim Jagielski return (*pCollection).getTypes();
155*b1cdbd2cSJim Jagielski }
156*b1cdbd2cSJim Jagielski
157*b1cdbd2cSJim Jagielski //=========================================================================
158*b1cdbd2cSJim Jagielski //
159*b1cdbd2cSJim Jagielski // XServiceInfo methods.
160*b1cdbd2cSJim Jagielski //
161*b1cdbd2cSJim Jagielski //=========================================================================
162*b1cdbd2cSJim Jagielski
163*b1cdbd2cSJim Jagielski // virtual
getImplementationName()164*b1cdbd2cSJim Jagielski rtl::OUString SAL_CALL Content::getImplementationName()
165*b1cdbd2cSJim Jagielski throw( uno::RuntimeException )
166*b1cdbd2cSJim Jagielski {
167*b1cdbd2cSJim Jagielski return rtl::OUString::createFromAscii( "CHelpContent" );
168*b1cdbd2cSJim Jagielski }
169*b1cdbd2cSJim Jagielski
170*b1cdbd2cSJim Jagielski //=========================================================================
171*b1cdbd2cSJim Jagielski // virtual
getSupportedServiceNames()172*b1cdbd2cSJim Jagielski uno::Sequence< rtl::OUString > SAL_CALL Content::getSupportedServiceNames()
173*b1cdbd2cSJim Jagielski throw( uno::RuntimeException )
174*b1cdbd2cSJim Jagielski {
175*b1cdbd2cSJim Jagielski uno::Sequence< rtl::OUString > aSNS( 1 );
176*b1cdbd2cSJim Jagielski aSNS.getArray()[ 0 ]
177*b1cdbd2cSJim Jagielski = rtl::OUString::createFromAscii( MYUCP_CONTENT_SERVICE_NAME );
178*b1cdbd2cSJim Jagielski return aSNS;
179*b1cdbd2cSJim Jagielski }
180*b1cdbd2cSJim Jagielski
181*b1cdbd2cSJim Jagielski //=========================================================================
182*b1cdbd2cSJim Jagielski //
183*b1cdbd2cSJim Jagielski // XContent methods.
184*b1cdbd2cSJim Jagielski //
185*b1cdbd2cSJim Jagielski //=========================================================================
186*b1cdbd2cSJim Jagielski
187*b1cdbd2cSJim Jagielski // virtual
getContentType()188*b1cdbd2cSJim Jagielski rtl::OUString SAL_CALL Content::getContentType()
189*b1cdbd2cSJim Jagielski throw( uno::RuntimeException )
190*b1cdbd2cSJim Jagielski {
191*b1cdbd2cSJim Jagielski return rtl::OUString::createFromAscii( MYUCP_CONTENT_TYPE );
192*b1cdbd2cSJim Jagielski }
193*b1cdbd2cSJim Jagielski
194*b1cdbd2cSJim Jagielski //=========================================================================
195*b1cdbd2cSJim Jagielski //
196*b1cdbd2cSJim Jagielski // XCommandProcessor methods.
197*b1cdbd2cSJim Jagielski //
198*b1cdbd2cSJim Jagielski //=========================================================================
199*b1cdbd2cSJim Jagielski
200*b1cdbd2cSJim Jagielski //virtual
abort(sal_Int32)201*b1cdbd2cSJim Jagielski void SAL_CALL Content::abort( sal_Int32 /*CommandId*/ )
202*b1cdbd2cSJim Jagielski throw( uno::RuntimeException )
203*b1cdbd2cSJim Jagielski {
204*b1cdbd2cSJim Jagielski }
205*b1cdbd2cSJim Jagielski
206*b1cdbd2cSJim Jagielski
207*b1cdbd2cSJim Jagielski
208*b1cdbd2cSJim Jagielski class ResultSetForRootFactory
209*b1cdbd2cSJim Jagielski : public ResultSetFactory
210*b1cdbd2cSJim Jagielski {
211*b1cdbd2cSJim Jagielski private:
212*b1cdbd2cSJim Jagielski
213*b1cdbd2cSJim Jagielski uno::Reference< lang::XMultiServiceFactory > m_xSMgr;
214*b1cdbd2cSJim Jagielski uno::Reference< ucb::XContentProvider > m_xProvider;
215*b1cdbd2cSJim Jagielski sal_Int32 m_nOpenMode;
216*b1cdbd2cSJim Jagielski uno::Sequence< beans::Property > m_seq;
217*b1cdbd2cSJim Jagielski uno::Sequence< ucb::NumberedSortingInfo > m_seqSort;
218*b1cdbd2cSJim Jagielski URLParameter m_aURLParameter;
219*b1cdbd2cSJim Jagielski Databases* m_pDatabases;
220*b1cdbd2cSJim Jagielski
221*b1cdbd2cSJim Jagielski
222*b1cdbd2cSJim Jagielski public:
223*b1cdbd2cSJim Jagielski
ResultSetForRootFactory(const uno::Reference<lang::XMultiServiceFactory> & xSMgr,const uno::Reference<ucb::XContentProvider> & xProvider,sal_Int32 nOpenMode,const uno::Sequence<beans::Property> & seq,const uno::Sequence<ucb::NumberedSortingInfo> & seqSort,URLParameter aURLParameter,Databases * pDatabases)224*b1cdbd2cSJim Jagielski ResultSetForRootFactory(
225*b1cdbd2cSJim Jagielski const uno::Reference< lang::XMultiServiceFactory >& xSMgr,
226*b1cdbd2cSJim Jagielski const uno::Reference< ucb::XContentProvider >& xProvider,
227*b1cdbd2cSJim Jagielski sal_Int32 nOpenMode,
228*b1cdbd2cSJim Jagielski const uno::Sequence< beans::Property >& seq,
229*b1cdbd2cSJim Jagielski const uno::Sequence< ucb::NumberedSortingInfo >& seqSort,
230*b1cdbd2cSJim Jagielski URLParameter aURLParameter,
231*b1cdbd2cSJim Jagielski Databases* pDatabases )
232*b1cdbd2cSJim Jagielski : m_xSMgr( xSMgr ),
233*b1cdbd2cSJim Jagielski m_xProvider( xProvider ),
234*b1cdbd2cSJim Jagielski m_nOpenMode( nOpenMode ),
235*b1cdbd2cSJim Jagielski m_seq( seq ),
236*b1cdbd2cSJim Jagielski m_seqSort( seqSort ),
237*b1cdbd2cSJim Jagielski m_aURLParameter( aURLParameter ),
238*b1cdbd2cSJim Jagielski m_pDatabases( pDatabases )
239*b1cdbd2cSJim Jagielski {
240*b1cdbd2cSJim Jagielski }
241*b1cdbd2cSJim Jagielski
createResultSet()242*b1cdbd2cSJim Jagielski ResultSetBase* createResultSet()
243*b1cdbd2cSJim Jagielski {
244*b1cdbd2cSJim Jagielski return new ResultSetForRoot( m_xSMgr,
245*b1cdbd2cSJim Jagielski m_xProvider,
246*b1cdbd2cSJim Jagielski m_nOpenMode,
247*b1cdbd2cSJim Jagielski m_seq,
248*b1cdbd2cSJim Jagielski m_seqSort,
249*b1cdbd2cSJim Jagielski m_aURLParameter,
250*b1cdbd2cSJim Jagielski m_pDatabases );
251*b1cdbd2cSJim Jagielski }
252*b1cdbd2cSJim Jagielski };
253*b1cdbd2cSJim Jagielski
254*b1cdbd2cSJim Jagielski
255*b1cdbd2cSJim Jagielski
256*b1cdbd2cSJim Jagielski class ResultSetForQueryFactory
257*b1cdbd2cSJim Jagielski : public ResultSetFactory
258*b1cdbd2cSJim Jagielski {
259*b1cdbd2cSJim Jagielski private:
260*b1cdbd2cSJim Jagielski
261*b1cdbd2cSJim Jagielski uno::Reference< lang::XMultiServiceFactory > m_xSMgr;
262*b1cdbd2cSJim Jagielski uno::Reference< ucb::XContentProvider > m_xProvider;
263*b1cdbd2cSJim Jagielski sal_Int32 m_nOpenMode;
264*b1cdbd2cSJim Jagielski uno::Sequence< beans::Property > m_seq;
265*b1cdbd2cSJim Jagielski uno::Sequence< ucb::NumberedSortingInfo > m_seqSort;
266*b1cdbd2cSJim Jagielski URLParameter m_aURLParameter;
267*b1cdbd2cSJim Jagielski Databases* m_pDatabases;
268*b1cdbd2cSJim Jagielski
269*b1cdbd2cSJim Jagielski
270*b1cdbd2cSJim Jagielski public:
271*b1cdbd2cSJim Jagielski
ResultSetForQueryFactory(const uno::Reference<lang::XMultiServiceFactory> & xSMgr,const uno::Reference<ucb::XContentProvider> & xProvider,sal_Int32 nOpenMode,const uno::Sequence<beans::Property> & seq,const uno::Sequence<ucb::NumberedSortingInfo> & seqSort,URLParameter aURLParameter,Databases * pDatabases)272*b1cdbd2cSJim Jagielski ResultSetForQueryFactory(
273*b1cdbd2cSJim Jagielski const uno::Reference< lang::XMultiServiceFactory >& xSMgr,
274*b1cdbd2cSJim Jagielski const uno::Reference< ucb::XContentProvider >& xProvider,
275*b1cdbd2cSJim Jagielski sal_Int32 nOpenMode,
276*b1cdbd2cSJim Jagielski const uno::Sequence< beans::Property >& seq,
277*b1cdbd2cSJim Jagielski const uno::Sequence< ucb::NumberedSortingInfo >& seqSort,
278*b1cdbd2cSJim Jagielski URLParameter aURLParameter,
279*b1cdbd2cSJim Jagielski Databases* pDatabases )
280*b1cdbd2cSJim Jagielski : m_xSMgr( xSMgr ),
281*b1cdbd2cSJim Jagielski m_xProvider( xProvider ),
282*b1cdbd2cSJim Jagielski m_nOpenMode( nOpenMode ),
283*b1cdbd2cSJim Jagielski m_seq( seq ),
284*b1cdbd2cSJim Jagielski m_seqSort( seqSort ),
285*b1cdbd2cSJim Jagielski m_aURLParameter( aURLParameter ),
286*b1cdbd2cSJim Jagielski m_pDatabases( pDatabases )
287*b1cdbd2cSJim Jagielski {
288*b1cdbd2cSJim Jagielski }
289*b1cdbd2cSJim Jagielski
createResultSet()290*b1cdbd2cSJim Jagielski ResultSetBase* createResultSet()
291*b1cdbd2cSJim Jagielski {
292*b1cdbd2cSJim Jagielski return new ResultSetForQuery( m_xSMgr,
293*b1cdbd2cSJim Jagielski m_xProvider,
294*b1cdbd2cSJim Jagielski m_nOpenMode,
295*b1cdbd2cSJim Jagielski m_seq,
296*b1cdbd2cSJim Jagielski m_seqSort,
297*b1cdbd2cSJim Jagielski m_aURLParameter,
298*b1cdbd2cSJim Jagielski m_pDatabases );
299*b1cdbd2cSJim Jagielski }
300*b1cdbd2cSJim Jagielski };
301*b1cdbd2cSJim Jagielski
302*b1cdbd2cSJim Jagielski
303*b1cdbd2cSJim Jagielski
304*b1cdbd2cSJim Jagielski // virtual
execute(const ucb::Command & aCommand,sal_Int32 CommandId,const uno::Reference<ucb::XCommandEnvironment> & Environment)305*b1cdbd2cSJim Jagielski uno::Any SAL_CALL Content::execute(
306*b1cdbd2cSJim Jagielski const ucb::Command& aCommand,
307*b1cdbd2cSJim Jagielski sal_Int32 CommandId,
308*b1cdbd2cSJim Jagielski const uno::Reference< ucb::XCommandEnvironment >& Environment )
309*b1cdbd2cSJim Jagielski throw( uno::Exception,
310*b1cdbd2cSJim Jagielski ucb::CommandAbortedException,
311*b1cdbd2cSJim Jagielski uno::RuntimeException )
312*b1cdbd2cSJim Jagielski {
313*b1cdbd2cSJim Jagielski uno::Any aRet;
314*b1cdbd2cSJim Jagielski
315*b1cdbd2cSJim Jagielski if ( aCommand.Name.compareToAscii( "getPropertyValues" ) == 0 )
316*b1cdbd2cSJim Jagielski {
317*b1cdbd2cSJim Jagielski uno::Sequence< beans::Property > Properties;
318*b1cdbd2cSJim Jagielski if ( !( aCommand.Argument >>= Properties ) )
319*b1cdbd2cSJim Jagielski {
320*b1cdbd2cSJim Jagielski aRet <<= lang::IllegalArgumentException();
321*b1cdbd2cSJim Jagielski ucbhelper::cancelCommandExecution(aRet,Environment);
322*b1cdbd2cSJim Jagielski }
323*b1cdbd2cSJim Jagielski
324*b1cdbd2cSJim Jagielski aRet <<= getPropertyValues( Properties );
325*b1cdbd2cSJim Jagielski }
326*b1cdbd2cSJim Jagielski else if ( aCommand.Name.compareToAscii( "setPropertyValues" ) == 0 )
327*b1cdbd2cSJim Jagielski {
328*b1cdbd2cSJim Jagielski uno::Sequence<beans::PropertyValue> propertyValues;
329*b1cdbd2cSJim Jagielski
330*b1cdbd2cSJim Jagielski if( ! ( aCommand.Argument >>= propertyValues ) ) {
331*b1cdbd2cSJim Jagielski aRet <<= lang::IllegalArgumentException();
332*b1cdbd2cSJim Jagielski ucbhelper::cancelCommandExecution(aRet,Environment);
333*b1cdbd2cSJim Jagielski }
334*b1cdbd2cSJim Jagielski
335*b1cdbd2cSJim Jagielski uno::Sequence< uno::Any > ret(propertyValues.getLength());
336*b1cdbd2cSJim Jagielski uno::Sequence< beans::Property > props(getProperties(Environment));
337*b1cdbd2cSJim Jagielski // No properties can be set
338*b1cdbd2cSJim Jagielski for(sal_Int32 i = 0; i < ret.getLength(); ++i) {
339*b1cdbd2cSJim Jagielski ret[i] <<= beans::UnknownPropertyException();
340*b1cdbd2cSJim Jagielski for(sal_Int32 j = 0; j < props.getLength(); ++j)
341*b1cdbd2cSJim Jagielski if(props[j].Name == propertyValues[i].Name) {
342*b1cdbd2cSJim Jagielski ret[i] <<= lang::IllegalAccessException();
343*b1cdbd2cSJim Jagielski break;
344*b1cdbd2cSJim Jagielski }
345*b1cdbd2cSJim Jagielski }
346*b1cdbd2cSJim Jagielski
347*b1cdbd2cSJim Jagielski aRet <<= ret;
348*b1cdbd2cSJim Jagielski }
349*b1cdbd2cSJim Jagielski else if ( aCommand.Name.compareToAscii( "getPropertySetInfo" ) == 0 )
350*b1cdbd2cSJim Jagielski {
351*b1cdbd2cSJim Jagielski // Note: Implemented by base class.
352*b1cdbd2cSJim Jagielski aRet <<= getPropertySetInfo( Environment );
353*b1cdbd2cSJim Jagielski }
354*b1cdbd2cSJim Jagielski else if ( aCommand.Name.compareToAscii( "getCommandInfo" ) == 0 )
355*b1cdbd2cSJim Jagielski {
356*b1cdbd2cSJim Jagielski // Note: Implemented by base class.
357*b1cdbd2cSJim Jagielski aRet <<= getCommandInfo( Environment );
358*b1cdbd2cSJim Jagielski }
359*b1cdbd2cSJim Jagielski else if ( aCommand.Name.compareToAscii( "open" ) == 0 )
360*b1cdbd2cSJim Jagielski {
361*b1cdbd2cSJim Jagielski ucb::OpenCommandArgument2 aOpenCommand;
362*b1cdbd2cSJim Jagielski if ( !( aCommand.Argument >>= aOpenCommand ) )
363*b1cdbd2cSJim Jagielski {
364*b1cdbd2cSJim Jagielski aRet <<= lang::IllegalArgumentException();
365*b1cdbd2cSJim Jagielski ucbhelper::cancelCommandExecution(aRet,Environment);
366*b1cdbd2cSJim Jagielski }
367*b1cdbd2cSJim Jagielski
368*b1cdbd2cSJim Jagielski uno::Reference< io::XActiveDataSink > xActiveDataSink(
369*b1cdbd2cSJim Jagielski aOpenCommand.Sink, uno::UNO_QUERY);
370*b1cdbd2cSJim Jagielski
371*b1cdbd2cSJim Jagielski if(xActiveDataSink.is())
372*b1cdbd2cSJim Jagielski m_aURLParameter.open(m_xSMgr,
373*b1cdbd2cSJim Jagielski aCommand,
374*b1cdbd2cSJim Jagielski CommandId,
375*b1cdbd2cSJim Jagielski Environment,
376*b1cdbd2cSJim Jagielski xActiveDataSink);
377*b1cdbd2cSJim Jagielski
378*b1cdbd2cSJim Jagielski uno::Reference< io::XActiveDataStreamer > xActiveDataStreamer(
379*b1cdbd2cSJim Jagielski aOpenCommand.Sink, uno::UNO_QUERY);
380*b1cdbd2cSJim Jagielski
381*b1cdbd2cSJim Jagielski if(xActiveDataStreamer.is()) {
382*b1cdbd2cSJim Jagielski aRet <<= ucb::UnsupportedDataSinkException();
383*b1cdbd2cSJim Jagielski ucbhelper::cancelCommandExecution(aRet,Environment);
384*b1cdbd2cSJim Jagielski }
385*b1cdbd2cSJim Jagielski
386*b1cdbd2cSJim Jagielski uno::Reference< io::XOutputStream > xOutputStream(
387*b1cdbd2cSJim Jagielski aOpenCommand.Sink, uno::UNO_QUERY);
388*b1cdbd2cSJim Jagielski
389*b1cdbd2cSJim Jagielski if(xOutputStream.is() )
390*b1cdbd2cSJim Jagielski m_aURLParameter.open(m_xSMgr,
391*b1cdbd2cSJim Jagielski aCommand,
392*b1cdbd2cSJim Jagielski CommandId,
393*b1cdbd2cSJim Jagielski Environment,
394*b1cdbd2cSJim Jagielski xOutputStream);
395*b1cdbd2cSJim Jagielski
396*b1cdbd2cSJim Jagielski if( m_aURLParameter.isRoot() )
397*b1cdbd2cSJim Jagielski {
398*b1cdbd2cSJim Jagielski uno::Reference< ucb::XDynamicResultSet > xSet
399*b1cdbd2cSJim Jagielski = new DynamicResultSet(
400*b1cdbd2cSJim Jagielski m_xSMgr,
401*b1cdbd2cSJim Jagielski this,
402*b1cdbd2cSJim Jagielski aOpenCommand,
403*b1cdbd2cSJim Jagielski Environment,
404*b1cdbd2cSJim Jagielski new ResultSetForRootFactory(
405*b1cdbd2cSJim Jagielski m_xSMgr,
406*b1cdbd2cSJim Jagielski m_xProvider.get(),
407*b1cdbd2cSJim Jagielski aOpenCommand.Mode,
408*b1cdbd2cSJim Jagielski aOpenCommand.Properties,
409*b1cdbd2cSJim Jagielski aOpenCommand.SortingInfo,
410*b1cdbd2cSJim Jagielski m_aURLParameter,
411*b1cdbd2cSJim Jagielski m_pDatabases));
412*b1cdbd2cSJim Jagielski aRet <<= xSet;
413*b1cdbd2cSJim Jagielski }
414*b1cdbd2cSJim Jagielski else if( m_aURLParameter.isQuery() )
415*b1cdbd2cSJim Jagielski {
416*b1cdbd2cSJim Jagielski uno::Reference< ucb::XDynamicResultSet > xSet
417*b1cdbd2cSJim Jagielski = new DynamicResultSet(
418*b1cdbd2cSJim Jagielski m_xSMgr,
419*b1cdbd2cSJim Jagielski this,
420*b1cdbd2cSJim Jagielski aOpenCommand,
421*b1cdbd2cSJim Jagielski Environment,
422*b1cdbd2cSJim Jagielski new ResultSetForQueryFactory(
423*b1cdbd2cSJim Jagielski m_xSMgr,
424*b1cdbd2cSJim Jagielski m_xProvider.get(),
425*b1cdbd2cSJim Jagielski aOpenCommand.Mode,
426*b1cdbd2cSJim Jagielski aOpenCommand.Properties,
427*b1cdbd2cSJim Jagielski aOpenCommand.SortingInfo,
428*b1cdbd2cSJim Jagielski m_aURLParameter,
429*b1cdbd2cSJim Jagielski m_pDatabases ) );
430*b1cdbd2cSJim Jagielski aRet <<= xSet;
431*b1cdbd2cSJim Jagielski }
432*b1cdbd2cSJim Jagielski }
433*b1cdbd2cSJim Jagielski else
434*b1cdbd2cSJim Jagielski {
435*b1cdbd2cSJim Jagielski //////////////////////////////////////////////////////////////////
436*b1cdbd2cSJim Jagielski // Unsupported command
437*b1cdbd2cSJim Jagielski //////////////////////////////////////////////////////////////////
438*b1cdbd2cSJim Jagielski aRet <<= ucb::UnsupportedCommandException();
439*b1cdbd2cSJim Jagielski ucbhelper::cancelCommandExecution(aRet,Environment);
440*b1cdbd2cSJim Jagielski }
441*b1cdbd2cSJim Jagielski
442*b1cdbd2cSJim Jagielski return aRet;
443*b1cdbd2cSJim Jagielski }
444*b1cdbd2cSJim Jagielski
445*b1cdbd2cSJim Jagielski
446*b1cdbd2cSJim Jagielski
447*b1cdbd2cSJim Jagielski
448*b1cdbd2cSJim Jagielski //=========================================================================
getPropertyValues(const uno::Sequence<beans::Property> & rProperties)449*b1cdbd2cSJim Jagielski uno::Reference< sdbc::XRow > Content::getPropertyValues(
450*b1cdbd2cSJim Jagielski const uno::Sequence< beans::Property >& rProperties )
451*b1cdbd2cSJim Jagielski {
452*b1cdbd2cSJim Jagielski osl::MutexGuard aGuard( m_aMutex );
453*b1cdbd2cSJim Jagielski
454*b1cdbd2cSJim Jagielski rtl::Reference< ::ucbhelper::PropertyValueSet > xRow =
455*b1cdbd2cSJim Jagielski new ::ucbhelper::PropertyValueSet( m_xSMgr );
456*b1cdbd2cSJim Jagielski
457*b1cdbd2cSJim Jagielski for ( sal_Int32 n = 0; n < rProperties.getLength(); ++n )
458*b1cdbd2cSJim Jagielski {
459*b1cdbd2cSJim Jagielski const beans::Property& rProp = rProperties[n];
460*b1cdbd2cSJim Jagielski
461*b1cdbd2cSJim Jagielski if ( rProp.Name.compareToAscii( "ContentType" ) == 0 )
462*b1cdbd2cSJim Jagielski xRow->appendString(
463*b1cdbd2cSJim Jagielski rProp,
464*b1cdbd2cSJim Jagielski rtl::OUString::createFromAscii(
465*b1cdbd2cSJim Jagielski "application/vnd.sun.star.help" ) );
466*b1cdbd2cSJim Jagielski else if( rProp.Name.compareToAscii( "Title" ) == 0 )
467*b1cdbd2cSJim Jagielski xRow->appendString ( rProp,m_aURLParameter.get_title() );
468*b1cdbd2cSJim Jagielski else if( rProp.Name.compareToAscii( "IsReadOnly" ) == 0 )
469*b1cdbd2cSJim Jagielski xRow->appendBoolean( rProp,true );
470*b1cdbd2cSJim Jagielski else if( rProp.Name.compareToAscii( "IsDocument" ) == 0 )
471*b1cdbd2cSJim Jagielski xRow->appendBoolean(
472*b1cdbd2cSJim Jagielski rProp,
473*b1cdbd2cSJim Jagielski m_aURLParameter.isFile() || m_aURLParameter.isRoot() );
474*b1cdbd2cSJim Jagielski else if( rProp.Name.compareToAscii( "IsFolder" ) == 0 )
475*b1cdbd2cSJim Jagielski xRow->appendBoolean(
476*b1cdbd2cSJim Jagielski rProp,
477*b1cdbd2cSJim Jagielski ! m_aURLParameter.isFile() || m_aURLParameter.isRoot() );
478*b1cdbd2cSJim Jagielski else if( rProp.Name.compareToAscii( "IsErrorDocument" ) == 0 )
479*b1cdbd2cSJim Jagielski xRow->appendBoolean( rProp, m_aURLParameter.isErrorDocument() );
480*b1cdbd2cSJim Jagielski else if( rProp.Name.compareToAscii( "MediaType" ) == 0 )
481*b1cdbd2cSJim Jagielski if( m_aURLParameter.isPicture() )
482*b1cdbd2cSJim Jagielski xRow->appendString(
483*b1cdbd2cSJim Jagielski rProp,
484*b1cdbd2cSJim Jagielski rtl::OUString::createFromAscii( "image/gif" ) );
485*b1cdbd2cSJim Jagielski else if( m_aURLParameter.isActive() )
486*b1cdbd2cSJim Jagielski xRow->appendString(
487*b1cdbd2cSJim Jagielski rProp,
488*b1cdbd2cSJim Jagielski rtl::OUString::createFromAscii( "text/plain" ) );
489*b1cdbd2cSJim Jagielski else if( m_aURLParameter.isFile() )
490*b1cdbd2cSJim Jagielski xRow->appendString(
491*b1cdbd2cSJim Jagielski rProp,rtl::OUString::createFromAscii( "text/html" ) );
492*b1cdbd2cSJim Jagielski else if( m_aURLParameter.isRoot() )
493*b1cdbd2cSJim Jagielski xRow->appendString(
494*b1cdbd2cSJim Jagielski rProp,
495*b1cdbd2cSJim Jagielski rtl::OUString::createFromAscii( "text/css" ) );
496*b1cdbd2cSJim Jagielski else
497*b1cdbd2cSJim Jagielski xRow->appendVoid( rProp );
498*b1cdbd2cSJim Jagielski else if( m_aURLParameter.isModule() )
499*b1cdbd2cSJim Jagielski if( rProp.Name.compareToAscii( "KeywordList" ) == 0 )
500*b1cdbd2cSJim Jagielski {
501*b1cdbd2cSJim Jagielski KeywordInfo *inf =
502*b1cdbd2cSJim Jagielski m_pDatabases->getKeyword( m_aURLParameter.get_module(),
503*b1cdbd2cSJim Jagielski m_aURLParameter.get_language() );
504*b1cdbd2cSJim Jagielski
505*b1cdbd2cSJim Jagielski uno::Any aAny;
506*b1cdbd2cSJim Jagielski if( inf )
507*b1cdbd2cSJim Jagielski aAny <<= inf->getKeywordList();
508*b1cdbd2cSJim Jagielski xRow->appendObject( rProp,aAny );
509*b1cdbd2cSJim Jagielski }
510*b1cdbd2cSJim Jagielski else if( rProp.Name.compareToAscii( "KeywordRef" ) == 0 )
511*b1cdbd2cSJim Jagielski {
512*b1cdbd2cSJim Jagielski KeywordInfo *inf =
513*b1cdbd2cSJim Jagielski m_pDatabases->getKeyword( m_aURLParameter.get_module(),
514*b1cdbd2cSJim Jagielski m_aURLParameter.get_language() );
515*b1cdbd2cSJim Jagielski
516*b1cdbd2cSJim Jagielski uno::Any aAny;
517*b1cdbd2cSJim Jagielski if( inf )
518*b1cdbd2cSJim Jagielski aAny <<= inf->getIdList();
519*b1cdbd2cSJim Jagielski xRow->appendObject( rProp,aAny );
520*b1cdbd2cSJim Jagielski }
521*b1cdbd2cSJim Jagielski else if( rProp.Name.compareToAscii( "KeywordAnchorForRef" ) == 0 )
522*b1cdbd2cSJim Jagielski {
523*b1cdbd2cSJim Jagielski KeywordInfo *inf =
524*b1cdbd2cSJim Jagielski m_pDatabases->getKeyword( m_aURLParameter.get_module(),
525*b1cdbd2cSJim Jagielski m_aURLParameter.get_language() );
526*b1cdbd2cSJim Jagielski
527*b1cdbd2cSJim Jagielski uno::Any aAny;
528*b1cdbd2cSJim Jagielski if( inf )
529*b1cdbd2cSJim Jagielski aAny <<= inf->getAnchorList();
530*b1cdbd2cSJim Jagielski xRow->appendObject( rProp,aAny );
531*b1cdbd2cSJim Jagielski }
532*b1cdbd2cSJim Jagielski else if( rProp.Name.compareToAscii( "KeywordTitleForRef" ) == 0 )
533*b1cdbd2cSJim Jagielski {
534*b1cdbd2cSJim Jagielski KeywordInfo *inf =
535*b1cdbd2cSJim Jagielski m_pDatabases->getKeyword( m_aURLParameter.get_module(),
536*b1cdbd2cSJim Jagielski m_aURLParameter.get_language() );
537*b1cdbd2cSJim Jagielski
538*b1cdbd2cSJim Jagielski uno::Any aAny;
539*b1cdbd2cSJim Jagielski if( inf )
540*b1cdbd2cSJim Jagielski aAny <<= inf->getTitleList();
541*b1cdbd2cSJim Jagielski xRow->appendObject( rProp,aAny );
542*b1cdbd2cSJim Jagielski }
543*b1cdbd2cSJim Jagielski else if( rProp.Name.compareToAscii( "SearchScopes" ) == 0 )
544*b1cdbd2cSJim Jagielski {
545*b1cdbd2cSJim Jagielski uno::Sequence< rtl::OUString > seq( 2 );
546*b1cdbd2cSJim Jagielski seq[0] = rtl::OUString::createFromAscii( "Heading" );
547*b1cdbd2cSJim Jagielski seq[1] = rtl::OUString::createFromAscii( "FullText" );
548*b1cdbd2cSJim Jagielski uno::Any aAny;
549*b1cdbd2cSJim Jagielski aAny <<= seq;
550*b1cdbd2cSJim Jagielski xRow->appendObject( rProp,aAny );
551*b1cdbd2cSJim Jagielski }
552*b1cdbd2cSJim Jagielski else if( rProp.Name.compareToAscii( "Order" ) == 0 )
553*b1cdbd2cSJim Jagielski {
554*b1cdbd2cSJim Jagielski StaticModuleInformation *inf =
555*b1cdbd2cSJim Jagielski m_pDatabases->getStaticInformationForModule(
556*b1cdbd2cSJim Jagielski m_aURLParameter.get_module(),
557*b1cdbd2cSJim Jagielski m_aURLParameter.get_language() );
558*b1cdbd2cSJim Jagielski
559*b1cdbd2cSJim Jagielski uno::Any aAny;
560*b1cdbd2cSJim Jagielski if( inf )
561*b1cdbd2cSJim Jagielski aAny <<= sal_Int32( inf->get_order() );
562*b1cdbd2cSJim Jagielski xRow->appendObject( rProp,aAny );
563*b1cdbd2cSJim Jagielski }
564*b1cdbd2cSJim Jagielski else
565*b1cdbd2cSJim Jagielski xRow->appendVoid( rProp );
566*b1cdbd2cSJim Jagielski else if( rProp.Name.compareToAscii( "AnchorName" ) == 0 &&
567*b1cdbd2cSJim Jagielski m_aURLParameter.isFile() )
568*b1cdbd2cSJim Jagielski xRow->appendString( rProp,m_aURLParameter.get_tag() );
569*b1cdbd2cSJim Jagielski else
570*b1cdbd2cSJim Jagielski xRow->appendVoid( rProp );
571*b1cdbd2cSJim Jagielski }
572*b1cdbd2cSJim Jagielski
573*b1cdbd2cSJim Jagielski return uno::Reference< sdbc::XRow >( xRow.get() );
574*b1cdbd2cSJim Jagielski }
575