[Libreoffice-commits] core.git: Branch 'feature/orcus-update' - 3 commits - framework/source sc/inc sc/source sfx2/inc sfx2/source

Kohei Yoshida kohei.yoshida at gmail.com
Tue Apr 9 12:33:53 PDT 2013


 framework/source/loadenv/loadenv.cxx        |    8 ++-
 sc/inc/orcusfilters.hxx                     |    4 +
 sc/source/filter/inc/orcusfiltersimpl.hxx   |    2 
 sc/source/filter/orcus/orcusfiltersimpl.cxx |   42 ++++++++++++++++
 sc/source/ui/docshell/docsh.cxx             |   31 ++++++++++--
 sc/source/ui/inc/docsh.hxx                  |    2 
 sfx2/inc/sfx2/docfilt.hxx                   |   19 +++++--
 sfx2/inc/sfx2/objsh.hxx                     |    4 -
 sfx2/source/bastyp/fltfnc.cxx               |    2 
 sfx2/source/doc/docfile.cxx                 |   71 +++++++++++++---------------
 sfx2/source/doc/docfilt.cxx                 |   15 +++++
 sfx2/source/doc/objstor.cxx                 |    6 +-
 sfx2/source/doc/sfxbasemodel.cxx            |    5 +
 13 files changed, 154 insertions(+), 57 deletions(-)

New commits:
commit 2733c20610d5b508c929e74e830764b8e1591336
Author: Kohei Yoshida <kohei.yoshida at gmail.com>
Date:   Tue Apr 9 15:36:03 2013 -0400

    Manage to use orcus to import ods, xlsx, and csv.
    
    But this occasionally crashes.
    
    Change-Id: I0a18d0e210639b43b89b966a54de541b9a43e329

diff --git a/framework/source/loadenv/loadenv.cxx b/framework/source/loadenv/loadenv.cxx
index 86646d5..c824222 100644
--- a/framework/source/loadenv/loadenv.cxx
+++ b/framework/source/loadenv/loadenv.cxx
@@ -744,7 +744,6 @@ bool queryOrcusTypeAndFilter(const uno::Sequence<beans::PropertyValue>& rDescrip
         rFilter = "gnumeric";
         return true;
     }
-#if 0
     else if (aURL.endsWith(".xlsx"))
     {
         rType = "generic_Text";
@@ -757,7 +756,12 @@ bool queryOrcusTypeAndFilter(const uno::Sequence<beans::PropertyValue>& rDescrip
         rFilter = "ods";
         return true;
     }
-#endif
+    else if (aURL.endsWith(".csv"))
+    {
+        rType = "generic_Text";
+        rFilter = "csv";
+        return true;
+    }
 
     return false;
 }
diff --git a/sc/inc/orcusfilters.hxx b/sc/inc/orcusfilters.hxx
index ef88795..ab09d8c 100644
--- a/sc/inc/orcusfilters.hxx
+++ b/sc/inc/orcusfilters.hxx
@@ -30,6 +30,10 @@ public:
 
     virtual bool importGnumeric(ScDocument& rDoc, const OUString& rPath) const = 0;
 
+    virtual bool importXLSX(ScDocument& rDoc, const OUString& rPath) const = 0;
+
+    virtual bool importODS(ScDocument& rDoc, const OUString& rPath) const = 0;
+
     /**
      * Create a context for XML file.  The context object stores session
      * information for each unique XML file.  You must create a new context
diff --git a/sc/source/filter/inc/orcusfiltersimpl.hxx b/sc/source/filter/inc/orcusfiltersimpl.hxx
index de5f988..e07cd19 100644
--- a/sc/source/filter/inc/orcusfiltersimpl.hxx
+++ b/sc/source/filter/inc/orcusfiltersimpl.hxx
@@ -22,6 +22,8 @@ public:
 
     virtual bool importCSV(ScDocument& rDoc, const OUString& rPath) const;
     virtual bool importGnumeric(ScDocument& rDoc, const OUString& rPath) const;
+    virtual bool importXLSX(ScDocument& rDoc, const OUString& rPath) const;
+    virtual bool importODS(ScDocument& rDoc, const OUString& rPath) const;
 
     virtual ScOrcusXMLContext* createXMLContext(ScDocument& rDoc, const OUString& rPath) const;
 };
diff --git a/sc/source/filter/orcus/orcusfiltersimpl.cxx b/sc/source/filter/orcus/orcusfiltersimpl.cxx
index e74a5e4..7ef1310 100644
--- a/sc/source/filter/orcus/orcusfiltersimpl.cxx
+++ b/sc/source/filter/orcus/orcusfiltersimpl.cxx
@@ -17,6 +17,8 @@
 #include <orcus/spreadsheet/import_interface.hpp>
 #include <orcus/orcus_csv.hpp>
 #include <orcus/orcus_gnumeric.hpp>
+#include <orcus/orcus_xlsx.hpp>
+#include <orcus/orcus_ods.hpp>
 #include <orcus/global.hpp>
 
 #ifdef WNT
@@ -71,6 +73,46 @@ bool ScOrcusFiltersImpl::importGnumeric(ScDocument& rDoc, const OUString& rPath)
     return true;
 }
 
+bool ScOrcusFiltersImpl::importXLSX(ScDocument& rDoc, const OUString& rPath) const
+{
+    ScOrcusFactory aFactory(rDoc);
+    OString aSysPath = toSystemPath(rPath);
+    const char* path = aSysPath.getStr();
+
+    try
+    {
+        orcus::orcus_xlsx filter(&aFactory);
+        filter.read_file(path);
+    }
+    catch (const std::exception& e)
+    {
+        SAL_WARN("sc", "Unable to load xlsx file! " << e.what());
+        return false;
+    }
+
+    return true;
+}
+
+bool ScOrcusFiltersImpl::importODS(ScDocument& rDoc, const OUString& rPath) const
+{
+    ScOrcusFactory aFactory(rDoc);
+    OString aSysPath = toSystemPath(rPath);
+    const char* path = aSysPath.getStr();
+
+    try
+    {
+        orcus::orcus_ods filter(&aFactory);
+        filter.read_file(path);
+    }
+    catch (const std::exception& e)
+    {
+        SAL_WARN("sc", "Unable to load ods file! " << e.what());
+        return false;
+    }
+
+    return true;
+}
+
 ScOrcusXMLContext* ScOrcusFiltersImpl::createXMLContext(ScDocument& rDoc, const OUString& rPath) const
 {
     return new ScOrcusXMLContextImpl(rDoc, rPath);
diff --git a/sc/source/ui/docshell/docsh.cxx b/sc/source/ui/docshell/docsh.cxx
index 1694255..0cc10bd 100644
--- a/sc/source/ui/docshell/docsh.cxx
+++ b/sc/source/ui/docshell/docsh.cxx
@@ -1493,16 +1493,39 @@ sal_Bool ScDocShell::ConvertFrom( SfxMedium& rMedium )
     return bRet;
 }
 
-bool ScDocShell::LoadExternal(SfxMedium& rMed, const OUString& rProvider)
+bool ScDocShell::LoadExternal( SfxMedium& rMed )
 {
-    if (rProvider == "orcus")
+    const SfxFilter* pFilter = rMed.GetFilter();
+    if (!pFilter)
+        return false;
+
+    if (pFilter->GetProviderName() == "orcus")
     {
         ScOrcusFilters* pOrcus = ScFormatFilter::Get().GetOrcusFilters();
         if (!pOrcus)
             return false;
 
-        if (!pOrcus->importGnumeric(aDocument, rMed.GetName()))
-            return false;
+        const OUString& rFilterName = pFilter->GetName();
+        if (rFilterName == "gnumeric")
+        {
+            if (!pOrcus->importGnumeric(aDocument, rMed.GetName()))
+                return false;
+        }
+        else if (rFilterName == "csv")
+        {
+            if (!pOrcus->importCSV(aDocument, rMed.GetName()))
+                return false;
+        }
+        else if (rFilterName == "xlsx")
+        {
+            if (!pOrcus->importXLSX(aDocument, rMed.GetName()))
+                return false;
+        }
+        else if (rFilterName == "ods")
+        {
+            if (!pOrcus->importODS(aDocument, rMed.GetName()))
+                return false;
+        }
 
         FinishedLoading(SFX_LOADED_MAINDOCUMENT | SFX_LOADED_IMAGES);
         return true;
diff --git a/sc/source/ui/inc/docsh.hxx b/sc/source/ui/inc/docsh.hxx
index a26a234..d761f7f 100644
--- a/sc/source/ui/inc/docsh.hxx
+++ b/sc/source/ui/inc/docsh.hxx
@@ -201,7 +201,7 @@ public:
     virtual sal_Bool    Load( SfxMedium& rMedium );
     virtual sal_Bool    LoadFrom( SfxMedium& rMedium );
     virtual sal_Bool    ConvertFrom( SfxMedium &rMedium );
-    virtual bool        LoadExternal(SfxMedium& rMedium, const OUString& rProvider);
+    virtual bool        LoadExternal( SfxMedium& rMedium );
     virtual sal_Bool    Save();
     virtual sal_Bool    SaveAs( SfxMedium& rMedium );
     virtual sal_Bool    ConvertTo( SfxMedium &rMedium );
diff --git a/sfx2/inc/sfx2/docfilt.hxx b/sfx2/inc/sfx2/docfilt.hxx
index 8400e5a..cc6f6b8 100644
--- a/sfx2/inc/sfx2/docfilt.hxx
+++ b/sfx2/inc/sfx2/docfilt.hxx
@@ -34,12 +34,12 @@
 
 #include <sfx2/sfxdefs.hxx>
 
-//========================================================================
 class SfxFilterContainer;
 class SotStorage;
+
 class SFX2_DLLPUBLIC SfxFilter
 {
-friend class SfxFilterContainer;
+    friend class SfxFilterContainer;
 
     WildCard        aWildCard;
 
@@ -47,17 +47,25 @@ friend class SfxFilterContainer;
     OUString aUserData;
     OUString aServiceName;
     OUString aMimeType;
-    OUString aFilterName;
+    OUString maFilterName;
     OUString aPattern;
     OUString aUIName;
     OUString aDefaultTemplate;
 
+    /**
+     * Custom provider name in case the filter is provided via external
+     * libraries.  Empty for conventional filter types.
+     */
+    OUString maProvider;
+
     SfxFilterFlags  nFormatType;
     sal_uIntPtr     nVersion;
     sal_uIntPtr     lFormat;
     sal_uInt16      nDocIcon;
 
 public:
+    SfxFilter( const OUString& rProvider, const OUString& rFilterName );
+
     SfxFilter( const OUString &rName,
                const OUString &rWildCard,
                SfxFilterFlags nFormatType,
@@ -77,9 +85,9 @@ public:
     bool CanExport() const { return nFormatType & SFX_FILTER_EXPORT; }
     bool IsInternal() const { return nFormatType & SFX_FILTER_INTERNAL; }
     SfxFilterFlags  GetFilterFlags() const  { return nFormatType; }
-    const OUString& GetFilterName() const { return aFilterName; }
+    const OUString& GetFilterName() const { return maFilterName; }
     const OUString& GetMimeType() const { return aMimeType; }
-    const OUString& GetName() const { return  aFilterName; }
+    const OUString& GetName() const { return  maFilterName; }
     const WildCard& GetWildcard() const { return aWildCard; }
     const OUString& GetRealTypeName() const { return aTypeName; }
     sal_uIntPtr         GetFormat() const { return lFormat; }
@@ -98,6 +106,7 @@ public:
     OUString GetSuffixes() const;
     OUString GetDefaultExtension() const;
     const OUString& GetServiceName() const { return aServiceName; }
+    const OUString& GetProviderName() const;
 
     static const SfxFilter* GetDefaultFilter( const String& rName );
     static const SfxFilter* GetFilterByName( const String& rName );
diff --git a/sfx2/inc/sfx2/objsh.hxx b/sfx2/inc/sfx2/objsh.hxx
index 5f1018e..4c366a5 100644
--- a/sfx2/inc/sfx2/objsh.hxx
+++ b/sfx2/inc/sfx2/objsh.hxx
@@ -308,7 +308,7 @@ public:
     bool                        DoInitUnitTest();
     sal_Bool                    DoInitNew( SfxMedium* pMedium=0 );
     sal_Bool                    DoLoad( SfxMedium* pMedium );
-    bool                        DoLoadExternal(SfxMedium* pMed, const OUString& rProvider);
+    bool                        DoLoadExternal( SfxMedium* pMed );
     sal_Bool                    DoSave();
     sal_Bool                    DoSaveAs( SfxMedium &rNewStor );
     sal_Bool                    DoSaveObjectAs( SfxMedium &rNewStor, sal_Bool bCommit );
@@ -329,7 +329,7 @@ public:
     virtual sal_Bool            SwitchPersistance(
                                     const ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage >& xStorage );
     virtual void                UpdateLinks();
-    virtual bool                LoadExternal(SfxMedium& rMedium, const OUString& rProvider);
+    virtual bool                LoadExternal( SfxMedium& rMedium );
     /**
      * Called when the Options dialog is dismissed with the OK button, to
      * handle potentially conflicting option settings.
diff --git a/sfx2/source/bastyp/fltfnc.cxx b/sfx2/source/bastyp/fltfnc.cxx
index 78b3607..43e0f10 100644
--- a/sfx2/source/bastyp/fltfnc.cxx
+++ b/sfx2/source/bastyp/fltfnc.cxx
@@ -1087,7 +1087,7 @@ void SfxFilterContainer::ReadSingleFilter_Impl(
         }
         else
         {
-            pFilter->aFilterName  = sFilterName;
+            pFilter->maFilterName  = sFilterName;
             pFilter->aWildCard    = WildCard(sExtension, ';');
             pFilter->nFormatType  = nFlags;
             pFilter->lFormat      = nClipboardId;
diff --git a/sfx2/source/doc/docfile.cxx b/sfx2/source/doc/docfile.cxx
index 3d57ae8..79e32c3 100644
--- a/sfx2/source/doc/docfile.cxx
+++ b/sfx2/source/doc/docfile.cxx
@@ -125,6 +125,7 @@
 #include "officecfg/Office/Common.hxx"
 
 #include <boost/noncopyable.hpp>
+#include <boost/scoped_ptr.hpp>
 
 using namespace ::com::sun::star;
 using namespace ::com::sun::star::uno;
@@ -278,6 +279,8 @@ public:
     mutable INetURLObject* m_pURLObj;
 
     const SfxFilter* m_pFilter;
+    boost::scoped_ptr<SfxFilter> m_pCustomFilter;
+
     SfxMedium*       pAntiImpl;
     SvStream* m_pInStream;
     SvStream* m_pOutStream;
@@ -2869,26 +2872,26 @@ SfxMedium::SfxMedium( const uno::Sequence<beans::PropertyValue>& aArgs ) :
     pImp->m_pSet = pParams;
     TransformParameters( SID_OPENDOC, aArgs, *pParams );
 
-    OUString aFilterProvider;
+    OUString aFilterProvider, aFilterName;
     {
         const SfxPoolItem* pItem = NULL;
         if (pImp->m_pSet->HasItem(SID_FILTER_PROVIDER, &pItem))
             aFilterProvider = static_cast<const SfxStringItem*>(pItem)->GetValue();
+
+        if (pImp->m_pSet->HasItem(SID_FILTER_NAME, &pItem))
+            aFilterName = static_cast<const SfxStringItem*>(pItem)->GetValue();
     }
 
     if (aFilterProvider.isEmpty())
     {
         // This is a conventional filter type.
-        OUString aFilterName;
-        SFX_ITEMSET_ARG( pImp->m_pSet, pFilterNameItem, SfxStringItem, SID_FILTER_NAME, false );
-        if( pFilterNameItem )
-            aFilterName = pFilterNameItem->GetValue();
         pImp->m_pFilter = SFX_APP()->GetFilterMatcher().GetFilter4FilterName( aFilterName );
     }
     else
     {
         // This filter is from an external provider such as orcus.
-
+        pImp->m_pCustomFilter.reset(new SfxFilter(aFilterProvider, aFilterName));
+        pImp->m_pFilter = pImp->m_pCustomFilter.get();
     }
 
     SFX_ITEMSET_ARG( pImp->m_pSet, pSalvageItem, SfxStringItem, SID_DOC_SALVAGE, false );
diff --git a/sfx2/source/doc/docfilt.cxx b/sfx2/source/doc/docfilt.cxx
index ce95b9b..d642f02 100644
--- a/sfx2/source/doc/docfilt.cxx
+++ b/sfx2/source/doc/docfilt.cxx
@@ -40,6 +40,12 @@ using namespace ::com::sun::star;
 
 DBG_NAME(SfxFilter)
 
+SfxFilter::SfxFilter( const OUString& rProvider, const OUString &rFilterName ) :
+    maFilterName(rFilterName),
+    maProvider(rProvider)
+{
+}
+
 SfxFilter::SfxFilter( const OUString &rName,
                       const OUString &rWildCard,
                       SfxFilterFlags nType,
@@ -54,8 +60,8 @@ SfxFilter::SfxFilter( const OUString &rName,
     aUserData(rUsrDat),
     aServiceName(rServiceName),
     aMimeType(rMimeType),
-    aFilterName(rName),
-    aUIName(aFilterName),
+    maFilterName(rName),
+    aUIName(maFilterName),
     nFormatType(nType),
     nVersion(SOFFICE_FILEFORMAT_50),
     lFormat(lFmt),
@@ -101,6 +107,11 @@ OUString SfxFilter::GetDefaultExtension() const
     return comphelper::string::getToken(GetWildcard().getGlob(), 0, ';');
 }
 
+const OUString& SfxFilter::GetProviderName() const
+{
+    return maProvider;
+}
+
 void SfxFilter::SetURLPattern( const OUString& rStr )
 {
     aPattern = rStr.toAsciiLowerCase();
diff --git a/sfx2/source/doc/objstor.cxx b/sfx2/source/doc/objstor.cxx
index 223ae5e..350785e 100644
--- a/sfx2/source/doc/objstor.cxx
+++ b/sfx2/source/doc/objstor.cxx
@@ -858,10 +858,10 @@ sal_Bool SfxObjectShell::DoLoad( SfxMedium *pMed )
     return bOk;
 }
 
-bool SfxObjectShell::DoLoadExternal(SfxMedium *pMed, const OUString& rProvider)
+bool SfxObjectShell::DoLoadExternal( SfxMedium *pMed )
 {
     pMedium = pMed;
-    return LoadExternal(*pMedium, rProvider);
+    return LoadExternal(*pMedium);
 }
 
 sal_uInt32 SfxObjectShell::HandleFilter( SfxMedium* pMedium, SfxObjectShell* pDoc )
@@ -3586,7 +3586,7 @@ void SfxObjectShell::UpdateLinks()
 {
 }
 
-bool SfxObjectShell::LoadExternal(SfxMedium&, const OUString&)
+bool SfxObjectShell::LoadExternal( SfxMedium& )
 {
     // Not implemented. It's an error if the code path ever comes here.
     return false;
diff --git a/sfx2/source/doc/sfxbasemodel.cxx b/sfx2/source/doc/sfxbasemodel.cxx
index 3cfec8c..a333a98 100644
--- a/sfx2/source/doc/sfxbasemodel.cxx
+++ b/sfx2/source/doc/sfxbasemodel.cxx
@@ -1854,8 +1854,11 @@ void SAL_CALL SfxBaseModel::load(   const Sequence< beans::PropertyValue >& seqA
         OUString aFilterProvider = getFilterProvider(seqArguments);
         if (!aFilterProvider.isEmpty())
         {
-            if (!m_pData->m_pObjectShell->DoLoadExternal(pMedium, aFilterProvider))
+            if (!m_pData->m_pObjectShell->DoLoadExternal(pMedium))
+            {
                 delete pMedium;
+                return;
+            }
 
             pMedium->SetUpdatePickList(false);
             return;
commit 76677cf2e1d5e87672d5ecf5303df58f98eb88e4
Author: Kohei Yoshida <kohei.yoshida at gmail.com>
Date:   Tue Apr 9 14:50:18 2013 -0400

    Make the impl class explicitly non-copyable.
    
    Change-Id: I58971205bcb0c9f397c64556c84114c0390e8e96

diff --git a/sfx2/source/doc/docfile.cxx b/sfx2/source/doc/docfile.cxx
index a339ee4..3d57ae8 100644
--- a/sfx2/source/doc/docfile.cxx
+++ b/sfx2/source/doc/docfile.cxx
@@ -88,12 +88,6 @@
 #include <rtl/logfile.hxx>
 #include <osl/file.hxx>
 
-using namespace ::com::sun::star;
-using namespace ::com::sun::star::uno;
-using namespace ::com::sun::star::ucb;
-using namespace ::com::sun::star::beans;
-using namespace ::com::sun::star::io;
-
 #include <comphelper/storagehelper.hxx>
 #include <comphelper/mediadescriptor.hxx>
 #include <comphelper/configurationhelper.hxx>
@@ -130,7 +124,14 @@ using namespace ::com::sun::star::io;
 #include "sfxacldetect.hxx"
 #include "officecfg/Office/Common.hxx"
 
-//==========================================================
+#include <boost/noncopyable.hpp>
+
+using namespace ::com::sun::star;
+using namespace ::com::sun::star::uno;
+using namespace ::com::sun::star::ucb;
+using namespace ::com::sun::star::beans;
+using namespace ::com::sun::star::io;
+
 namespace {
 
 static const sal_Int8 LOCK_UI_NOLOCK = 0;
@@ -243,8 +244,7 @@ void SAL_CALL SfxMediumHandler_Impl::handle( const com::sun::star::uno::Referenc
         m_xInter->handle( xRequest );
 }
 
-//----------------------------------------------------------------
-class SfxMedium_Impl
+class SfxMedium_Impl : boost::noncopyable
 {
 public:
     StreamMode m_nStorOpenMode;
commit f7eabb366dd8b404827614a47b9b3f54e45fd3e6
Author: Kohei Yoshida <kohei.yoshida at gmail.com>
Date:   Tue Apr 9 14:37:44 2013 -0400

    Re-organize UNO interface members & use clear() to clear their refs.
    
    Change-Id: I815e77640c7c3816e5b9c83b567a8e2051cdb81f

diff --git a/sfx2/source/doc/docfile.cxx b/sfx2/source/doc/docfile.cxx
index 44f8d9d..a339ee4 100644
--- a/sfx2/source/doc/docfile.cxx
+++ b/sfx2/source/doc/docfile.cxx
@@ -274,9 +274,6 @@ public:
     OUString m_aLogicName;
     OUString m_aLongName;
 
-    uno::Reference < embed::XStorage > xStorage;
-    uno::Reference<io::XInputStream> m_xInputStreamToLoadFrom;
-
     mutable SfxItemSet* m_pSet;
     mutable INetURLObject* m_pURLObj;
 
@@ -297,27 +294,26 @@ public:
 
     ::utl::TempFile*           pTempFile;
 
-    uno::Reference < embed::XStorage > m_xZipStorage;
-    Reference < XInputStream > xInputStream;
-    Reference < XStream > xStream;
-
-    uno::Reference< io::XStream > m_xLockingStream;
+    uno::Reference<embed::XStorage> xStorage;
+    uno::Reference<embed::XStorage> m_xZipStorage;
+    uno::Reference<io::XInputStream> m_xInputStreamToLoadFrom;
+    uno::Reference<io::XInputStream> xInputStream;
+    uno::Reference<io::XStream> xStream;
+    uno::Reference<io::XStream> m_xLockingStream;
+    uno::Reference<task::XInteractionHandler> xInteraction;
+    uno::Reference<logging::XSimpleLogRing> m_xLogRing;
 
     sal_uInt32                  nLastStorageError;
 
-    ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionHandler > xInteraction;
-
     OUString m_aBackupURL;
 
-    // the following member is changed and makes sence only during saving
+    // the following member is changed and makes sense only during saving
     // TODO/LATER: in future the signature state should be controlled by the medium not by the document
     //             in this case the member will hold this information
     sal_uInt16      m_nSignatureState;
 
     util::DateTime m_aDateTime;
 
-    uno::Reference< logging::XSimpleLogRing > m_xLogRing;
-
     SfxMedium_Impl( SfxMedium* pAntiImplP );
     ~SfxMedium_Impl();
 
@@ -619,13 +615,13 @@ void SfxMedium::CloseInStream_Impl()
         pImp->m_pSet->ClearItem( SID_INPUTSTREAM );
 
     CloseZipStorage_Impl();
-    pImp->xInputStream = uno::Reference< io::XInputStream >();
+    pImp->xInputStream.clear();
 
     if ( !pImp->m_pOutStream )
     {
         // output part of the stream is not used so the whole stream can be closed
         // TODO/LATER: is it correct?
-        pImp->xStream = uno::Reference< io::XStream >();
+        pImp->xStream.clear();
         if ( pImp->m_pSet )
             pImp->m_pSet->ClearItem( SID_STREAM );
     }
@@ -685,7 +681,7 @@ sal_Bool SfxMedium::CloseOutStream_Impl()
     {
         // input part of the stream is not used so the whole stream can be closed
         // TODO/LATER: is it correct?
-        pImp->xStream = uno::Reference< io::XStream >();
+        pImp->xStream.clear();
         if ( pImp->m_pSet )
             pImp->m_pSet->ClearItem( SID_STREAM );
     }
@@ -1403,7 +1399,7 @@ uno::Reference < embed::XStorage > SfxMedium::GetStorage( sal_Bool bCreateTempIf
 
     if ( bResetStorage )
     {
-        pImp->xStorage = 0;
+        pImp->xStorage.clear();
         if ( pImp->m_pInStream )
             pImp->m_pInStream->Seek( 0L );
     }
@@ -1454,7 +1450,7 @@ void SfxMedium::CloseZipStorage_Impl()
         } catch( const uno::Exception& )
         {}
 
-        pImp->m_xZipStorage = uno::Reference< embed::XStorage >();
+        pImp->m_xZipStorage.clear();
     }
 }
 
@@ -1474,7 +1470,7 @@ void SfxMedium::CloseStorage()
             }
         }
 
-        pImp->xStorage = 0;
+        pImp->xStorage.clear();
         pImp->bStorageBasedOnInStream = false;
     }
 
@@ -2675,7 +2671,7 @@ void SfxMedium::UnlockFile( sal_Bool bReleaseLockStream )
             {}
         }
 
-        pImp->m_xLockingStream = uno::Reference< io::XStream >();
+        pImp->m_xLockingStream.clear();
     }
 
     if ( pImp->m_bLocked )
@@ -2705,7 +2701,7 @@ void SfxMedium::CloseAndReleaseStreams_Impl()
 
         // if the locking stream is closed here the related member should be cleaned
         if ( pImp->xStream == pImp->m_xLockingStream )
-            pImp->m_xLockingStream = uno::Reference< io::XStream >();
+            pImp->m_xLockingStream.clear();
     }
 
     // The probably exsisting SvStream wrappers should be closed first


More information about the Libreoffice-commits mailing list