blob: 4ffe404f1f8c3527602ff7df7ed2a06fc1817764 [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_unotools.hxx"
#include <com/sun/star/sdbc/XResultSet.hpp>
#include <com/sun/star/ucb/XContentAccess.hpp>
#include <com/sun/star/ucb/CommandAbortedException.hpp>
#include <unotools/localfilehelper.hxx>
#include <ucbhelper/fileidentifierconverter.hxx>
#include <ucbhelper/contentbroker.hxx>
#include <rtl/ustring.hxx>
#include <osl/file.hxx>
#include <tools/debug.hxx>
#include <tools/list.hxx>
#include <tools/urlobj.hxx>
#include <ucbhelper/content.hxx>
using namespace ::osl;
using namespace ::com::sun::star::uno;
using namespace ::com::sun::star::ucb;
namespace utl
{
sal_Bool LocalFileHelper::ConvertSystemPathToURL( const String& rName, const String& rBaseURL, String& rReturn )
{
rReturn = ::rtl::OUString();
::ucbhelper::ContentBroker* pBroker = ::ucbhelper::ContentBroker::get();
if ( !pBroker )
{
rtl::OUString aRet;
if ( FileBase::getFileURLFromSystemPath( rName, aRet ) == FileBase::E_None )
rReturn = aRet;
}
else
{
::com::sun::star::uno::Reference< ::com::sun::star::ucb::XContentProviderManager > xManager =
pBroker->getContentProviderManagerInterface();
try
{
rReturn = ::ucbhelper::getFileURLFromSystemPath( xManager, rBaseURL, rName );
}
catch ( ::com::sun::star::uno::RuntimeException& )
{
return sal_False;
}
}
return ( rReturn.Len() != 0 );
}
sal_Bool LocalFileHelper::ConvertURLToSystemPath( const String& rName, String& rReturn )
{
rReturn = ::rtl::OUString();
::ucbhelper::ContentBroker* pBroker = ::ucbhelper::ContentBroker::get();
if ( !pBroker )
{
rtl::OUString aRet;
if( FileBase::getSystemPathFromFileURL( rName, aRet ) == FileBase::E_None )
rReturn = aRet;
}
else
{
::com::sun::star::uno::Reference< ::com::sun::star::ucb::XContentProviderManager > xManager =
pBroker->getContentProviderManagerInterface();
try
{
rReturn = ::ucbhelper::getSystemPathFromFileURL( xManager, rName );
}
catch ( ::com::sun::star::uno::RuntimeException& )
{
}
}
return ( rReturn.Len() != 0 );
}
sal_Bool LocalFileHelper::ConvertPhysicalNameToURL( const String& rName, String& rReturn )
{
rReturn = ::rtl::OUString();
::ucbhelper::ContentBroker* pBroker = ::ucbhelper::ContentBroker::get();
if ( !pBroker )
{
rtl::OUString aRet;
if ( FileBase::getFileURLFromSystemPath( rName, aRet ) == FileBase::E_None )
rReturn = aRet;
}
else
{
::com::sun::star::uno::Reference< ::com::sun::star::ucb::XContentProviderManager > xManager =
pBroker->getContentProviderManagerInterface();
try
{
rtl::OUString aBase( ::ucbhelper::getLocalFileURL( xManager ) );
rReturn = ::ucbhelper::getFileURLFromSystemPath( xManager, aBase, rName );
}
catch ( ::com::sun::star::uno::RuntimeException& )
{
}
}
return ( rReturn.Len() != 0 );
}
sal_Bool LocalFileHelper::ConvertURLToPhysicalName( const String& rName, String& rReturn )
{
rReturn = ::rtl::OUString();
::ucbhelper::ContentBroker* pBroker = ::ucbhelper::ContentBroker::get();
if ( !pBroker )
{
::rtl::OUString aRet;
if ( FileBase::getSystemPathFromFileURL( rName, aRet ) == FileBase::E_None )
rReturn = aRet;
}
else
{
::com::sun::star::uno::Reference< ::com::sun::star::ucb::XContentProviderManager > xManager =
pBroker->getContentProviderManagerInterface();
try
{
INetURLObject aObj( rName );
INetURLObject aLocal( ::ucbhelper::getLocalFileURL( xManager ) );
if ( aObj.GetProtocol() == aLocal.GetProtocol() )
rReturn = ::ucbhelper::getSystemPathFromFileURL( xManager, rName );
}
catch ( ::com::sun::star::uno::RuntimeException& )
{
}
}
return ( rReturn.Len() != 0 );
}
sal_Bool LocalFileHelper::IsLocalFile( const String& rName )
{
String aTmp;
return ConvertURLToPhysicalName( rName, aTmp );
}
sal_Bool LocalFileHelper::IsFileContent( const String& rName )
{
String aTmp;
return ConvertURLToSystemPath( rName, aTmp );
}
DECLARE_LIST( StringList_Impl, ::rtl::OUString* )
::com::sun::star::uno::Sequence < ::rtl::OUString > LocalFileHelper::GetFolderContents( const ::rtl::OUString& rFolder, sal_Bool bFolder )
{
StringList_Impl* pFiles = NULL;
try
{
::ucbhelper::Content aCnt( rFolder, Reference< XCommandEnvironment > () );
Reference< ::com::sun::star::sdbc::XResultSet > xResultSet;
::com::sun::star::uno::Sequence< ::rtl::OUString > aProps(1);
::rtl::OUString* pProps = aProps.getArray();
pProps[0] = ::rtl::OUString::createFromAscii( "Url" );
try
{
::ucbhelper::ResultSetInclude eInclude = bFolder ? ::ucbhelper::INCLUDE_FOLDERS_AND_DOCUMENTS : ::ucbhelper::INCLUDE_DOCUMENTS_ONLY;
xResultSet = aCnt.createCursor( aProps, eInclude );
}
catch( ::com::sun::star::ucb::CommandAbortedException& )
{
}
catch( Exception& )
{
}
if ( xResultSet.is() )
{
pFiles = new StringList_Impl;
Reference< XContentAccess > xContentAccess( xResultSet, UNO_QUERY );
try
{
while ( xResultSet->next() )
{
::rtl::OUString aId = xContentAccess->queryContentIdentifierString();
::rtl::OUString* pFile = new ::rtl::OUString( aId );
pFiles->Insert( pFile, LIST_APPEND );
}
}
catch( ::com::sun::star::ucb::CommandAbortedException& )
{
}
catch( Exception& )
{
}
}
}
catch( Exception& )
{
}
if ( pFiles )
{
sal_uLong nCount = pFiles->Count();
Sequence < ::rtl::OUString > aRet( nCount );
::rtl::OUString* pRet = aRet.getArray();
for ( sal_uInt16 i = 0; i < nCount; ++i )
{
::rtl::OUString* pFile = pFiles->GetObject(i);
pRet[i] = *( pFile );
delete pFile;
}
delete pFiles;
return aRet;
}
else
return Sequence < ::rtl::OUString > ();
}
}