From 7e01bc8d28ffefd4539a5eae2587e1f7da0999e7 Mon Sep 17 00:00:00 2001 From: Mathias Bauer Date: Tue, 6 Oct 2009 12:34:07 +0200 Subject: #i103496#: removes sfx2 dependency from linguistic --- linguistic/prj/build.lst | 2 +- linguistic/source/convdic.cxx | 92 ++++++++++++++++++--------------- linguistic/source/convdiclist.cxx | 1 - linguistic/source/convdicxml.cxx | 3 +- linguistic/source/convdicxml.hxx | 2 +- linguistic/source/defs.hxx | 7 +++ linguistic/source/dicimp.cxx | 104 ++++++++++++++++++++++++-------------- linguistic/source/dicimp.hxx | 3 +- linguistic/source/dlistimp.cxx | 37 +++++++++++--- linguistic/source/hhconvdic.cxx | 1 - linguistic/source/makefile.mk | 2 +- 11 files changed, 157 insertions(+), 97 deletions(-) diff --git a/linguistic/prj/build.lst b/linguistic/prj/build.lst index 0b8f5f62fb1c..344453253054 100644 --- a/linguistic/prj/build.lst +++ b/linguistic/prj/build.lst @@ -1,4 +1,4 @@ -lg linguistic : xmloff sfx2 NULL +lg linguistic : xmloff NULL lg linguistic usr1 - all lg_mkout NULL lg linguistic\prj get - all lg_prj NULL lg linguistic\inc nmake - all lg_inc NULL diff --git a/linguistic/source/convdic.cxx b/linguistic/source/convdic.cxx index c58e7d142d47..c55e4ef30f4c 100644 --- a/linguistic/source/convdic.cxx +++ b/linguistic/source/convdic.cxx @@ -30,19 +30,21 @@ // MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_linguistic.hxx" + +#include #include -#include +#include #include #include #include -#include #include -#include -#include -#include +#include +#include #include +#include +#include +#include -#include // helper for factories #include #include #include @@ -50,18 +52,19 @@ #include #include #include -#ifndef _COM_SUN_STAR_UNO_REFERENCE_HPP_ +#include #include -#endif #include #include #include +#include +#include +#include #include #include #include #include #include -#include #include "convdic.hxx" @@ -89,23 +92,27 @@ void ReadThroughDic( const String &rMainURL, ConvDicXMLImport &rImport ) { if (rMainURL.Len() == 0) return; - - // get stream to be used DBG_ASSERT(!INetURLObject( rMainURL ).HasError(), "invalid URL"); - SfxMedium aMedium( rMainURL, STREAM_READ | STREAM_SHARE_DENYWRITE, FALSE ); - SvStream *pStream = aMedium.GetInStream(); - DBG_ASSERT( pStream, "input stream missing" ); - if (!pStream || pStream->GetError()) - return; - uno::Reference< lang::XMultiServiceFactory > xServiceFactory( - utl::getProcessServiceFactory() ); - DBG_ASSERT( xServiceFactory.is(), "XMLReader::Read: got no service manager" ); - if (!xServiceFactory.is()) + uno::Reference< lang::XMultiServiceFactory > xServiceFactory( utl::getProcessServiceFactory() ); + + // get xInputStream stream + uno::Reference< io::XInputStream > xIn; + try + { + uno::Reference< ucb::XSimpleFileAccess > xAccess( xServiceFactory->createInstance( + A2OU( "com.sun.star.ucb.SimpleFileAccess" ) ), uno::UNO_QUERY_THROW ); + xIn = xAccess->openFileRead( rMainURL ); + } + catch (uno::Exception & e) + { + DBG_ASSERT( 0, "failed to get input stream" ); + (void) e; + } + if (!xIn.is()) return; - uno::Reference< io::XInputStream > xIn = new utl::OInputStreamWrapper( *pStream ); - DBG_ASSERT( xIn.is(), "input stream missing" ); + SvStreamPtr pStream = SvStreamPtr( utl::UcbStreamHelper::CreateStream( xIn ) ); ULONG nError = sal::static_int_cast< ULONG >(-1); @@ -274,23 +281,29 @@ void ConvDic::Save() DBG_ASSERT( !bNeedEntries, "saving while entries missing" ); if (aMainURL.Len() == 0 || bNeedEntries) return; - DBG_ASSERT(!INetURLObject( aMainURL ).HasError(), "invalid URL"); - SfxMedium aMedium( aMainURL, STREAM_WRITE | STREAM_TRUNC | STREAM_SHARE_DENYALL, - FALSE ); - aMedium.CreateTempFile(); // use temp file to write to... - SvStream *pStream = aMedium.GetOutStream(); - DBG_ASSERT( pStream, "output stream missing" ); - if (!pStream || pStream->GetError()) + uno::Reference< lang::XMultiServiceFactory > xServiceFactory( utl::getProcessServiceFactory() ); + + // get XOutputStream stream + uno::Reference< io::XStream > xStream; + try + { + uno::Reference< ucb::XSimpleFileAccess > xAccess( xServiceFactory->createInstance( + A2OU( "com.sun.star.ucb.SimpleFileAccess" ) ), uno::UNO_QUERY_THROW ); + xStream = xAccess->openFileReadWrite( aMainURL ); + } + catch (uno::Exception & e) + { + DBG_ASSERT( 0, "failed to get input stream" ); + (void) e; + } + if (!xStream.is()) return; - uno::Reference< io::XOutputStream > xOut( - new utl::OOutputStreamWrapper( *pStream ) ); - DBG_ASSERT( xOut.is(), "output stream missing" ); + + SvStreamPtr pStream = SvStreamPtr( utl::UcbStreamHelper::CreateStream( xStream ) ); // get XML writer - uno::Reference< lang::XMultiServiceFactory > xServiceFactory( - utl::getProcessServiceFactory() ); uno::Reference< io::XActiveDataSource > xSaxWriter; if (xServiceFactory.is()) { @@ -306,10 +319,10 @@ void ConvDic::Save() } DBG_ASSERT( xSaxWriter.is(), "can't instantiate XML writer" ); - if (xSaxWriter.is() && xOut.is()) + if (xSaxWriter.is() && xStream.is()) { // connect XML writer to output stream - xSaxWriter->setOutputStream( xOut ); + xSaxWriter->setOutputStream( xStream->getOutputStream() ); // prepare arguments (prepend doc handler to given arguments) uno::Reference< xml::sax::XDocumentHandler > xDocHandler( xSaxWriter, UNO_QUERY ); @@ -318,15 +331,10 @@ void ConvDic::Save() //!! keep a first(!) reference until everything is done to //!! ensure the proper lifetime of the object uno::Reference< document::XFilter > aRef( (document::XFilter *) pExport ); - sal_Bool bRet = pExport->Export( aMedium ); // write entries to file + sal_Bool bRet = pExport->Export(); // write entries to file DBG_ASSERT( !pStream->GetError(), "I/O error while writing to stream" ); if (bRet) - { - // flush file, close it and release any lock - aMedium.Close(); - aMedium.Commit(); bIsModified = FALSE; - } } DBG_ASSERT( !bIsModified, "dictionary still modified after save. Save failed?" ); } diff --git a/linguistic/source/convdiclist.cxx b/linguistic/source/convdiclist.cxx index 89604517a41f..098ae669ddd6 100644 --- a/linguistic/source/convdiclist.cxx +++ b/linguistic/source/convdiclist.cxx @@ -36,7 +36,6 @@ #include #include #include -#include #include #include #include // helper for factories diff --git a/linguistic/source/convdicxml.cxx b/linguistic/source/convdicxml.cxx index 34133a4bc2f9..70ada335f57e 100644 --- a/linguistic/source/convdicxml.cxx +++ b/linguistic/source/convdicxml.cxx @@ -36,7 +36,6 @@ #include #include #include -#include #include #include #include @@ -335,7 +334,7 @@ void ConvDicXMLRightTextContext_Impl::EndElement() /////////////////////////////////////////////////////////////////////////// -sal_Bool ConvDicXMLExport::Export( SfxMedium & /*rMedium*/ ) +sal_Bool ConvDicXMLExport::Export() { sal_Bool bRet = sal_False; diff --git a/linguistic/source/convdicxml.hxx b/linguistic/source/convdicxml.hxx index 0746b5998589..f0a3ae4417d4 100644 --- a/linguistic/source/convdicxml.hxx +++ b/linguistic/source/convdicxml.hxx @@ -79,7 +79,7 @@ public: void _ExportContent(); sal_uInt32 exportDoc( enum ::xmloff::token::XMLTokenEnum eClass ); - sal_Bool Export( SfxMedium &rMedium ); + sal_Bool Export(); }; diff --git a/linguistic/source/defs.hxx b/linguistic/source/defs.hxx index ca3a611c30ee..48b6dc6d82e7 100644 --- a/linguistic/source/defs.hxx +++ b/linguistic/source/defs.hxx @@ -36,10 +36,17 @@ #include #include +#include + +class SvStream; + + /////////////////////////////////////////////////////////////////////////// #define A2OU(x) ::rtl::OUString::createFromAscii( x ) +typedef boost::shared_ptr< SvStream > SvStreamPtr; + namespace css = ::com::sun::star; /////////////////////////////////////////////////////////////////////////// diff --git a/linguistic/source/dicimp.cxx b/linguistic/source/dicimp.cxx index 1555fd3df4d7..019c6ffa1cd4 100644 --- a/linguistic/source/dicimp.cxx +++ b/linguistic/source/dicimp.cxx @@ -30,29 +30,30 @@ // MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_linguistic.hxx" -#include -#ifndef _DICIMP_HXX +#include #include -#endif -#ifndef _HYPHIMP_HXX #include -#endif -#include +#include +#include +#include #include #include #include #include -#include -#include +#include #include -#include +#include +#include #include #include #include +#include +#include + +#include "defs.hxx" -#include // helper for factories using namespace utl; using namespace osl; @@ -88,7 +89,7 @@ static sal_Bool getTag(const ByteString &rLine, } -INT16 ReadDicVersion( SvStream *pStream, USHORT &nLng, BOOL &bNeg ) +INT16 ReadDicVersion( SvStreamPtr &rpStream, USHORT &nLng, BOOL &bNeg ) { // Sniff the header INT16 nDicVersion; @@ -97,13 +98,13 @@ INT16 ReadDicVersion( SvStream *pStream, USHORT &nLng, BOOL &bNeg ) nLng = LANGUAGE_NONE; bNeg = FALSE; - if (!pStream || pStream->GetError()) + if (!rpStream.get() || rpStream->GetError()) return -1; - sal_Size nSniffPos = pStream->Tell(); + sal_Size nSniffPos = rpStream->Tell(); static sal_Size nVerOOo7Len = sal::static_int_cast< sal_Size >(strlen( pVerOOo7 )); pMagicHeader[ nVerOOo7Len ] = '\0'; - if ((pStream->Read((void *) pMagicHeader, nVerOOo7Len) == nVerOOo7Len) && + if ((rpStream->Read((void *) pMagicHeader, nVerOOo7Len) == nVerOOo7Len) && !strcmp(pMagicHeader, pVerOOo7)) { sal_Bool bSuccess; @@ -112,10 +113,10 @@ INT16 ReadDicVersion( SvStream *pStream, USHORT &nLng, BOOL &bNeg ) nDicVersion = 7; // 1st skip magic / header line - pStream->ReadLine(aLine); + rpStream->ReadLine(aLine); // 2nd line: language all | en-US | pt-BR ... - while (sal_True == (bSuccess = pStream->ReadLine(aLine))) + while (sal_True == (bSuccess = rpStream->ReadLine(aLine))) { ByteString aTagValue; @@ -151,13 +152,13 @@ INT16 ReadDicVersion( SvStream *pStream, USHORT &nLng, BOOL &bNeg ) { USHORT nLen; - pStream->Seek (nSniffPos ); + rpStream->Seek (nSniffPos ); - *pStream >> nLen; + *rpStream >> nLen; if (nLen >= MAX_HEADER_LENGTH) return -1; - pStream->Read(pMagicHeader, nLen); + rpStream->Read(pMagicHeader, nLen); pMagicHeader[nLen] = '\0'; // Check version magic @@ -175,14 +176,14 @@ INT16 ReadDicVersion( SvStream *pStream, USHORT &nLng, BOOL &bNeg ) 6 == nDicVersion) { // The language of the dictionary - *pStream >> nLng; + *rpStream >> nLng; if (VERS2_NOLANGUAGE == nLng) nLng = LANGUAGE_NONE; // Negative Flag sal_Char nTmp; - *pStream >> nTmp; + *rpStream >> nTmp; bNeg = (BOOL)nTmp; } } @@ -270,14 +271,29 @@ ULONG DictionaryNeo::loadEntries(const OUString &rMainURL) if (rMainURL.getLength() == 0) return 0; + DBG_ASSERT(!INetURLObject( rURL ).HasError(), "lng : invalid URL"); - ULONG nErr = sal::static_int_cast< ULONG >(-1); + uno::Reference< lang::XMultiServiceFactory > xServiceFactory( utl::getProcessServiceFactory() ); - // get stream to use - SfxMedium aMedium( rMainURL, STREAM_READ | STREAM_SHARE_DENYWRITE, FALSE ); - SvStream *pStream = aMedium.GetInStream(); - if (!pStream) - return nErr; + // get XInputStream stream + uno::Reference< io::XInputStream > xStream; + try + { + uno::Reference< ucb::XSimpleFileAccess > xAccess( xServiceFactory->createInstance( + A2OU( "com.sun.star.ucb.SimpleFileAccess" ) ), uno::UNO_QUERY_THROW ); + xStream = xAccess->openFileRead( rMainURL ); + } + catch (uno::Exception & e) + { + DBG_ASSERT( 0, "failed to get input stream" ); + (void) e; + } + if (!xStream.is()) + return static_cast< ULONG >(-1); + + SvStreamPtr pStream = SvStreamPtr( utl::UcbStreamHelper::CreateStream( xStream ) ); + + ULONG nErr = sal::static_int_cast< ULONG >(-1); // Header einlesen BOOL bNegativ; @@ -285,6 +301,7 @@ ULONG DictionaryNeo::loadEntries(const OUString &rMainURL) nDicVersion = ReadDicVersion(pStream, nLang, bNegativ); if (0 != (nErr = pStream->GetError())) return nErr; + nLanguage = nLang; eDicType = bNegativ ? DictionaryType_NEGATIVE : DictionaryType_POSITIVE; @@ -398,16 +415,29 @@ ULONG DictionaryNeo::saveEntries(const OUString &rURL) if (rURL.getLength() == 0) return 0; + DBG_ASSERT(!INetURLObject( rURL ).HasError(), "lng : invalid URL"); - ULONG nErr = sal::static_int_cast< ULONG >(-1); + uno::Reference< lang::XMultiServiceFactory > xServiceFactory( utl::getProcessServiceFactory() ); - DBG_ASSERT(!INetURLObject( rURL ).HasError(), "lng : invalid URL"); - SfxMedium aMedium( rURL, STREAM_WRITE | STREAM_TRUNC | STREAM_SHARE_DENYALL, - FALSE ); - aMedium.CreateTempFile(); // use temp file to write to... - SvStream *pStream = aMedium.GetOutStream(); - if (!pStream) - return nErr; + // get XOutputStream stream + uno::Reference< io::XStream > xStream; + try + { + uno::Reference< ucb::XSimpleFileAccess > xAccess( xServiceFactory->createInstance( + A2OU( "com.sun.star.ucb.SimpleFileAccess" ) ), uno::UNO_QUERY_THROW ); + xStream = xAccess->openFileReadWrite( rURL ); + } + catch (uno::Exception & e) + { + DBG_ASSERT( 0, "failed to get input stream" ); + (void) e; + } + if (!xStream.is()) + return static_cast< ULONG >(-1); + + SvStreamPtr pStream = SvStreamPtr( utl::UcbStreamHelper::CreateStream( xStream ) ); + + ULONG nErr = sal::static_int_cast< ULONG >(-1); rtl_TextEncoding eEnc = osl_getThreadTextEncoding(); if (nDicVersion >= 6) @@ -500,10 +530,6 @@ ULONG DictionaryNeo::saveEntries(const OUString &rURL) //! get return value before Stream is destroyed ULONG nError = pStream->GetError(); - // flush file, close it and release any lock - aMedium.Close(); - aMedium.Commit(); - return nError; } diff --git a/linguistic/source/dicimp.hxx b/linguistic/source/dicimp.hxx index 52eada08c486..917890bdd63c 100644 --- a/linguistic/source/dicimp.hxx +++ b/linguistic/source/dicimp.hxx @@ -42,6 +42,7 @@ #include #include +#include "defs.hxx" #include "misc.hxx" @@ -49,7 +50,7 @@ #define DIC_MAX_ENTRIES 30000 -INT16 ReadDicVersion( SvStream *pStream, USHORT &nLng, BOOL &bNeg ); +INT16 ReadDicVersion( SvStreamPtr &rpStream, USHORT &nLng, BOOL &bNeg ); const String GetDicExtension(); /////////////////////////////////////////////////////////////////////////// diff --git a/linguistic/source/dlistimp.cxx b/linguistic/source/dlistimp.cxx index fea10319a99c..80c61e64001b 100644 --- a/linguistic/source/dlistimp.cxx +++ b/linguistic/source/dlistimp.cxx @@ -30,9 +30,6 @@ // MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_linguistic.hxx" -#include "dlistimp.hxx" -#include "dicimp.hxx" -#include "lngopt.hxx" #include #include @@ -41,16 +38,22 @@ #include #include #include -#include -#include #include // helper for factories #include +#include +#include #include #include #include #include #include #include +#include + +#include "defs.hxx" +#include "dlistimp.hxx" +#include "dicimp.hxx" +#include "lngopt.hxx" //using namespace utl; using namespace osl; @@ -930,10 +933,28 @@ static BOOL IsVers2OrNewer( const String& rFileURL, USHORT& nLng, BOOL& bNeg ) return FALSE; // get stream to be used - SfxMedium aMedium( rFileURL, STREAM_READ | STREAM_SHARE_DENYWRITE, FALSE ); - SvStream *pStream = aMedium.GetInStream(); + uno::Reference< lang::XMultiServiceFactory > xServiceFactory( comphelper::getProcessServiceFactory() ); + + // get XInputStream stream + uno::Reference< io::XInputStream > xStream; + try + { + uno::Reference< ucb::XSimpleFileAccess > xAccess( xServiceFactory->createInstance( + A2OU( "com.sun.star.ucb.SimpleFileAccess" ) ), uno::UNO_QUERY_THROW ); + xStream = xAccess->openFileRead( rFileURL ); + } + catch (uno::Exception & e) + { + DBG_ASSERT( 0, "failed to get input stream" ); + (void) e; + } + DBG_ASSERT( xStream.is(), "failed to get stream for read" ); + if (!xStream.is()) + return FALSE; + + SvStreamPtr pStream = SvStreamPtr( utl::UcbStreamHelper::CreateStream( xStream ) ); - int nDicVersion = ReadDicVersion (pStream, nLng, bNeg); + int nDicVersion = ReadDicVersion(pStream, nLng, bNeg); if (2 == nDicVersion || nDicVersion >= 5) return TRUE; diff --git a/linguistic/source/hhconvdic.cxx b/linguistic/source/hhconvdic.cxx index 7972c1b208c7..980aabb51bef 100644 --- a/linguistic/source/hhconvdic.cxx +++ b/linguistic/source/hhconvdic.cxx @@ -37,7 +37,6 @@ #include #include #include -#include #include #include #include diff --git a/linguistic/source/makefile.mk b/linguistic/source/makefile.mk index 0012a9acd156..ccc9d1343f6f 100644 --- a/linguistic/source/makefile.mk +++ b/linguistic/source/makefile.mk @@ -68,13 +68,13 @@ SHL1TARGET= $(TARGET)$(DLLPOSTFIX) SHL1STDLIBS= \ $(CPPULIB) \ $(CPPUHELPERLIB) \ + $(COMPHELPERLIB) \ $(VOSLIB) \ $(TOOLSLIB) \ $(I18NISOLANGLIB) \ $(SVTOOLLIB) \ $(SVLLIB) \ $(VCLLIB) \ - $(SFXLIB) \ $(SALLIB) \ $(UCBHELPERLIB) \ $(UNOTOOLSLIB) \ -- cgit