diff options
Diffstat (limited to 'sw/source/core/unocore/swunohelper.cxx')
-rw-r--r-- | sw/source/core/unocore/swunohelper.cxx | 291 |
1 files changed, 291 insertions, 0 deletions
diff --git a/sw/source/core/unocore/swunohelper.cxx b/sw/source/core/unocore/swunohelper.cxx new file mode 100644 index 000000000000..b0d0f9623e71 --- /dev/null +++ b/sw/source/core/unocore/swunohelper.cxx @@ -0,0 +1,291 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +// MARKER(update_precomp.py): autogen include statement, do not remove +#include "precompiled_sw.hxx" + +#define _SVSTDARR_STRINGS +#include <com/sun/star/uno/Sequence.h> +#include <com/sun/star/uno/Exception.hpp> +#include <com/sun/star/ucb/XContentIdentifier.hpp> +#include <com/sun/star/ucb/XContentProvider.hpp> +#include <com/sun/star/ucb/XCommandEnvironment.hpp> +#include <com/sun/star/ucb/TransferInfo.hpp> +#ifndef _COM_SUN_STAR_UCB_NAMECLASH_HDL_ +#include <com/sun/star/ucb/NameClash.hdl> +#endif +#include <com/sun/star/sdbc/XResultSet.hpp> +#include <com/sun/star/sdbc/XRow.hpp> +#include <com/sun/star/lang/XMultiServiceFactory.hpp> +#include <comphelper/processfactory.hxx> +#include <comphelper/types.hxx> +#include <tools/urlobj.hxx> +#include <tools/datetime.hxx> +#include <tools/debug.hxx> +#include <ucbhelper/contentidentifier.hxx> +#include <ucbhelper/contentbroker.hxx> +#include <ucbhelper/content.hxx> +#include <svl/svstdarr.hxx> +#include <swunohelper.hxx> +#include <swunodef.hxx> +#include <errhdl.hxx> + +namespace SWUnoHelper { + +sal_Int32 GetEnumAsInt32( const UNO_NMSPC::Any& rVal ) +{ + sal_Int32 eVal; + try + { + eVal = comphelper::getEnumAsINT32( rVal ); + } + catch( UNO_NMSPC::Exception & ) + { + eVal = 0; + ASSERT( FALSE, "can't get EnumAsInt32" ); + } + return eVal; +} + + +// methods for UCB actions +BOOL UCB_DeleteFile( const String& rURL ) +{ + BOOL bRemoved; + try + { + ucbhelper::Content aTempContent( rURL, + STAR_REFERENCE( ucb::XCommandEnvironment )()); + aTempContent.executeCommand( + rtl::OUString::createFromAscii( "delete" ), + UNO_NMSPC::makeAny( sal_Bool( sal_True ) ) ); + bRemoved = TRUE; + } + catch( UNO_NMSPC::Exception& ) + { + bRemoved = FALSE; + ASSERT( FALSE, "Exeception from executeCommand( delete )" ); + } + return bRemoved; +} + +BOOL UCB_CopyFile( const String& rURL, const String& rNewURL, BOOL bCopyIsMove ) +{ + BOOL bCopyCompleted = TRUE; + try + { + INetURLObject aURL( rNewURL ); + String sName( aURL.GetName() ); + aURL.removeSegment(); + String sMainURL( aURL.GetMainURL(INetURLObject::NO_DECODE) ); + + ucbhelper::Content aTempContent( sMainURL, + STAR_REFERENCE( ucb::XCommandEnvironment )()); + + UNO_NMSPC::Any aAny; + STAR_NMSPC::ucb::TransferInfo aInfo; + aInfo.NameClash = STAR_NMSPC::ucb::NameClash::ERROR; + aInfo.NewTitle = sName; + aInfo.SourceURL = rURL; + aInfo.MoveData = bCopyIsMove; + aAny <<= aInfo; + aTempContent.executeCommand( + rtl::OUString::createFromAscii( "transfer" ), + aAny ); + } + catch( UNO_NMSPC::Exception& ) + { + ASSERT( FALSE, "Exeception from executeCommand( transfer )" ); + bCopyCompleted = FALSE; + } + return bCopyCompleted; +} + +BOOL UCB_IsCaseSensitiveFileName( const String& rURL ) +{ + BOOL bCaseSensitive; + try + { + STAR_REFERENCE( lang::XMultiServiceFactory ) xMSF = + comphelper::getProcessServiceFactory(); + + INetURLObject aTempObj( rURL ); + aTempObj.SetBase( aTempObj.GetBase().toAsciiLowerCase() ); + STAR_REFERENCE( ucb::XContentIdentifier ) xRef1 = new + ucbhelper::ContentIdentifier( xMSF, + aTempObj.GetMainURL( INetURLObject::NO_DECODE )); + + aTempObj.SetBase(aTempObj.GetBase().toAsciiUpperCase()); + STAR_REFERENCE( ucb::XContentIdentifier ) xRef2 = new + ucbhelper::ContentIdentifier( xMSF, + aTempObj.GetMainURL( INetURLObject::NO_DECODE )); + + STAR_REFERENCE( ucb::XContentProvider ) xProv = + ucbhelper::ContentBroker::get()->getContentProviderInterface(); + + sal_Int32 nCompare = xProv->compareContentIds( xRef1, xRef2 ); + bCaseSensitive = 0 != nCompare; + } + catch( UNO_NMSPC::Exception& ) + { + bCaseSensitive = FALSE; + ASSERT( FALSE, "Exeception from compareContentIds()" ); + } + return bCaseSensitive; +} + +BOOL UCB_IsReadOnlyFileName( const String& rURL ) +{ + BOOL bIsReadOnly = FALSE; + try + { + ucbhelper::Content aCnt( rURL, STAR_REFERENCE( ucb::XCommandEnvironment )()); + UNO_NMSPC::Any aAny = aCnt.getPropertyValue( + rtl::OUString::createFromAscii( "IsReadOnly" )); + if(aAny.hasValue()) + bIsReadOnly = *(sal_Bool*)aAny.getValue(); + } + catch( UNO_NMSPC::Exception& ) + { + bIsReadOnly = FALSE; + } + return bIsReadOnly; +} + +BOOL UCB_IsFile( const String& rURL ) +{ + BOOL bExists = FALSE; + try + { + ::ucbhelper::Content aContent( rURL, STAR_REFERENCE( ucb::XCommandEnvironment )() ); + bExists = aContent.isDocument(); + } + catch (UNO_NMSPC::Exception &) + { + } + return bExists; +} + +BOOL UCB_IsDirectory( const String& rURL ) +{ + BOOL bExists = FALSE; + try + { + ::ucbhelper::Content aContent( rURL, STAR_REFERENCE( ucb::XCommandEnvironment )() ); + bExists = aContent.isFolder(); + } + catch (UNO_NMSPC::Exception &) + { + } + return bExists; +} + + // get a list of files from the folder of the URL + // options: pExtension = 0 -> all, else this specific extension + // pDateTime != 0 -> returns also the modified date/time of + // the files in a SvPtrarr --> + // !! objects must be deleted from the caller!! +BOOL UCB_GetFileListOfFolder( const String& rURL, SvStrings& rList, + const String* pExtension, + SvPtrarr* pDateTimeList ) +{ + BOOL bOk = FALSE; + try + { + ucbhelper::Content aCnt( rURL, STAR_REFERENCE( ucb::XCommandEnvironment )()); + STAR_REFERENCE( sdbc::XResultSet ) xResultSet; + + USHORT nSeqSize = pDateTimeList ? 2 : 1; + UNO_NMSPC::Sequence < rtl::OUString > aProps( nSeqSize ); + rtl::OUString* pProps = aProps.getArray(); + pProps[ 0 ] = rtl::OUString::createFromAscii( "Title" ); + if( pDateTimeList ) + pProps[ 1 ] = rtl::OUString::createFromAscii( "DateModified" ); + + try + { + xResultSet = aCnt.createCursor( aProps, ::ucbhelper::INCLUDE_DOCUMENTS_ONLY ); + } + catch( UNO_NMSPC::Exception& ) + { + DBG_ERRORFILE( "create cursor failed!" ); + } + + if( xResultSet.is() ) + { + STAR_REFERENCE( sdbc::XRow ) xRow( xResultSet, UNO_NMSPC::UNO_QUERY ); + xub_StrLen nExtLen = pExtension ? pExtension->Len() : 0; + try + { + if( xResultSet->first() ) + { + do { + String sTitle( xRow->getString( 1 ) ); + if( !nExtLen || + ( sTitle.Len() > nExtLen && + sTitle.Equals( *pExtension, + sTitle.Len() - nExtLen, nExtLen )) ) + { + String* pStr = new String( sTitle ); + rList.Insert( pStr, rList.Count() ); + + if( pDateTimeList ) + { + STAR_NMSPC::util::DateTime aStamp = xRow->getTimestamp(2); + ::DateTime* pDateTime = new ::DateTime( + ::Date( aStamp.Day, + aStamp.Month, + aStamp.Year ), + ::Time( aStamp.Hours, + aStamp.Minutes, + aStamp.Seconds, + aStamp.HundredthSeconds )); + void* p = pDateTime; + pDateTimeList->Insert( p, + pDateTimeList->Count() ); + } + } + + } while( xResultSet->next() ); + } + bOk = TRUE; + } + catch( UNO_NMSPC::Exception& ) + { + DBG_ERRORFILE( "Exception caught!" ); + } + } + } + catch( UNO_NMSPC::Exception& ) + { + DBG_ERRORFILE( "Exception caught!" ); + bOk = FALSE; + } + return bOk; +} + +} |