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