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