LibreOffice Module sw (master)  1
dbmgr.hxx
Go to the documentation of this file.
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 #ifndef INCLUDED_SW_INC_DBMGR_HXX
20 #define INCLUDED_SW_INC_DBMGR_HXX
21 
22 #include <rtl/ustring.hxx>
23 #include <tools/solar.h>
24 #include <tools/long.hxx>
25 #include <i18nlangtag/lang.h>
26 #include <com/sun/star/util/Date.hpp>
27 #include "swdllapi.h"
28 #include "swdbdata.hxx"
29 #include <com/sun/star/uno/Reference.h>
30 #include <com/sun/star/uno/Sequence.hxx>
31 #include <com/sun/star/lang/Locale.hpp>
32 #include <com/sun/star/beans/PropertyValue.hpp>
33 
34 #include <memory>
35 #include <vector>
36 
37 namespace com::sun::star{
38  namespace sdbc{
39  class XConnection;
40  class XStatement;
41  class XDataSource;
42  class XResultSet;
43  }
44  namespace beans{
45 
46  class XPropertySet;
47  }
48  namespace sdbcx{
49  class XColumnsSupplier;
50  }
51  namespace util{
52  class XNumberFormatter;
53  }
54  namespace mail{
55  class XSmtpService;
56  }
57  namespace embed { class XStorage; }
58  namespace frame { class XStorable; }
59 }
60 namespace svx {
61  class ODataAccessDescriptor;
62 }
63 
65 {
66  css::util::Date aNullDate;
67  css::uno::Reference< css::util::XNumberFormatter> xFormatter;
68  css::lang::Locale aLocale;
69 };
70 
71 namespace weld {
72  class ComboBox;
73  class Window;
74 }
75 
76 class SwView;
77 class SwWrtShell;
78 class ListBox;
79 class SvNumberFormatter;
80 class SwXMailMerge;
82 class SwCalc;
83 class INetURLObject;
84 class SwDocShell;
85 
87 {
93 };
94 
95 // Administration of (new) logical databases.
96 enum class SwDBSelect
97 {
99 };
100 
101 struct SwDSParam : public SwDBData
102 {
103  css::util::Date aNullDate;
104 
105  css::uno::Reference<css::util::XNumberFormatter> xFormatter;
106  css::uno::Reference< css::sdbc::XConnection> xConnection;
107  css::uno::Reference< css::sdbc::XStatement> xStatement;
108  css::uno::Reference< css::sdbc::XResultSet> xResultSet;
109  css::uno::Sequence< css::uno::Any > aSelection;
111  bool bEndOfDB;
113 
114  SwDSParam(const SwDBData& rData) :
115  SwDBData(rData),
116  bScrollable(false),
117  bEndOfDB(false),
118  nSelectionIndex(0)
119  {}
120 
121  SwDSParam(const SwDBData& rData,
122  const css::uno::Reference< css::sdbc::XResultSet>& xResSet,
123  const css::uno::Sequence< css::uno::Any >& rSelection) :
124  SwDBData(rData),
125  xResultSet(xResSet),
126  aSelection(rSelection),
127  bScrollable(true),
128  bEndOfDB(false),
129  nSelectionIndex(0)
130  {}
131 
132  bool HasValidRecord() const
133  { return( !bEndOfDB && xResultSet.is() ); }
134 };
135 
136 typedef std::vector<std::unique_ptr<SwDSParam>> SwDSParams_t;
137 
139 {
143 
151 
156  OUString sSaveToFilter;
158  css::uno::Sequence< css::beans::PropertyValue > aSaveToFilterData;
173  OUString sPrefix;
188  OUString sSubject;
189  OUString sMailBody;
190  OUString sAttachmentName;
191  css::uno::Sequence< OUString > aCopiesTo;
192  css::uno::Sequence< OUString > aBlindCopiesTo;
193  css::uno::Reference< css::mail::XSmtpService > xSmtpServer;
204  OUString sDBcolumn;
205 
209 
216  css::uno::Sequence< css::beans::PropertyValue > aPrintOptions;
220 
222  SwWrtShell& rShell,
223  const svx::ODataAccessDescriptor& rDesc ) :
224  nMergeType(nType),
225  rSh(rShell),
226  rDescriptor(rDesc),
227  bCreateSingleFile( false ),
228  bPrefixIsFilename( false ),
229  bSendAsHTML( true ),
230  bSendAsAttachment( false ),
231  pMailMergeConfigItem( nullptr )
232  {
233  if( nType == DBMGR_MERGE_SHELL || nType == DBMGR_MERGE_PRINTER )
234  bCreateSingleFile = true;
235  }
236 };
237 
238 class SwDoc;
239 
241 {
242  struct SwDBManager_Impl;
243  class SAL_DLLPRIVATE ConnectionDisposedListener_Impl;
245 
246  enum class MergeStatus
247  {
248  Ok = 0, Cancel, Error
249  };
250 
252  bool m_bInitDBFields : 1;
253  bool m_bInMerge : 1;
254  bool m_bMergeSilent : 1;
256  std::unique_ptr<SwDBManager_Impl> m_pImpl;
258  OUString m_sEmbeddedName;
260 
262  static std::vector<std::pair<SwDocShell*, OUString>> m_aUncommittedRegistrations;
263 
265  std::vector<OUString> m_aNotUsedConnections;
266 
268  void SetAsUsed(const OUString& rName);
269 
272 
273  SAL_DLLPRIVATE SwDSParam* FindDSData(const SwDBData& rData, bool bCreate);
274  SAL_DLLPRIVATE SwDSParam* FindDSConnection(const OUString& rSource, bool bCreate);
275 
277  SAL_DLLPRIVATE void ImportFromConnection( SwWrtShell* pSh);
278 
280  SAL_DLLPRIVATE void ImportDBEntry(SwWrtShell* pSh);
281 
283  SAL_DLLPRIVATE bool MergeMailFiles( SwWrtShell* pSh,
284  const SwMergeDescriptor& rMergeDescriptor );
285 
286  SAL_DLLPRIVATE bool ToNextMergeRecord();
287  SAL_DLLPRIVATE bool IsValidMergeRecord() const;
288 
289  SwDBManager(SwDBManager const&) = delete;
290  SwDBManager& operator=(SwDBManager const&) = delete;
291 
292 public:
293  SwDBManager(SwDoc* pDoc);
294  ~SwDBManager() COVERITY_NOEXCEPT_FALSE;
295 
297  const SwXMailMerge * GetMailMergeEvtSrc() const { return m_pMergeEvtSrc; }
298  void SetMailMergeEvtSrc( const SwXMailMerge *pSrc ) { m_pMergeEvtSrc = pSrc; }
299 
300  bool IsMergeSilent() const { return m_bMergeSilent; }
301  void SetMergeSilent( bool bVal ) { m_bMergeSilent = bVal; }
302 
304  bool Merge( const SwMergeDescriptor& rMergeDesc );
305  void MergeCancel();
306 
307  bool IsMergeOk() const { return MergeStatus::Ok == m_aMergeStatus; }
308  bool IsMergeError() const { return MergeStatus::Error <= m_aMergeStatus; }
309 
310  static std::shared_ptr<SwMailMergeConfigItem> PerformMailMerge(SwView const * pView);
311 
313  bool IsInitDBFields() const { return m_bInitDBFields; }
314  void SetInitDBFields(bool b) { m_bInitDBFields = b; }
315 
317  bool GetTableNames(weld::ComboBox& rBox, const OUString& rDBName);
318 
320  void GetColumnNames(weld::ComboBox& rBox,
321  const OUString& rDBName, const OUString& rTableName);
322  static void GetColumnNames(weld::ComboBox& rBox,
323  css::uno::Reference< css::sdbc::XConnection> const & xConnection,
324  const OUString& rTableName);
325 
326  static sal_uLong GetColumnFormat( css::uno::Reference< css::sdbc::XDataSource> const & xSource,
327  css::uno::Reference< css::sdbc::XConnection> const & xConnection,
328  css::uno::Reference< css::beans::XPropertySet> const & xColumn,
329  SvNumberFormatter* pNFormatr,
330  LanguageType nLanguage );
331 
332  sal_uLong GetColumnFormat( const OUString& rDBName,
333  const OUString& rTableName,
334  const OUString& rColNm,
335  SvNumberFormatter* pNFormatr,
336  LanguageType nLanguage );
337  sal_Int32 GetColumnType( const OUString& rDBName,
338  const OUString& rTableName,
339  const OUString& rColNm );
340 
341  bool IsInMerge() const { return m_bInMerge; }
342 
343  void ExecuteFormLetter(SwWrtShell& rSh,
344  const css::uno::Sequence< css::beans::PropertyValue>& rProperties);
345 
346  static void InsertText(SwWrtShell& rSh,
347  const css::uno::Sequence< css::beans::PropertyValue>& rProperties);
348 
350  bool IsDataSourceOpen(const OUString& rDataSource,
351  const OUString& rTableOrQuery, bool bMergeShell);
352 
354  bool OpenDataSource(const OUString& rDataSource, const OUString& rTableOrQuery);
355  sal_uInt32 GetSelectedRecordId(const OUString& rDataSource, const OUString& rTableOrQuery, sal_Int32 nCommandType = -1);
356  bool GetColumnCnt(const OUString& rSourceName, const OUString& rTableName,
357  const OUString& rColumnName, sal_uInt32 nAbsRecordId, LanguageType nLanguage,
358  OUString& rResult, double* pNumber);
361  css::uno::Reference< css::sdbc::XConnection> const &
362  RegisterConnection(OUString const& rSource);
363 
364  void CreateDSData(const SwDBData& rData)
365  { FindDSData(rData, true); }
366  const SwDSParams_t& GetDSParamArray() const { return m_DataSourceParams; }
367 
369  void CloseAll(bool bIncludingMerge = true);
370 
371  bool GetMergeColumnCnt(const OUString& rColumnName, LanguageType nLanguage,
372  OUString &rResult, double *pNumber);
373  bool FillCalcWithMergeData(SvNumberFormatter *pDocFormatter,
374  LanguageType nLanguage, SwCalc &aCalc);
375  void ToNextRecord(const OUString& rDataSource, const OUString& rTableOrQuery);
376 
377  sal_uInt32 GetSelectedRecordId();
378  bool ToRecordId(sal_Int32 nSet);
379 
380  static const SwDBData& GetAddressDBName();
381 
382  static OUString GetDBField(
383  css::uno::Reference< css::beans::XPropertySet > const & xColumnProp,
384  const SwDBFormatData& rDBFormatData,
385  double *pNumber = nullptr);
386 
387  static css::uno::Reference< css::sdbc::XConnection>
388  GetConnection(const OUString& rDataSource,
389  css::uno::Reference< css::sdbc::XDataSource>& rxSource,
390  const SwView* pView);
391 
392  static css::uno::Reference< css::sdbcx::XColumnsSupplier>
393  GetColumnSupplier(css::uno::Reference< css::sdbc::XConnection> const & xConnection,
394  const OUString& rTableOrQuery,
395  SwDBSelect eTableOrQuery = SwDBSelect::UNKNOWN);
396 
397  static css::uno::Sequence<OUString> GetExistingDatabaseNames();
398 
406  static OUString LoadAndRegisterDataSource(weld::Window* pParent, SwDocShell* pDocShell = nullptr);
407 
414  static OUString LoadAndRegisterDataSource(const OUString& rURI, const OUString *pDestDir);
415 
417  void LoadAndRegisterEmbeddedDataSource(const SwDBData& rData, const SwDocShell& rDocShell);
418 
420  static void RevokeDataSource(const OUString& rName);
421 
431  static css::uno::Reference< css::sdbc::XDataSource>
432  getDataSourceAsParent(const css::uno::Reference< css::sdbc::XConnection>& _xConnection,const OUString& _sDataSourceName);
433 
447  static css::uno::Reference< css::sdbc::XResultSet>
448  createCursor(const OUString& _sDataSourceName,
449  const OUString& _sCommand,
450  sal_Int32 _nCommandType,
451  const css::uno::Reference< css::sdbc::XConnection>& _xConnection,
452  const SwView* pView);
453 
454  void setEmbeddedName(const OUString& rEmbeddedName, SwDocShell& rDocShell);
455  const OUString& getEmbeddedName() const;
456 
457  // rOwnURL should be taken using INetURLObject::GetMainURL(INetURLObject::DecodeMechanism::NONE)
458  static void StoreEmbeddedDataSource(const css::uno::Reference<css::frame::XStorable>& xStorable,
459  const css::uno::Reference<css::embed::XStorage>& xStorage,
460  const OUString& rStreamRelPath,
461  const OUString& rOwnURL, bool bCopyTo = false);
462 
463  SwDoc* getDoc() const;
465  void releaseRevokeListener();
466 
468  void RevokeLastRegistrations();
469 
471  void CommitLastRegistrations();
472 
474  void RevokeNotUsedConnections();
475 };
476 
477 namespace sw
478 {
479 enum class DBConnURIType
480 {
481  UNKNOWN = 0,
482  ODB,
483  CALC,
484  DBASE,
485  FLAT,
486  MSJET,
487  MSACE,
488  WRITER
489 };
490 
492 }
493 
494 #endif
495 
496 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
css::uno::Reference< css::sdbc::XResultSet > xResultSet
Definition: dbmgr.hxx:108
bool bCreateSingleFile
Create a single or multiple results.
Definition: dbmgr.hxx:150
Definition: calc.hxx:191
exports com.sun.star. mail
exports com.sun.star. sdbc
void SetMailMergeEvtSrc(const SwXMailMerge *pSrc)
Definition: dbmgr.hxx:298
css::util::Date aNullDate
Definition: dbmgr.hxx:66
SwDSParams_t m_DataSourceParams
Definition: dbmgr.hxx:255
SwMailMergeConfigItem * pMailMergeConfigItem
Definition: dbmgr.hxx:219
bool bEndOfDB
Definition: dbmgr.hxx:111
sal_uIntPtr sal_uLong
long Long
css::uno::Reference< css::mail::XSmtpService > xSmtpServer
Definition: dbmgr.hxx:193
exports com.sun.star. embed
Definition: doc.hxx:186
bool HasValidRecord() const
Definition: dbmgr.hxx:132
css::util::Date aNullDate
Definition: dbmgr.hxx:103
bool bSendAsAttachment
Definition: dbmgr.hxx:195
Data records in fields.
Definition: dbmgr.hxx:88
static std::vector< std::pair< SwDocShell *, OUString > > m_aUncommittedRegistrations
Store last registrations to revoke or commit.
Definition: dbmgr.hxx:262
Dialog to specify the properties of date form field.
bool IsInMerge() const
Definition: dbmgr.hxx:341
css::uno::Reference< css::sdbc::XConnection > xConnection
Definition: dbmgr.hxx:106
css::uno::Sequence< css::beans::PropertyValue > aSaveToFilterData
Definition: dbmgr.hxx:158
bool IsMergeError() const
Definition: dbmgr.hxx:308
SwDBSelect
Definition: dbmgr.hxx:96
Used by the UI to modify the document model.
Definition: wrtsh.hxx:90
SwDSParam(const SwDBData &rData, const css::uno::Reference< css::sdbc::XResultSet > &xResSet, const css::uno::Sequence< css::uno::Any > &rSelection)
Definition: dbmgr.hxx:121
bool IsInitDBFields() const
Initialize data fields that lack name of database.
Definition: dbmgr.hxx:313
exports com.sun.star. frame
Print mail merge.
Definition: dbmgr.hxx:89
DBManagerOptions
Definition: dbmgr.hxx:86
Send mail merge as email.
Definition: dbmgr.hxx:90
OUString sSaveToFilter
Definition: dbmgr.hxx:156
css::lang::Locale aLocale
Definition: dbmgr.hxx:68
Create merge doc and keep the doc shell.
Definition: dbmgr.hxx:92
OUString sMailBody
Definition: dbmgr.hxx:189
SwWrtShell & rSh
Definition: dbmgr.hxx:141
SwDoc * m_pDoc
The document that owns this manager.
Definition: dbmgr.hxx:271
bool bPrefixIsFilename
Use the sPrefix as the target filename also overwriting an existing target file.
Definition: dbmgr.hxx:181
OUString sPrefix
Basename incl.
Definition: dbmgr.hxx:173
OUString sSaveToFilterOptions
Definition: dbmgr.hxx:157
OUString sSubject
Definition: dbmgr.hxx:188
bool bScrollable
Definition: dbmgr.hxx:110
class SAL_NO_VTABLE XPropertySet
void SetMergeSilent(bool bVal)
Definition: dbmgr.hxx:301
OUString sAttachmentName
Definition: dbmgr.hxx:190
SwMergeDescriptor(const DBManagerOptions nType, SwWrtShell &rShell, const svx::ODataAccessDescriptor &rDesc)
Definition: dbmgr.hxx:221
std::unique_ptr< SwDBManager_Impl > m_pImpl
Definition: dbmgr.hxx:256
Error
#define SW_DLLPUBLIC
Definition: swdllapi.h:28
tools::Long nSelectionIndex
Definition: dbmgr.hxx:112
exports com.sun.star. sdbcx
std::vector< OUString > m_aNotUsedConnections
Not used connections.
Definition: dbmgr.hxx:265
exports com.sun.star. beans
const DBManagerOptions nMergeType
Definition: dbmgr.hxx:140
std::vector< std::unique_ptr< SwDSParam > > SwDSParams_t
Definition: dbmgr.hxx:136
css::uno::Sequence< OUString > aCopiesTo
Definition: dbmgr.hxx:191
css::uno::Sequence< css::beans::PropertyValue > aPrintOptions
Definition: dbmgr.hxx:216
css::uno::Reference< css::util::XNumberFormatter > xFormatter
Definition: dbmgr.hxx:105
Save mail merge as files.
Definition: dbmgr.hxx:91
const svx::ODataAccessDescriptor & rDescriptor
Definition: dbmgr.hxx:142
DBConnURIType GetDBunoType(const INetURLObject &rURL)
Definition: dbmgr.cxx:2520
OUString sDBPasswordColumn
DB column to fetch password.
Definition: dbmgr.hxx:208
void SetInitDBFields(bool b)
Definition: dbmgr.hxx:314
bool IsMergeSilent() const
Definition: dbmgr.hxx:300
const SwXMailMerge * m_pMergeEvtSrc
!= 0 if mail merge events are to be send
Definition: dbmgr.hxx:257
css::uno::Sequence< OUString > aBlindCopiesTo
Definition: dbmgr.hxx:192
css::uno::Reference< css::util::XNumberFormatter > xFormatter
Definition: dbmgr.hxx:67
OUString sDBcolumn
DB column to fetch EMail of Filename from.
Definition: dbmgr.hxx:204
DBConnURIType
Definition: dbmgr.hxx:479
css::uno::Sequence< css::uno::Any > aSelection
Definition: dbmgr.hxx:109
SwDSParam(const SwDBData &rData)
Definition: dbmgr.hxx:114
css::uno::Reference< css::sdbc::XStatement > xStatement
Definition: dbmgr.hxx:107
MergeStatus m_aMergeStatus
current / last merge status
Definition: dbmgr.hxx:251
const SwDSParams_t & GetDSParamArray() const
Definition: dbmgr.hxx:366
void CreateDSData(const SwDBData &rData)
Definition: dbmgr.hxx:364
bool IsMergeOk() const
Definition: dbmgr.hxx:307
Definition: view.hxx:144