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