xref: /AOO41X/main/dbaccess/source/filter/xml/xmlfilter.cxx (revision 96de54900b79e13b861fbc62cbf36018b54e21b7)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_dbaccess.hxx"
26 
27 #ifndef _COM_SUN_STAR_PACKAGES_ZIP_ZIPIOEXCEPTION_HPP_
28 #include <com/sun/star/packages/zip/ZipIOException.hpp>
29 #endif
30 #ifndef _COM_SUN_STAR_EMBED_ELEMENTMODES_HPP_
31 #include <com/sun/star/embed/ElementModes.hpp>
32 #endif
33 #ifndef _COM_SUN_STAR_SDB_XOFFICEDATABASEDOCUMENT_HPP_
34 #include <com/sun/star/sdb/XOfficeDatabaseDocument.hpp>
35 #endif
36 #ifndef DBA_XMLFILTER_HXX
37 #include "xmlfilter.hxx"
38 #endif
39 #ifndef _FLT_REGHELPER_HXX_
40 #include "flt_reghelper.hxx"
41 #endif
42 #ifndef _SV_SVAPP_HXX
43 #include <vcl/svapp.hxx>
44 #endif
45 #ifndef _SV_WINDOW_HXX
46 #include <vcl/window.hxx>
47 #endif
48 #ifndef _XMLOFF_XMLNMSPE_HXX
49 #include <xmloff/xmlnmspe.hxx>
50 #endif
51 #ifndef _XMLOFF_XMLSCRIPTI_HXX
52 #include <xmloff/xmlscripti.hxx>
53 #endif
54 #ifndef _XMLOFF_XMLTOKEN_HXX
55 #include <xmloff/xmltoken.hxx>
56 #endif
57 #ifndef _XMLOFF_TEXTIMP_HXX_
58 #include <xmloff/txtimp.hxx>
59 #endif
60 #ifndef _XMLOFF_NMSPMAP_HXX
61 #include <xmloff/nmspmap.hxx>
62 #endif
63 #ifndef _RTL_LOGFILE_HXX_
64 #include <rtl/logfile.hxx>
65 #endif
66 #ifndef _COM_SUN_STAR_XML_SAX_INPUTSOURCE_HPP_
67 #include <com/sun/star/xml/sax/InputSource.hpp>
68 #endif
69 #ifndef _COM_SUN_STAR_XML_SAX_XPARSER_HPP_
70 #include <com/sun/star/xml/sax/XParser.hpp>
71 #endif
72 #ifndef _XMLOFF_PROGRESSBARHELPER_HXX
73 #include <xmloff/ProgressBarHelper.hxx>
74 #endif
75 #ifndef _SFXDOCFILE_HXX //autogen wg. SfxMedium
76 #include <sfx2/docfile.hxx>
77 #endif
78 #ifndef _COM_SUN_STAR_IO_XINPUTSTREAM_HPP_
79 #include <com/sun/star/io/XInputStream.hpp>
80 #endif
81 #ifndef _COM_SUN_STAR_UNO_XNAMINGSERVICE_HPP_
82 #include <com/sun/star/uno/XNamingService.hpp>
83 #endif
84 #ifndef DBA_XMLDATABASE_HXX
85 #include "xmlDatabase.hxx"
86 #endif
87 #ifndef DBA_XMLENUMS_HXX
88 #include "xmlEnums.hxx"
89 #endif
90 #ifndef _URLOBJ_HXX //autogen wg. INetURLObject
91 #include <tools/urlobj.hxx>
92 #endif
93 #ifndef DBACCESS_SHARED_XMLSTRINGS_HRC
94 #include "xmlstrings.hrc"
95 #endif
96 #ifndef _XMLOFF_DOCUMENTSETTINGSCONTEXT_HXX
97 #include <xmloff/DocumentSettingsContext.hxx>
98 #endif
99 #ifndef DBA_XMLSTYLEIMPORT_HXX
100 #include "xmlStyleImport.hxx"
101 #endif
102 #ifndef _XMLOFF_XMLUCONV_HXX
103 #include <xmloff/xmluconv.hxx>
104 #endif
105 #ifndef DBA_XMLHELPER_HXX
106 #include "xmlHelper.hxx"
107 #endif
108 #ifndef _COM_SUN_STAR_UTIL_XMODIFIABLE_HPP_
109 #include <com/sun/star/util/XModifiable.hpp>
110 #endif
111 #include <com/sun/star/frame/XComponentLoader.hpp>
112 #include <com/sun/star/frame/FrameSearchFlag.hpp>
113 #include <com/sun/star/lang/WrappedTargetRuntimeException.hpp>
114 #ifndef _SV_SVAPP_HXX //autogen
115 #include <vcl/svapp.hxx>
116 #endif
117 #ifndef _VOS_MUTEX_HXX_
118 #include <vos/mutex.hxx>
119 #endif
120 #include <svtools/sfxecode.hxx>
121 #include <unotools/moduleoptions.hxx>
122 #ifndef _TOOLKIT_HELPER_VCLUNOHELPER_HXX_
123 #include <toolkit/helper/vclunohelper.hxx>
124 #endif
125 #include <tools/diagnose_ex.h>
126 #include <comphelper/namedvaluecollection.hxx>
127 #include <comphelper/mimeconfighelper.hxx>
128 #include <comphelper/documentconstants.hxx>
129 #include <comphelper/uno3.hxx>
130 #include <cppuhelper/exc_hlp.hxx>
131 #include <osl/thread.hxx>
132 #include <connectivity/CommonTools.hxx>
133 #include <connectivity/DriversConfig.hxx>
134 #include "dsntypes.hxx"
135 
136 using namespace ::com::sun::star;
137 
createRegistryInfo_ODBFilter()138 extern "C" void SAL_CALL createRegistryInfo_ODBFilter( )
139 {
140     static ::dbaxml::OMultiInstanceAutoRegistration< ::dbaxml::ODBFilter > aAutoRegistration;
141 }
142 //--------------------------------------------------------------------------
143 namespace dbaxml
144 {
145     namespace
146     {
147         class FastLoader : public ::osl::Thread
148         {
149         public:
150             typedef enum { E_JAVA, E_CALC } StartType;
FastLoader(uno::Reference<lang::XMultiServiceFactory> const & _xFactory,StartType _eType)151             FastLoader(uno::Reference< lang::XMultiServiceFactory > const & _xFactory,StartType _eType)
152                 :m_xFactory(_xFactory)
153                 ,m_eWhat(_eType)
154             {}
155 
156         protected:
~FastLoader()157             virtual ~FastLoader(){}
158 
159             /// Working method which should be overridden.
160             virtual void SAL_CALL run();
161             virtual void SAL_CALL onTerminated();
162         private:
163             uno::Reference< lang::XMultiServiceFactory > m_xFactory;
164             StartType m_eWhat;
165         };
166 
run()167         void SAL_CALL FastLoader::run()
168         {
169             if ( m_eWhat == E_JAVA )
170             {
171                 static bool s_bFirstTime = true;
172                 if ( s_bFirstTime )
173                 {
174                     s_bFirstTime = false;
175                     try
176                     {
177                         ::rtl::Reference< jvmaccess::VirtualMachine > xJVM = ::connectivity::getJavaVM(m_xFactory);
178                     }
179                     catch(uno::Exception& ex)
180                     {
181                         (void)ex;
182                         OSL_ASSERT(0);
183                     }
184                 } // if ( s_bFirstTime )
185             } // if ( m_eWhat == E_JAVA )
186             else if ( m_eWhat == E_CALC )
187             {
188                 static bool s_bFirstTime = true;
189                 if ( s_bFirstTime )
190                 {
191                     s_bFirstTime = false;
192                     try
193                     {
194                         uno::Reference<frame::XComponentLoader> xFrameLoad( m_xFactory->createInstance(
195                                                                     ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.frame.Desktop")))
196                                                                     ,uno::UNO_QUERY);
197                         const ::rtl::OUString sTarget(RTL_CONSTASCII_USTRINGPARAM("_blank"));
198                         sal_Int32 nFrameSearchFlag = frame::FrameSearchFlag::TASKS | frame::FrameSearchFlag::CREATE;
199                         uno::Reference< frame::XFrame> xFrame = uno::Reference< frame::XFrame>(xFrameLoad,uno::UNO_QUERY_THROW)->findFrame(sTarget,nFrameSearchFlag);
200                         xFrameLoad.set( xFrame,uno::UNO_QUERY);
201 
202                         if ( xFrameLoad.is() )
203                         {
204                             uno::Sequence < beans::PropertyValue > aArgs( 3);
205                             sal_Int32 nLen = 0;
206                             aArgs[nLen].Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("AsTemplate"));
207                             aArgs[nLen++].Value <<= sal_False;
208 
209                             aArgs[nLen].Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ReadOnly"));
210                             aArgs[nLen++].Value <<= sal_True;
211 
212                             aArgs[nLen].Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Hidden"));
213                             aArgs[nLen++].Value <<= sal_True;
214 
215                             ::comphelper::MimeConfigurationHelper aHelper(m_xFactory);
216                             SvtModuleOptions aModuleOptions;
217                             uno::Reference< frame::XModel > xModel(xFrameLoad->loadComponentFromURL(
218                                 aModuleOptions.GetFactoryEmptyDocumentURL( aModuleOptions.ClassifyFactoryByServiceName( aHelper.GetDocServiceNameFromMediaType(MIMETYPE_OASIS_OPENDOCUMENT_SPREADSHEET) )),
219                                 ::rtl::OUString(), // empty frame name
220                                 0,
221                                 aArgs
222                                 ),uno::UNO_QUERY);
223                             ::comphelper::disposeComponent(xModel);
224                         }
225                     }
226                     catch(uno::Exception& ex)
227                     {
228                         (void)ex;
229                         OSL_ASSERT(0);
230                     }
231                 }
232             }
233         }
onTerminated()234         void SAL_CALL FastLoader::onTerminated()
235         {
236             delete this;
237         }
238 
239         class DatasourceURLListener : public ::cppu::WeakImplHelper1< beans::XPropertyChangeListener >
240         {
241             uno::Reference< lang::XMultiServiceFactory > m_xFactory;
242             ::dbaccess::ODsnTypeCollection m_aTypeCollection;
243             DatasourceURLListener(const DatasourceURLListener&);
244             void operator =(const DatasourceURLListener&);
245         protected:
~DatasourceURLListener()246             virtual ~DatasourceURLListener(){}
247         public:
DatasourceURLListener(uno::Reference<lang::XMultiServiceFactory> const & _xFactory)248             DatasourceURLListener(uno::Reference< lang::XMultiServiceFactory > const & _xFactory) : m_xFactory(_xFactory),m_aTypeCollection(_xFactory){}
249             // XPropertyChangeListener
propertyChange(const beans::PropertyChangeEvent & _rEvent)250             virtual void SAL_CALL propertyChange( const beans::PropertyChangeEvent& _rEvent ) throw (uno::RuntimeException)
251             {
252                 ::rtl::OUString sURL;
253                 _rEvent.NewValue >>= sURL;
254                 FastLoader* pCreatorThread = NULL;
255 
256                 if ( m_aTypeCollection.needsJVM(sURL) )
257                 {
258                     pCreatorThread = new FastLoader(m_xFactory,FastLoader::E_JAVA);
259                 } // if ( m_aTypeCollection.needsJVM(sURL) )
260                 else if ( sURL.matchIgnoreAsciiCaseAsciiL("sdbc:calc:",10,0) )
261                 {
262                     pCreatorThread = new FastLoader(m_xFactory,FastLoader::E_CALC);
263                 }
264                 if ( pCreatorThread )
265                 {
266                     pCreatorThread->createSuspended();
267                     pCreatorThread->setPriority(osl_Thread_PriorityBelowNormal);
268                     pCreatorThread->resume();
269                 }
270             }
271             // XEventListener
disposing(const lang::EventObject &)272             virtual void SAL_CALL disposing( const lang::EventObject& /*_rSource*/ ) throw (uno::RuntimeException)
273             {
274             }
275         };
276     }
277     sal_Char __READONLY_DATA sXML_np__db[] = "_db";
278     sal_Char __READONLY_DATA sXML_np___db[] = "__db";
279 
280     using namespace ::com::sun::star::util;
281     /// read a component (file + filter version)
ReadThroughComponent(const uno::Reference<XInputStream> & xInputStream,const uno::Reference<XComponent> & xModelComponent,const uno::Reference<XMultiServiceFactory> & rFactory,const uno::Reference<XDocumentHandler> & _xFilter)282 sal_Int32 ReadThroughComponent(
283     const uno::Reference<XInputStream>& xInputStream,
284     const uno::Reference<XComponent>& xModelComponent,
285     const uno::Reference<XMultiServiceFactory> & rFactory,
286     const uno::Reference< XDocumentHandler >& _xFilter )
287 {
288     DBG_ASSERT(xInputStream.is(), "input stream missing");
289     DBG_ASSERT(xModelComponent.is(), "document missing");
290     DBG_ASSERT(rFactory.is(), "factory missing");
291 
292     RTL_LOGFILE_CONTEXT_AUTHOR( aLog, "dbaxml", "oj", "ReadThroughComponent" );
293 
294     // prepare ParserInputSrouce
295     InputSource aParserInput;
296     aParserInput.aInputStream = xInputStream;
297 
298     // get parser
299     uno::Reference< XParser > xParser(
300         rFactory->createInstance(
301         ::rtl::OUString::createFromAscii("com.sun.star.xml.sax.Parser") ),
302         UNO_QUERY );
303     DBG_ASSERT( xParser.is(), "Can't create parser" );
304     if( !xParser.is() )
305         return 1;
306     RTL_LOGFILE_CONTEXT_TRACE( aLog, "parser created" );
307 
308     // get filter
309     DBG_ASSERT( _xFilter.is(), "Can't instantiate filter component." );
310     if( !_xFilter.is() )
311         return 1;
312 
313     // connect parser and filter
314     xParser->setDocumentHandler( _xFilter );
315 
316     // connect model and filter
317     uno::Reference < XImporter > xImporter( _xFilter, UNO_QUERY );
318     xImporter->setTargetDocument( xModelComponent );
319 
320 
321 
322     // finally, parser the stream
323     try
324     {
325         xParser->parseStream( aParserInput );
326     }
327 #if OSL_DEBUG_LEVEL > 1
328     catch( SAXParseException& r )
329     {
330         ByteString aError( "SAX parse exception catched while importing:\n" );
331         aError += ByteString( String( r.Message), RTL_TEXTENCODING_ASCII_US );
332         aError += ByteString::CreateFromInt32( r.LineNumber );
333         aError += ',';
334         aError += ByteString::CreateFromInt32( r.ColumnNumber );
335 
336         DBG_ERROR( aError.GetBuffer() );
337         return 1;
338     }
339 #else
340     catch( SAXParseException& )
341     {
342         return 1;
343     }
344 #endif
345     catch( SAXException& )
346     {
347         return 1;
348     }
349     catch( packages::zip::ZipIOException& )
350     {
351         return ERRCODE_IO_BROKENPACKAGE;
352     }
353     catch( Exception& )
354     {
355         DBG_UNHANDLED_EXCEPTION();
356     }
357 
358     // success!
359     return 0;
360 }
361 
362 /// read a component (storage version)
ReadThroughComponent(uno::Reference<embed::XStorage> xStorage,const uno::Reference<XComponent> & xModelComponent,const sal_Char * pStreamName,const sal_Char * pCompatibilityStreamName,const uno::Reference<XMultiServiceFactory> & rFactory,const uno::Reference<XDocumentHandler> & _xFilter)363 sal_Int32 ReadThroughComponent(
364     uno::Reference< embed::XStorage > xStorage,
365     const uno::Reference<XComponent>& xModelComponent,
366     const sal_Char* pStreamName,
367     const sal_Char* pCompatibilityStreamName,
368     const uno::Reference<XMultiServiceFactory> & rFactory,
369     const uno::Reference< XDocumentHandler >& _xFilter)
370 {
371     DBG_ASSERT( xStorage.is(), "Need storage!");
372     DBG_ASSERT(NULL != pStreamName, "Please, please, give me a name!");
373 
374     if ( xStorage.is() )
375     {
376         uno::Reference< io::XStream > xDocStream;
377         sal_Bool bEncrypted = sal_False;
378 
379         try
380         {
381             // open stream (and set parser input)
382         ::rtl::OUString sStreamName = ::rtl::OUString::createFromAscii(pStreamName);
383             if ( !xStorage->hasByName( sStreamName ) || !xStorage->isStreamElement( sStreamName ) )
384             {
385                 // stream name not found! Then try the compatibility name.
386                 // if no stream can be opened, return immediatly with OK signal
387 
388                 // do we even have an alternative name?
389                 if ( NULL == pCompatibilityStreamName )
390                     return 0;
391 
392                 // if so, does the stream exist?
393                 sStreamName = ::rtl::OUString::createFromAscii(pCompatibilityStreamName);
394                 if ( !xStorage->hasByName( sStreamName ) || !xStorage->isStreamElement( sStreamName ) )
395                     return 0;
396             }
397 
398             // get input stream
399             xDocStream = xStorage->openStreamElement( sStreamName, embed::ElementModes::READ );
400 
401             uno::Reference< beans::XPropertySet > xProps( xDocStream, uno::UNO_QUERY_THROW );
402             uno::Any aAny = xProps->getPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Encrypted") ) );
403             aAny >>= bEncrypted;
404         }
405         catch( packages::WrongPasswordException& )
406         {
407             return ERRCODE_SFX_WRONGPASSWORD;
408         }
409         catch ( uno::Exception& )
410         {
411             return 1; // TODO/LATER: error handling
412         }
413 
414 #ifdef TIMELOG
415         // if we do profiling, we want to know the stream
416         RTL_LOGFILE_TRACE_AUTHOR1( "dbaxml", "oj",
417                                "ReadThroughComponent : parsing \"%s\"", pStreamName );
418 #endif
419 
420         uno::Reference< XInputStream > xInputStream = xDocStream->getInputStream();
421         // read from the stream
422         return ReadThroughComponent( xInputStream
423                                     ,xModelComponent
424                                     ,rFactory
425                                     ,_xFilter );
426     }
427 
428     // TODO/LATER: better error handling
429     return 1;
430 }
431 
432 // -------------
433 // - ODBFilter -
434 // -------------
DBG_NAME(ODBFilter)435 DBG_NAME(ODBFilter)
436 
437 ODBFilter::ODBFilter( const uno::Reference< XMultiServiceFactory >& _rxMSF )
438     :SvXMLImport(_rxMSF)
439     ,m_bNewFormat(false)
440 {
441     DBG_CTOR(ODBFilter,NULL);
442 
443     GetMM100UnitConverter().setCoreMeasureUnit(MAP_10TH_MM);
444     GetMM100UnitConverter().setXMLMeasureUnit(MAP_CM);
445     GetNamespaceMap().Add( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( sXML_np__db) ),
446                         GetXMLToken(XML_N_DB),
447                         XML_NAMESPACE_DB );
448 
449     GetNamespaceMap().Add( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( sXML_np___db) ),
450                         GetXMLToken(XML_N_DB_OASIS),
451                         XML_NAMESPACE_DB );
452 }
453 
454 // -----------------------------------------------------------------------------
455 
~ODBFilter()456 ODBFilter::~ODBFilter() throw()
457 {
458 
459     DBG_DTOR(ODBFilter,NULL);
460 }
461 // -----------------------------------------------------------------------------
462 IMPLEMENT_SERVICE_INFO1_STATIC( ODBFilter, "com.sun.star.comp.sdb.DBFilter", "com.sun.star.document.ImportFilter")
463 // -----------------------------------------------------------------------------
filter(const Sequence<PropertyValue> & rDescriptor)464 sal_Bool SAL_CALL ODBFilter::filter( const Sequence< PropertyValue >& rDescriptor )
465     throw (RuntimeException)
466 {
467     uno::Reference< ::com::sun::star::awt::XWindow > xWindow;
468     {
469         ::vos::OGuard aGuard(Application::GetSolarMutex());
470         Window*     pFocusWindow = Application::GetFocusWindow();
471         xWindow = VCLUnoHelper::GetInterface( pFocusWindow );
472         if( pFocusWindow )
473             pFocusWindow->EnterWait();
474     }
475     sal_Bool    bRet = sal_False;
476 
477     if ( GetModel().is() )
478         bRet = implImport( rDescriptor );
479 
480     if ( xWindow.is() )
481     {
482         ::vos::OGuard aGuard(Application::GetSolarMutex());
483         Window* pFocusWindow = VCLUnoHelper::GetWindow( xWindow );
484         if ( pFocusWindow )
485             pFocusWindow->LeaveWait();
486     }
487 
488 
489     return bRet;
490 }
491 // -----------------------------------------------------------------------------
implImport(const Sequence<PropertyValue> & rDescriptor)492 sal_Bool ODBFilter::implImport( const Sequence< PropertyValue >& rDescriptor )
493     throw (RuntimeException)
494 {
495     ::rtl::OUString sFileName;
496     ::comphelper::NamedValueCollection aMediaDescriptor( rDescriptor );
497     if ( aMediaDescriptor.has( "URL" ) )
498         sFileName = aMediaDescriptor.getOrDefault( "URL", ::rtl::OUString() );
499     if ( !sFileName.getLength() && aMediaDescriptor.has( "FileName" ) )
500         sFileName = aMediaDescriptor.getOrDefault( "FileName", sFileName );
501 
502     OSL_ENSURE( sFileName.getLength(), "ODBFilter::implImport: no URL given!" );
503     sal_Bool bRet = ( sFileName.getLength() != 0 );
504 
505     if ( bRet )
506     {
507         uno::Reference<XComponent> xCom(GetModel(),UNO_QUERY);
508 
509         SfxMediumRef pMedium = new SfxMedium(
510                 sFileName, ( STREAM_READ | STREAM_NOCREATE ), sal_False, 0 );
511         uno::Reference< embed::XStorage > xStorage;
512         try
513         {
514             xStorage.set( pMedium->GetStorage( sal_False ), UNO_QUERY_THROW );
515         }
516         catch( const Exception& )
517         {
518             Any aError = ::cppu::getCaughtException();
519             if  ( aError.isExtractableTo( ::cppu::UnoType< RuntimeException >::get() ) )
520                 throw;
521             throw lang::WrappedTargetRuntimeException( ::rtl::OUString(), *this, aError );
522         }
523 
524         uno::Reference<sdb::XOfficeDatabaseDocument> xOfficeDoc(GetModel(),UNO_QUERY_THROW);
525         m_xDataSource.set(xOfficeDoc->getDataSource(),UNO_QUERY_THROW);
526         uno::Reference<beans::XPropertyChangeListener> xListener = new DatasourceURLListener(getServiceFactory());
527         m_xDataSource->addPropertyChangeListener(PROPERTY_URL,xListener);
528         uno::Reference< XNumberFormatsSupplier > xNum(m_xDataSource->getPropertyValue(PROPERTY_NUMBERFORMATSSUPPLIER),UNO_QUERY);
529         SetNumberFormatsSupplier(xNum);
530 
531         uno::Reference<XComponent> xModel(GetModel(),UNO_QUERY);
532         sal_Int32 nRet = ReadThroughComponent( xStorage
533                                     ,xModel
534                                     ,"settings.xml"
535                                     ,"Settings.xml"
536                                     ,getServiceFactory()
537                                     ,this
538                                     );
539 
540         if ( nRet == 0 )
541             nRet = ReadThroughComponent( xStorage
542                                     ,xModel
543                                     ,"content.xml"
544                                     ,"Content.xml"
545                                     ,getServiceFactory()
546                                     ,this
547                                     );
548 
549         bRet = nRet == 0;
550 
551         if ( bRet )
552         {
553             uno::Reference< XModifiable > xModi(GetModel(),UNO_QUERY);
554             if ( xModi.is() )
555                 xModi->setModified(sal_False);
556         }
557         else
558         {
559             switch( nRet )
560             {
561                 case ERRCODE_IO_BROKENPACKAGE:
562                     // TODO/LATER: no way to transport the error outside from the filter!
563                     break;
564                 default:
565                 {
566                     // TODO/LATER: this is completely wrong! Filter code should never call ErrorHandler directly! But for now this is the only way!
567                     ErrorHandler::HandleError( nRet );
568                     if( nRet & ERRCODE_WARNING_MASK )
569                         bRet = sal_True;
570                 }
571             }
572         }
573     }
574 
575     return bRet;
576 }
577 // -----------------------------------------------------------------------------
CreateContext(sal_uInt16 nPrefix,const::rtl::OUString & rLocalName,const uno::Reference<::com::sun::star::xml::sax::XAttributeList> & xAttrList)578 SvXMLImportContext* ODBFilter::CreateContext( sal_uInt16 nPrefix,
579                                       const ::rtl::OUString& rLocalName,
580                                       const uno::Reference< ::com::sun::star::xml::sax::XAttributeList >& xAttrList )
581 {
582     SvXMLImportContext *pContext = 0;
583 
584     const SvXMLTokenMap& rTokenMap = GetDocElemTokenMap();
585     switch( rTokenMap.Get( nPrefix, rLocalName ) )
586     {
587         case XML_TOK_DOC_SETTINGS:
588             GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP );
589             pContext = new XMLDocumentSettingsContext( *this, nPrefix, rLocalName,xAttrList );
590             break;
591         case XML_TOK_DOC_DATABASE:
592             GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP );
593             pContext = new OXMLDatabase( *this, nPrefix, rLocalName );
594             break;
595         case XML_TOK_DOC_STYLES:
596             GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP );
597             pContext = CreateStylesContext(nPrefix, rLocalName, xAttrList, sal_False);
598             break;
599         case XML_TOK_DOC_AUTOSTYLES:
600             GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP );
601             pContext = CreateStylesContext(nPrefix, rLocalName, xAttrList, sal_True);
602             break;
603         case XML_TOK_DOC_SCRIPT:
604             pContext = CreateScriptContext( rLocalName );
605             break;
606     }
607 
608     if ( !pContext )
609         pContext = SvXMLImport::CreateContext( nPrefix, rLocalName, xAttrList );
610 
611     return pContext;
612 }
613 // -----------------------------------------------------------------------------
SetViewSettings(const Sequence<PropertyValue> & aViewProps)614 void ODBFilter::SetViewSettings(const Sequence<PropertyValue>& aViewProps)
615 {
616     const PropertyValue *pIter = aViewProps.getConstArray();
617     const PropertyValue *pEnd = pIter + aViewProps.getLength();
618     for (; pIter != pEnd; ++pIter)
619     {
620         if ( pIter->Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM ( "Queries" ) ) )
621         {
622             fillPropertyMap(pIter->Value,m_aQuerySettings);
623         }
624         else if ( pIter->Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM ( "Tables" ) ) )
625         {
626             fillPropertyMap(pIter->Value,m_aTablesSettings);
627         }
628     }
629 }
630 // -----------------------------------------------------------------------------
SetConfigurationSettings(const Sequence<PropertyValue> & aConfigProps)631 void ODBFilter::SetConfigurationSettings(const Sequence<PropertyValue>& aConfigProps)
632 {
633     const PropertyValue *pIter = aConfigProps.getConstArray();
634     const PropertyValue *pEnd = pIter + aConfigProps.getLength();
635     for (; pIter != pEnd; ++pIter)
636     {
637         if ( pIter->Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM ( "layout-settings" ) ) )
638         {
639             Sequence<PropertyValue> aWindows;
640             pIter->Value >>= aWindows;
641             uno::Reference<XPropertySet> xProp(getDataSource());
642             if ( xProp.is() )
643                 xProp->setPropertyValue(PROPERTY_LAYOUTINFORMATION,makeAny(aWindows));
644         }
645     }
646 }
647 // -----------------------------------------------------------------------------
fillPropertyMap(const Any & _rValue,TPropertyNameMap & _rMap)648 void ODBFilter::fillPropertyMap(const Any& _rValue,TPropertyNameMap& _rMap)
649 {
650     Sequence<PropertyValue> aWindows;
651     _rValue >>= aWindows;
652     const PropertyValue *pIter = aWindows.getConstArray();
653     const PropertyValue *pEnd = pIter + aWindows.getLength();
654     for (; pIter != pEnd; ++pIter)
655     {
656         Sequence<PropertyValue> aValue;
657         pIter->Value >>= aValue;
658         _rMap.insert(TPropertyNameMap::value_type(pIter->Name,aValue));
659     }
660 
661 }
662 // -----------------------------------------------------------------------------
GetDocElemTokenMap() const663 const SvXMLTokenMap& ODBFilter::GetDocElemTokenMap() const
664 {
665     if ( !m_pDocElemTokenMap.get() )
666     {
667         static __FAR_DATA SvXMLTokenMapEntry aElemTokenMap[]=
668         {
669             { XML_NAMESPACE_OFFICE, XML_SETTINGS,           XML_TOK_DOC_SETTINGS    },
670             { XML_NAMESPACE_OOO,    XML_SETTINGS,           XML_TOK_DOC_SETTINGS    },
671             { XML_NAMESPACE_OFFICE, XML_STYLES,             XML_TOK_DOC_STYLES      },
672             { XML_NAMESPACE_OOO,    XML_STYLES,             XML_TOK_DOC_STYLES      },
673             { XML_NAMESPACE_OFFICE, XML_AUTOMATIC_STYLES,   XML_TOK_DOC_AUTOSTYLES  },
674             { XML_NAMESPACE_OOO,    XML_AUTOMATIC_STYLES,   XML_TOK_DOC_AUTOSTYLES  },
675             { XML_NAMESPACE_OFFICE, XML_DATABASE,           XML_TOK_DOC_DATABASE    },
676             { XML_NAMESPACE_OOO,    XML_DATABASE,           XML_TOK_DOC_DATABASE    },
677             { XML_NAMESPACE_OFFICE, XML_SCRIPTS,            XML_TOK_DOC_SCRIPT      },
678             XML_TOKEN_MAP_END
679         };
680         m_pDocElemTokenMap.reset(new SvXMLTokenMap( aElemTokenMap ));
681     }
682     return *m_pDocElemTokenMap;
683 }
684 // -----------------------------------------------------------------------------
GetDatabaseElemTokenMap() const685 const SvXMLTokenMap& ODBFilter::GetDatabaseElemTokenMap() const
686 {
687     if ( !m_pDatabaseElemTokenMap.get() )
688     {
689         static __FAR_DATA SvXMLTokenMapEntry aElemTokenMap[]=
690         {
691             { XML_NAMESPACE_DB, XML_DATASOURCE,             XML_TOK_DATASOURCE  },
692             { XML_NAMESPACE_DB, XML_FORMS,                  XML_TOK_FORMS},
693             { XML_NAMESPACE_DB, XML_REPORTS,                XML_TOK_REPORTS},
694             { XML_NAMESPACE_DB, XML_QUERIES,                XML_TOK_QUERIES},
695             { XML_NAMESPACE_DB, XML_TABLES,                 XML_TOK_TABLES},
696             { XML_NAMESPACE_DB, XML_TABLE_REPRESENTATIONS,  XML_TOK_TABLES},
697             { XML_NAMESPACE_DB, XML_SCHEMA_DEFINITION,      XML_TOK_SCHEMA_DEFINITION},
698             XML_TOKEN_MAP_END
699         };
700         m_pDatabaseElemTokenMap.reset(new SvXMLTokenMap( aElemTokenMap ));
701     }
702     return *m_pDatabaseElemTokenMap;
703 }
704 // -----------------------------------------------------------------------------
GetDataSourceElemTokenMap() const705 const SvXMLTokenMap& ODBFilter::GetDataSourceElemTokenMap() const
706 {
707     if ( !m_pDataSourceElemTokenMap.get() )
708     {
709         static __FAR_DATA SvXMLTokenMapEntry aElemTokenMap[]=
710         {
711             { XML_NAMESPACE_DB,     XML_CONNECTION_RESOURCE,            XML_TOK_CONNECTION_RESOURCE},
712             { XML_NAMESPACE_DB,     XML_SUPPRESS_VERSION_COLUMNS,       XML_TOK_SUPPRESS_VERSION_COLUMNS},
713             { XML_NAMESPACE_DB,     XML_JAVA_DRIVER_CLASS,              XML_TOK_JAVA_DRIVER_CLASS},
714             { XML_NAMESPACE_DB,     XML_EXTENSION,                      XML_TOK_EXTENSION},
715             { XML_NAMESPACE_DB,     XML_IS_FIRST_ROW_HEADER_LINE,       XML_TOK_IS_FIRST_ROW_HEADER_LINE},
716             { XML_NAMESPACE_DB,     XML_SHOW_DELETED,                   XML_TOK_SHOW_DELETED},
717             { XML_NAMESPACE_DB,     XML_IS_TABLE_NAME_LENGTH_LIMITED,   XML_TOK_IS_TABLE_NAME_LENGTH_LIMITED},
718             { XML_NAMESPACE_DB,     XML_SYSTEM_DRIVER_SETTINGS,         XML_TOK_SYSTEM_DRIVER_SETTINGS},
719             { XML_NAMESPACE_DB,     XML_ENABLE_SQL92_CHECK,             XML_TOK_ENABLE_SQL92_CHECK},
720             { XML_NAMESPACE_DB,     XML_APPEND_TABLE_ALIAS_NAME,        XML_TOK_APPEND_TABLE_ALIAS_NAME},
721             { XML_NAMESPACE_DB,     XML_PARAMETER_NAME_SUBSTITUTION,    XML_TOK_PARAMETER_NAME_SUBSTITUTION},
722             { XML_NAMESPACE_DB,     XML_IGNORE_DRIVER_PRIVILEGES,       XML_TOK_IGNORE_DRIVER_PRIVILEGES},
723             { XML_NAMESPACE_DB,     XML_BOOLEAN_COMPARISON_MODE,        XML_TOK_BOOLEAN_COMPARISON_MODE},
724             { XML_NAMESPACE_DB,     XML_USE_CATALOG,                    XML_TOK_USE_CATALOG},
725             { XML_NAMESPACE_DB,     XML_BASE_DN,                        XML_TOK_BASE_DN},
726             { XML_NAMESPACE_DB,     XML_MAX_ROW_COUNT,                  XML_TOK_MAX_ROW_COUNT},
727             { XML_NAMESPACE_DB,     XML_LOGIN,                          XML_TOK_LOGIN},
728             { XML_NAMESPACE_DB,     XML_TABLE_FILTER,                   XML_TOK_TABLE_FILTER},
729             { XML_NAMESPACE_DB,     XML_TABLE_TYPE_FILTER,              XML_TOK_TABLE_TYPE_FILTER},
730             { XML_NAMESPACE_DB,     XML_AUTO_INCREMENT,                 XML_TOK_AUTO_INCREMENT},
731             { XML_NAMESPACE_DB,     XML_DELIMITER,                      XML_TOK_DELIMITER},
732             { XML_NAMESPACE_DB,     XML_DATA_SOURCE_SETTINGS,           XML_TOK_DATA_SOURCE_SETTINGS},
733             { XML_NAMESPACE_DB,     XML_FONT_CHARSET,                   XML_TOK_FONT_CHARSET},
734             // db odf 12
735             { XML_NAMESPACE_DB,     XML_CONNECTION_DATA,                XML_TOK_CONNECTION_DATA},
736             { XML_NAMESPACE_DB,     XML_DATABASE_DESCRIPTION,           XML_TOK_DATABASE_DESCRIPTION},
737             { XML_NAMESPACE_DB,     XML_COMPOUND_DATABASE,              XML_TOK_COMPOUND_DATABASE},
738             { XML_NAMESPACE_XLINK,  XML_HREF,                           XML_TOK_DB_HREF},
739             { XML_NAMESPACE_DB,     XML_MEDIA_TYPE,                     XML_TOK_MEDIA_TYPE},
740             { XML_NAMESPACE_DB,     XML_TYPE,                           XML_TOK_DB_TYPE},
741             { XML_NAMESPACE_DB,     XML_HOSTNAME,                       XML_TOK_HOSTNAME},
742             { XML_NAMESPACE_DB,     XML_PORT,                           XML_TOK_PORT},
743             { XML_NAMESPACE_DB,     XML_LOCAL_SOCKET,                   XML_TOK_LOCAL_SOCKET},
744             { XML_NAMESPACE_DB,     XML_DATABASE_NAME,                  XML_TOK_DATABASE_NAME},
745             { XML_NAMESPACE_DB,     XML_DRIVER_SETTINGS,                XML_TOK_DRIVER_SETTINGS},
746             { XML_NAMESPACE_DB,     XML_JAVA_CLASSPATH,                 XML_TOK_JAVA_CLASSPATH},
747             { XML_NAMESPACE_DB,     XML_CHARACTER_SET,                  XML_TOK_CHARACTER_SET},
748             { XML_NAMESPACE_DB,     XML_APPLICATION_CONNECTION_SETTINGS,XML_TOK_APPLICATION_CONNECTION_SETTINGS},
749             XML_TOKEN_MAP_END
750         };
751         m_pDataSourceElemTokenMap.reset(new SvXMLTokenMap( aElemTokenMap ));
752     }
753     return *m_pDataSourceElemTokenMap;
754 }
755 // -----------------------------------------------------------------------------
GetLoginElemTokenMap() const756 const SvXMLTokenMap& ODBFilter::GetLoginElemTokenMap() const
757 {
758     if ( !m_pLoginElemTokenMap.get() )
759     {
760         static __FAR_DATA SvXMLTokenMapEntry aElemTokenMap[]=
761         {
762             { XML_NAMESPACE_DB, XML_USER_NAME,              XML_TOK_USER_NAME},
763             { XML_NAMESPACE_DB, XML_IS_PASSWORD_REQUIRED,   XML_TOK_IS_PASSWORD_REQUIRED},
764             { XML_NAMESPACE_DB, XML_USE_SYSTEM_USER,        XML_TOK_USE_SYSTEM_USER},
765             { XML_NAMESPACE_DB, XML_LOGIN_TIMEOUT,          XML_TOK_LOGIN_TIMEOUT},
766             XML_TOKEN_MAP_END
767         };
768         m_pLoginElemTokenMap.reset(new SvXMLTokenMap( aElemTokenMap ));
769     }
770     return *m_pLoginElemTokenMap;
771 }
772 // -----------------------------------------------------------------------------
GetDatabaseDescriptionElemTokenMap() const773 const SvXMLTokenMap& ODBFilter::GetDatabaseDescriptionElemTokenMap() const
774 {
775     if ( !m_pDatabaseDescriptionElemTokenMap.get() )
776     {
777         static __FAR_DATA SvXMLTokenMapEntry aElemTokenMap[]=
778         {
779             { XML_NAMESPACE_DB, XML_FILE_BASED_DATABASE,    XML_TOK_FILE_BASED_DATABASE},
780             { XML_NAMESPACE_DB, XML_SERVER_DATABASE,        XML_TOK_SERVER_DATABASE},
781             XML_TOKEN_MAP_END
782         };
783         m_pDatabaseDescriptionElemTokenMap.reset(new SvXMLTokenMap( aElemTokenMap ));
784     }
785     return *m_pDatabaseDescriptionElemTokenMap;
786 }
787 // -----------------------------------------------------------------------------
GetDataSourceInfoElemTokenMap() const788 const SvXMLTokenMap& ODBFilter::GetDataSourceInfoElemTokenMap() const
789 {
790     if ( !m_pDataSourceInfoElemTokenMap.get() )
791     {
792         static __FAR_DATA SvXMLTokenMapEntry aElemTokenMap[]=
793         {
794             { XML_NAMESPACE_DB, XML_ADDITIONAL_COLUMN_STATEMENT,XML_TOK_ADDITIONAL_COLUMN_STATEMENT},
795             { XML_NAMESPACE_DB, XML_ROW_RETRIEVING_STATEMENT,   XML_TOK_ROW_RETRIEVING_STATEMENT},
796             { XML_NAMESPACE_DB, XML_STRING,                     XML_TOK_STRING},
797             { XML_NAMESPACE_DB, XML_FIELD,                      XML_TOK_FIELD},
798             { XML_NAMESPACE_DB, XML_DECIMAL,                    XML_TOK_DECIMAL},
799             { XML_NAMESPACE_DB, XML_THOUSAND,                   XML_TOK_THOUSAND},
800             { XML_NAMESPACE_DB, XML_DATA_SOURCE_SETTING,        XML_TOK_DATA_SOURCE_SETTING},
801             { XML_NAMESPACE_DB, XML_DATA_SOURCE_SETTING_VALUE,  XML_TOK_DATA_SOURCE_SETTING_VALUE},
802             { XML_NAMESPACE_DB, XML_DATA_SOURCE_SETTING_IS_LIST,XML_TOK_DATA_SOURCE_SETTING_IS_LIST},
803             { XML_NAMESPACE_DB, XML_DATA_SOURCE_SETTING_TYPE,   XML_TOK_DATA_SOURCE_SETTING_TYPE},
804             { XML_NAMESPACE_DB, XML_DATA_SOURCE_SETTING_NAME,   XML_TOK_DATA_SOURCE_SETTING_NAME},
805             { XML_NAMESPACE_DB, XML_FONT_CHARSET,               XML_TOK_FONT_CHARSET},
806             { XML_NAMESPACE_DB, XML_ENCODING,                   XML_TOK_ENCODING},
807             XML_TOKEN_MAP_END
808         };
809         m_pDataSourceInfoElemTokenMap.reset(new SvXMLTokenMap( aElemTokenMap ));
810     }
811     return *m_pDataSourceInfoElemTokenMap;
812 }
813 // -----------------------------------------------------------------------------
GetDocumentsElemTokenMap() const814 const SvXMLTokenMap& ODBFilter::GetDocumentsElemTokenMap() const
815 {
816     if ( !m_pDocumentsElemTokenMap.get() )
817     {
818         static __FAR_DATA SvXMLTokenMapEntry aElemTokenMap[]=
819         {
820             { XML_NAMESPACE_DB, XML_COMPONENT,              XML_TOK_COMPONENT},
821             { XML_NAMESPACE_DB, XML_COMPONENT_COLLECTION,   XML_TOK_COMPONENT_COLLECTION},
822             { XML_NAMESPACE_DB, XML_QUERY_COLLECTION,       XML_TOK_QUERY_COLLECTION},
823             { XML_NAMESPACE_DB, XML_QUERY,                  XML_TOK_QUERY},
824             { XML_NAMESPACE_DB, XML_TABLE,                  XML_TOK_TABLE},
825             { XML_NAMESPACE_DB, XML_TABLE_REPRESENTATION,   XML_TOK_TABLE},
826             { XML_NAMESPACE_DB, XML_COLUMN,                 XML_TOK_COLUMN},
827             XML_TOKEN_MAP_END
828         };
829         m_pDocumentsElemTokenMap.reset(new SvXMLTokenMap( aElemTokenMap ));
830     }
831     return *m_pDocumentsElemTokenMap;
832 }
833 // -----------------------------------------------------------------------------
GetComponentElemTokenMap() const834 const SvXMLTokenMap& ODBFilter::GetComponentElemTokenMap() const
835 {
836     if ( !m_pComponentElemTokenMap.get() )
837     {
838         static __FAR_DATA SvXMLTokenMapEntry aElemTokenMap[]=
839         {
840             { XML_NAMESPACE_XLINK,  XML_HREF,           XML_TOK_HREF    },
841             { XML_NAMESPACE_XLINK,  XML_TYPE,           XML_TOK_TYPE    },
842             { XML_NAMESPACE_XLINK,  XML_SHOW,           XML_TOK_SHOW    },
843             { XML_NAMESPACE_XLINK,  XML_ACTUATE,        XML_TOK_ACTUATE},
844             { XML_NAMESPACE_DB, XML_AS_TEMPLATE,    XML_TOK_AS_TEMPLATE },
845             { XML_NAMESPACE_DB, XML_NAME,           XML_TOK_COMPONENT_NAME  },
846             XML_TOKEN_MAP_END
847         };
848         m_pComponentElemTokenMap.reset(new SvXMLTokenMap( aElemTokenMap ));
849     }
850     return *m_pComponentElemTokenMap;
851 }
852 // -----------------------------------------------------------------------------
GetQueryElemTokenMap() const853 const SvXMLTokenMap& ODBFilter::GetQueryElemTokenMap() const
854 {
855     if ( !m_pQueryElemTokenMap.get() )
856     {
857         static __FAR_DATA SvXMLTokenMapEntry aElemTokenMap[]=
858         {
859             { XML_NAMESPACE_DB, XML_COMMAND,            XML_TOK_COMMAND },
860             { XML_NAMESPACE_DB, XML_ESCAPE_PROCESSING,  XML_TOK_ESCAPE_PROCESSING   },
861             { XML_NAMESPACE_DB, XML_NAME,               XML_TOK_QUERY_NAME  },
862             { XML_NAMESPACE_DB, XML_FILTER_STATEMENT,   XML_TOK_FILTER_STATEMENT    },
863             { XML_NAMESPACE_DB, XML_ORDER_STATEMENT,    XML_TOK_ORDER_STATEMENT },
864             { XML_NAMESPACE_DB, XML_CATALOG_NAME,       XML_TOK_CATALOG_NAME    },
865             { XML_NAMESPACE_DB, XML_SCHEMA_NAME,        XML_TOK_SCHEMA_NAME },
866             { XML_NAMESPACE_DB, XML_STYLE_NAME,         XML_TOK_STYLE_NAME},
867             { XML_NAMESPACE_DB, XML_APPLY_FILTER,       XML_TOK_APPLY_FILTER},
868             { XML_NAMESPACE_DB, XML_APPLY_ORDER,        XML_TOK_APPLY_ORDER},
869             { XML_NAMESPACE_DB, XML_COLUMNS,            XML_TOK_COLUMNS},
870             XML_TOKEN_MAP_END
871         };
872         m_pQueryElemTokenMap.reset(new SvXMLTokenMap( aElemTokenMap ));
873     }
874     return *m_pQueryElemTokenMap;
875 }
876 // -----------------------------------------------------------------------------
GetColumnElemTokenMap() const877 const SvXMLTokenMap& ODBFilter::GetColumnElemTokenMap() const
878 {
879     if ( !m_pColumnElemTokenMap.get() )
880     {
881         static __FAR_DATA SvXMLTokenMapEntry aElemTokenMap[]=
882         {
883             { XML_NAMESPACE_DB, XML_NAME,                       XML_TOK_COLUMN_NAME             },
884             { XML_NAMESPACE_DB, XML_STYLE_NAME,                 XML_TOK_COLUMN_STYLE_NAME       },
885             { XML_NAMESPACE_DB, XML_HELP_MESSAGE,               XML_TOK_COLUMN_HELP_MESSAGE     },
886             { XML_NAMESPACE_DB, XML_VISIBILITY,                 XML_TOK_COLUMN_VISIBILITY       },
887             { XML_NAMESPACE_DB, XML_DEFAULT_VALUE,              XML_TOK_COLUMN_DEFAULT_VALUE    },
888             { XML_NAMESPACE_DB, XML_TYPE_NAME,                  XML_TOK_COLUMN_TYPE_NAME        },
889             { XML_NAMESPACE_DB, XML_VISIBLE,                    XML_TOK_COLUMN_VISIBLE          },
890             { XML_NAMESPACE_DB, XML_DEFAULT_CELL_STYLE_NAME,    XML_TOK_DEFAULT_CELL_STYLE_NAME },
891             XML_TOKEN_MAP_END
892         };
893         m_pColumnElemTokenMap.reset(new SvXMLTokenMap( aElemTokenMap ));
894     }
895     return *m_pColumnElemTokenMap;
896 }
897 // -----------------------------------------------------------------------------
CreateStylesContext(sal_uInt16 _nPrefix,const::rtl::OUString & rLocalName,const uno::Reference<XAttributeList> & xAttrList,sal_Bool bIsAutoStyle)898 SvXMLImportContext* ODBFilter::CreateStylesContext(sal_uInt16 _nPrefix,const ::rtl::OUString& rLocalName,
899                                      const uno::Reference< XAttributeList>& xAttrList, sal_Bool bIsAutoStyle )
900 {
901     SvXMLImportContext *pContext = NULL;
902     if (!pContext)
903     {
904         pContext = new OTableStylesContext(*this, _nPrefix, rLocalName, xAttrList, bIsAutoStyle);
905         if (bIsAutoStyle)
906             //xAutoStyles = pContext;
907             SetAutoStyles((SvXMLStylesContext*)pContext);
908         else
909             //xStyles = pContext;
910             SetStyles((SvXMLStylesContext*)pContext);
911     }
912     return pContext;
913 }
914 // -----------------------------------------------------------------------------
CreateScriptContext(const::rtl::OUString & _rLocalName)915 SvXMLImportContext* ODBFilter::CreateScriptContext( const ::rtl::OUString& _rLocalName )
916 {
917     return new XMLScriptContext( *this, XML_NAMESPACE_OFFICE, _rLocalName, GetModel() );
918 }
919 // -----------------------------------------------------------------------------
GetTableStylesPropertySetMapper() const920 UniReference < XMLPropertySetMapper > ODBFilter::GetTableStylesPropertySetMapper() const
921 {
922     if ( !m_xTableStylesPropertySetMapper.is() )
923     {
924         m_xTableStylesPropertySetMapper = OXMLHelper::GetTableStylesPropertySetMapper();
925     }
926     return m_xTableStylesPropertySetMapper;
927 }
928 // -----------------------------------------------------------------------------
GetColumnStylesPropertySetMapper() const929 UniReference < XMLPropertySetMapper > ODBFilter::GetColumnStylesPropertySetMapper() const
930 {
931     if ( !m_xColumnStylesPropertySetMapper.is() )
932     {
933         m_xColumnStylesPropertySetMapper = OXMLHelper::GetColumnStylesPropertySetMapper();
934     }
935     return m_xColumnStylesPropertySetMapper;
936 }
937 // -----------------------------------------------------------------------------
GetCellStylesPropertySetMapper() const938 UniReference < XMLPropertySetMapper > ODBFilter::GetCellStylesPropertySetMapper() const
939 {
940     if ( !m_xCellStylesPropertySetMapper.is() )
941     {
942         m_xCellStylesPropertySetMapper = OXMLHelper::GetCellStylesPropertySetMapper();
943     }
944     return m_xCellStylesPropertySetMapper;
945 }
946 // -----------------------------------------------------------------------------
setPropertyInfo()947 void ODBFilter::setPropertyInfo()
948 {
949     Reference<XPropertySet> xDataSource(getDataSource());
950     if ( !xDataSource.is() )
951         return;
952 
953     ::connectivity::DriversConfig aDriverConfig(getServiceFactory());
954     const ::rtl::OUString sURL = ::comphelper::getString(xDataSource->getPropertyValue(PROPERTY_URL));
955     ::comphelper::NamedValueCollection aDataSourceSettings = aDriverConfig.getProperties( sURL );
956 
957     Sequence<PropertyValue> aInfo;
958     if ( !m_aInfoSequence.empty() )
959         aInfo = Sequence<PropertyValue>(&(*m_aInfoSequence.begin()),m_aInfoSequence.size());
960     aDataSourceSettings.merge( ::comphelper::NamedValueCollection( aInfo ), true );
961 
962     aDataSourceSettings >>= aInfo;
963     if ( aInfo.getLength() )
964     {
965         try
966         {
967             xDataSource->setPropertyValue(PROPERTY_INFO,makeAny(aInfo));
968         }
969         catch(Exception)
970         {
971             DBG_UNHANDLED_EXCEPTION();
972         }
973     }
974 }
975 // -----------------------------------------------------------------------------
976 }// dbaxml
977 // -----------------------------------------------------------------------------
978