Author: arielch
Date: Sun Jun 10 14:35:59 2012
New Revision: 1348605

URL: http://svn.apache.org/viewvc?rev=1348605&view=rev
Log:
i119411 - Read/write RDF support on ODS file format

Patch by: Tsutomu Uchino
Review by: arielch

Modified:
    incubator/ooo/trunk/main/sc/inc/scerrors.hxx
    incubator/ooo/trunk/main/sc/source/filter/xml/xmlwrap.cxx
    incubator/ooo/trunk/main/sc/source/ui/src/scerrors.src

Modified: incubator/ooo/trunk/main/sc/inc/scerrors.hxx
URL: 
http://svn.apache.org/viewvc/incubator/ooo/trunk/main/sc/inc/scerrors.hxx?rev=1348605&r1=1348604&r2=1348605&view=diff
==============================================================================
--- incubator/ooo/trunk/main/sc/inc/scerrors.hxx (original)
+++ incubator/ooo/trunk/main/sc/inc/scerrors.hxx Sun Jun 10 14:35:59 2012
@@ -58,6 +58,7 @@
 #define SCWARN_IMPORT_ROW_OVERFLOW (  2 | ERRCODE_CLASS_IMPORT | 
ERRCODE_WARNING_MASK | ERRCODE_AREA_SC )
 #define SCWARN_IMPORT_COLUMN_OVERFLOW (  3 | ERRCODE_CLASS_IMPORT | 
ERRCODE_WARNING_MASK | ERRCODE_AREA_SC )
 #define SCWARN_IMPORT_SHEET_OVERFLOW (  4 | ERRCODE_CLASS_IMPORT | 
ERRCODE_WARNING_MASK | ERRCODE_AREA_SC )
+#define SCWARN_IMPORT_FEATURES_LOST ( 5 | ERRCODE_CLASS_IMPORT | 
ERRCODE_WARNING_MASK | ERRCODE_AREA_SC )
 
 // ERRCODE_CLASS_EXPORT - does not display "Write-Error" in MsgBox
 #define SCWARN_EXPORT_NONCONVERTIBLE_CHARS  (   1 | ERRCODE_CLASS_EXPORT | 
ERRCODE_WARNING_MASK | ERRCODE_AREA_SC )

Modified: incubator/ooo/trunk/main/sc/source/filter/xml/xmlwrap.cxx
URL: 
http://svn.apache.org/viewvc/incubator/ooo/trunk/main/sc/source/filter/xml/xmlwrap.cxx?rev=1348605&r1=1348604&r2=1348605&view=diff
==============================================================================
--- incubator/ooo/trunk/main/sc/source/filter/xml/xmlwrap.cxx (original)
+++ incubator/ooo/trunk/main/sc/source/filter/xml/xmlwrap.cxx Sun Jun 10 
14:35:59 2012
@@ -62,7 +62,12 @@
 #include <com/sun/star/packages/zip/ZipIOException.hpp>
 #include <com/sun/star/embed/ElementModes.hpp>
 #include <com/sun/star/script/vba/XVBACompatibility.hpp>
+#include <com/sun/star/rdf/XDocumentMetadataAccess.hpp>
+#include <com/sun/star/ucb/InteractiveAugmentedIOException.hpp>
 
+#include <sfx2/DocumentMetadataAccess.hxx>
+#include <comphelper/componentcontext.hxx>
+#include <comphelper/documentconstants.hxx>
 #include <svx/xmleohlp.hxx>
 #include <rtl/logfile.hxx>
 #include <unotools/saveopt.hxx>
@@ -466,9 +471,9 @@ sal_Bool ScXMLImportWrapper::Import(sal_
            xInfoSet->setPropertyValue( sPropName, uno::makeAny( aBaseURL ) );
 
                // TODO/LATER: do not do it for embedded links
+               OUString aName;
            if( SFX_CREATE_MODE_EMBEDDED == pObjSh->GetCreateMode() )
            {
-            OUString aName;
                        if ( pMedium && pMedium->GetItemSet() )
                        {
                                const SfxStringItem* pDocHierarchItem = 
static_cast<const SfxStringItem*>(
@@ -495,6 +500,38 @@ sal_Bool ScXMLImportWrapper::Import(sal_
 
        sal_Bool bOasis = ( SotStorage::GetVersion( xStorage ) > 
SOFFICE_FILEFORMAT_60 );
 
+               if (!bStylesOnly && bOasis)
+               {
+                       // RDF metadata: ODF >= 1.2
+                       try
+                       {
+                               ::comphelper::ComponentContext aContext( 
xServiceFactory );
+                               const uno::Reference< 
rdf::XDocumentMetadataAccess > xDMA(
+                                       xModel, uno::UNO_QUERY_THROW );
+                               const uno::Reference< rdf::XURI > xBaseURI(
+                                       ::sfx2::createBaseURI( 
aContext.getUNOContext(), xStorage, aBaseURL, aName ) );
+                               const uno::Reference< task::XInteractionHandler 
> xHandler(
+                                       
pObjSh->GetMedium()->GetInteractionHandler() );
+                               xDMA->loadMetadataFromStorage( xStorage, 
xBaseURI, xHandler );
+                       }
+                       catch (lang::WrappedTargetException & e)
+                       {
+                               ucb::InteractiveAugmentedIOException iaioe;
+                               if ( e.TargetException >>= iaioe )
+                               {
+                                       nError = SCERR_IMPORT_UNKNOWN;
+                               }
+                               else
+                               {
+                                       nError = SCWARN_IMPORT_FEATURES_LOST;
+                               }
+                       }
+                       catch (uno::Exception &)
+                       {
+                               nError = SCWARN_IMPORT_FEATURES_LOST;
+                       }
+               }
+
         // #i103539#: always read meta.xml for generator
                sal_uInt32 nMetaRetval(0);
         uno::Sequence<uno::Any> aMetaArgs(1);
@@ -917,6 +954,31 @@ sal_Bool ScXMLImportWrapper::Export(sal_
 
         sal_Bool bOasis = ( SotStorage::GetVersion( xStorage ) > 
SOFFICE_FILEFORMAT_60 );
 
+               // RDF metadata: ODF >= 1.2
+               if ( !bStylesOnly && bOasis )
+               {
+                       const uno::Reference< beans::XPropertySet > xPropSet( 
xStorage, uno::UNO_QUERY_THROW );
+                       try
+                       {
+                               ::rtl::OUString aVersion;
+                               if (( xPropSet->getPropertyValue(
+                                       
rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Version"))) >>= aVersion )
+                                       && !aVersion.equals(ODFVER_010_TEXT)
+                                       && !aVersion.equals(ODFVER_011_TEXT) )
+                               {
+                                       const uno::Reference< 
rdf::XDocumentMetadataAccess > xDMA(
+                                               xModel, uno::UNO_QUERY_THROW );
+                                       xDMA->storeMetadataToStorage( xStorage 
);
+                               }
+                       }
+                       catch (beans::UnknownPropertyException &)
+                       {
+                       }
+                       catch (uno::Exception &)
+                       {
+                       }
+               }
+               
                // meta export
                if (!bStylesOnly && !bMetaRet)
                {

Modified: incubator/ooo/trunk/main/sc/source/ui/src/scerrors.src
URL: 
http://svn.apache.org/viewvc/incubator/ooo/trunk/main/sc/source/ui/src/scerrors.src?rev=1348605&r1=1348604&r2=1348605&view=diff
==============================================================================
--- incubator/ooo/trunk/main/sc/source/ui/src/scerrors.src (original)
+++ incubator/ooo/trunk/main/sc/source/ui/src/scerrors.src Sun Jun 10 14:35:59 
2012
@@ -162,5 +162,9 @@ Resource RID_ERRHDLSC
        {
                Text [ en-US ] = "Format error discovered in the file in 
sub-document $(ARG1) at $(ARG2)(row,col).";
        };
+    String SCWARN_IMPORT_FEATURES_LOST & ERRCODE_RES_MASK
+    {
+        Text [ en-US] = "Not all attributes could be read." ;
+    };
 };
 


Reply via email to