sc/inc/xmlwrap.hxx               |    9 +++-
 sc/source/filter/xml/xmlwrap.cxx |   81 ++++++++++++++++++---------------------
 sc/source/ui/docshell/docsh.cxx  |    8 +--
 3 files changed, 50 insertions(+), 48 deletions(-)

New commits:
commit ec639ad118ecb02ab0efea3a60c793d9b6ea3ef6
Author: Kohei Yoshida <kohei.yosh...@collabora.com>
Date:   Tue May 20 22:32:43 2014 -0400

    Finer grained ODS import mode selection.
    
    Change-Id: I18520837f8d25103bf8482a0204b8a7b7740feb1

diff --git a/sc/inc/xmlwrap.hxx b/sc/inc/xmlwrap.hxx
index e74c01a..b7ec5cd 100644
--- a/sc/inc/xmlwrap.hxx
+++ b/sc/inc/xmlwrap.hxx
@@ -72,10 +72,17 @@ class ScXMLImportWrapper
         ScMySharedData*& pSharedData);
 
 public:
+
+    static const sal_uInt8 STYLES   = 0x01;
+    static const sal_uInt8 CONTENT  = 0x02;
+    static const sal_uInt8 METADATA = 0x04;
+    static const sal_uInt8 SETTINGS = 0x08;
+    static const sal_uInt8 ALL      = STYLES | CONTENT | METADATA | SETTINGS;
+
     ScXMLImportWrapper(
         ScDocShell& rDocSh, SfxMedium* pM, const 
css::uno::Reference<css::embed::XStorage>& xStor );
 
-    bool Import(bool bStylesOnly, ErrCode& );
+    bool Import( sal_uInt8 nMode, ErrCode& rError );
     bool Export(bool bStylesOnly);
 
     const sc::ImportPostProcessData& GetImportPostProcessData() const;
diff --git a/sc/source/filter/xml/xmlwrap.cxx b/sc/source/filter/xml/xmlwrap.cxx
index cc1cbff..159c3d8 100644
--- a/sc/source/filter/xml/xmlwrap.cxx
+++ b/sc/source/filter/xml/xmlwrap.cxx
@@ -309,7 +309,7 @@ sal_uInt32 ScXMLImportWrapper::ImportFromComponent(const 
uno::Reference<uno::XCo
     return nReturn;
 }
 
-bool ScXMLImportWrapper::Import(bool bStylesOnly, ErrCode& nError)
+bool ScXMLImportWrapper::Import( sal_uInt8 nMode, ErrCode& rError )
 {
     uno::Reference<uno::XComponentContext> xContext = 
comphelper::getProcessComponentContext();
 
@@ -349,6 +349,7 @@ bool ScXMLImportWrapper::Import(bool bStylesOnly, ErrCode& 
nError)
     };
     uno::Reference< beans::XPropertySet > xInfoSet( 
comphelper::GenericPropertySet_CreateInstance( new comphelper::PropertySetInfo( 
aImportInfoMap ) ) );
 
+    // No need to lock solar mutex when calling from the wrapper.
     xInfoSet->setPropertyValue(SC_UNO_ODS_LOCK_SOLAR_MUTEX, 
uno::makeAny(false));
 
     // ---- get BuildId from parent container if available
@@ -403,14 +404,14 @@ bool ScXMLImportWrapper::Import(bool bStylesOnly, 
ErrCode& nError)
         }
     }
 
-    if (bStylesOnly)
-        xInfoSet->setPropertyValue("OrganizerMode", uno::makeAny(sal_True));
+    if (mrDocShell.GetCreateMode() == SFX_CREATE_MODE_ORGANIZER)
+        xInfoSet->setPropertyValue("OrganizerMode", uno::makeAny(true));
 
     xInfoSet->setPropertyValue( "SourceStorage", uno::Any( xStorage ) );
 
     bool bOasis = ( SotStorage::GetVersion( xStorage ) > SOFFICE_FILEFORMAT_60 
);
 
-    if (!bStylesOnly && bOasis)
+    if ((nMode & METADATA) == METADATA && bOasis)
     {
         // RDF metadata: ODF >= 1.2
         try
@@ -428,34 +429,37 @@ bool ScXMLImportWrapper::Import(bool bStylesOnly, 
ErrCode& nError)
             ucb::InteractiveAugmentedIOException iaioe;
             if ( e.TargetException >>= iaioe )
             {
-                nError = SCERR_IMPORT_UNKNOWN;
+                rError = SCERR_IMPORT_UNKNOWN;
             }
             else
             {
-                nError = SCWARN_IMPORT_FEATURES_LOST;
+                rError = SCWARN_IMPORT_FEATURES_LOST;
             }
         }
         catch ( const uno::Exception &)
         {
-            nError = SCWARN_IMPORT_FEATURES_LOST;
+            rError = SCWARN_IMPORT_FEATURES_LOST;
         }
     }
 
     // #i103539#: always read meta.xml for generator
     sal_uInt32 nMetaRetval(0);
-    uno::Sequence<uno::Any> aMetaArgs(1);
-    uno::Any* pMetaArgs = aMetaArgs.getArray();
-    pMetaArgs[0] <<= xInfoSet;
+    if ((nMode & METADATA) == METADATA)
+    {
+        uno::Sequence<uno::Any> aMetaArgs(1);
+        uno::Any* pMetaArgs = aMetaArgs.getArray();
+        pMetaArgs[0] <<= xInfoSet;
 
-    SAL_INFO( "sc.filter", "meta import start" );
+        SAL_INFO( "sc.filter", "meta import start" );
 
-    nMetaRetval = ImportFromComponent(
-                            xContext, xModel, xXMLParser, aParserInput,
-                            bOasis ? 
OUString("com.sun.star.comp.Calc.XMLOasisMetaImporter")
-                            : 
OUString("com.sun.star.comp.Calc.XMLMetaImporter"),
-                            "meta.xml", "Meta.xml", aMetaArgs, false);
+        nMetaRetval = ImportFromComponent(
+                                xContext, xModel, xXMLParser, aParserInput,
+                                bOasis ? 
OUString("com.sun.star.comp.Calc.XMLOasisMetaImporter")
+                                : 
OUString("com.sun.star.comp.Calc.XMLMetaImporter"),
+                                "meta.xml", "Meta.xml", aMetaArgs, false);
 
-    SAL_INFO( "sc.filter", "meta import end" );
+        SAL_INFO( "sc.filter", "meta import end" );
+    }
 
     SvXMLGraphicHelper* pGraphicHelper = NULL;
     uno::Reference< document::XGraphicObjectResolver > xGrfContainer;
@@ -479,7 +483,7 @@ bool ScXMLImportWrapper::Import(bool bStylesOnly, ErrCode& 
nError)
     pStylesArgs[3] <<= xObjectResolver;
 
     sal_uInt32 nSettingsRetval(0);
-    if (!bStylesOnly)
+    if ((nMode & SETTINGS) == SETTINGS)
     {
         //  Settings must be loaded first because of the printer setting,
         //  which is needed in the page styles (paper tray).
@@ -500,6 +504,7 @@ bool ScXMLImportWrapper::Import(bool bStylesOnly, ErrCode& 
nError)
     }
 
     sal_uInt32 nStylesRetval(0);
+    if ((nMode & STYLES) == STYLES)
     {
         SAL_INFO( "sc.filter", "styles import start" );
 
@@ -513,7 +518,7 @@ bool ScXMLImportWrapper::Import(bool bStylesOnly, ErrCode& 
nError)
     }
 
     sal_uInt32 nDocRetval(0);
-    if (!bStylesOnly)
+    if ((nMode & CONTENT) == CONTENT)
     {
         uno::Sequence<uno::Any> aDocArgs(4);
         uno::Any* pDocArgs = aDocArgs.getArray();
@@ -542,34 +547,24 @@ bool ScXMLImportWrapper::Import(bool bStylesOnly, 
ErrCode& nError)
     if (xStatusIndicator.is())
         xStatusIndicator->end();
 
-    bool bRet(false);
-    if (bStylesOnly)
+    bool bRet = false;
+    if (nDocRetval)
     {
-        if (nStylesRetval)
-            nError = nStylesRetval;
-        else
+        rError = nDocRetval;
+        if (nDocRetval == SCWARN_IMPORT_RANGE_OVERFLOW ||
+            nDocRetval == SCWARN_IMPORT_ROW_OVERFLOW ||
+            nDocRetval == SCWARN_IMPORT_COLUMN_OVERFLOW ||
+            nDocRetval == SCWARN_IMPORT_SHEET_OVERFLOW)
             bRet = true;
     }
+    else if (nStylesRetval)
+        rError = nStylesRetval;
+    else if (nMetaRetval)
+        rError = nMetaRetval;
+    else if (nSettingsRetval)
+        rError = nSettingsRetval;
     else
-    {
-        if (nDocRetval)
-        {
-            nError = nDocRetval;
-            if (nDocRetval == SCWARN_IMPORT_RANGE_OVERFLOW ||
-                nDocRetval == SCWARN_IMPORT_ROW_OVERFLOW ||
-                nDocRetval == SCWARN_IMPORT_COLUMN_OVERFLOW ||
-                nDocRetval == SCWARN_IMPORT_SHEET_OVERFLOW)
-                bRet = true;
-        }
-        else if (nStylesRetval)
-            nError = nStylesRetval;
-        else if (nMetaRetval)
-            nError = nMetaRetval;
-        else if (nSettingsRetval)
-            nError = nSettingsRetval;
-        else
-            bRet = true;
-    }
+        bRet = true;
 
     // set BuildId on XModel for later OLE object loading
     if( xInfoSet.is() )
diff --git a/sc/source/ui/docshell/docsh.cxx b/sc/source/ui/docshell/docsh.cxx
index e85008d..7ed1836 100644
--- a/sc/source/ui/docshell/docsh.cxx
+++ b/sc/source/ui/docshell/docsh.cxx
@@ -441,13 +441,13 @@ bool ScDocShell::LoadXML( SfxMedium* pLoadMedium, const 
::com::sun::star::uno::R
 
     ScXMLImportWrapper aImport(*this, pLoadMedium, xStor);
 
-    bool bRet(false);
+    bool bRet = false;
     ErrCode nError = ERRCODE_NONE;
     aDocument.EnableAdjustHeight(false);
-    if (GetCreateMode() != SFX_CREATE_MODE_ORGANIZER)
-        bRet = aImport.Import(false, nError);
+    if (GetCreateMode() == SFX_CREATE_MODE_ORGANIZER)
+        bRet = aImport.Import(ScXMLImportWrapper::STYLES, nError);
     else
-        bRet = aImport.Import(true, nError);
+        bRet = aImport.Import(ScXMLImportWrapper::ALL, nError);
 
     if ( nError )
         pLoadMedium->SetError( nError, OUString( OSL_LOG_PREFIX ) );
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to