xref: /AOO41X/main/extensions/source/bibliography/datman.cxx (revision 2a97ec55f1442d65917e8c8b82a55ab76c9ff676)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_extensions.hxx"
26 #include <osl/mutex.hxx>
27 #include <tools/diagnose_ex.h>
28 #include <tools/urlobj.hxx>
29 #include <comphelper/processfactory.hxx>
30 #include <com/sun/star/io/XPersistObject.hpp>
31 #include <com/sun/star/sdbc/ResultSetType.hpp>
32 #include <com/sun/star/sdbc/ResultSetConcurrency.hpp>
33 #include <com/sun/star/sdbc/XResultSetUpdate.hpp>
34 #include <com/sun/star/sdbcx/XRowLocate.hpp>
35 #include <com/sun/star/sdbc/DataType.hpp>
36 #include <com/sun/star/sdb/XSingleSelectQueryComposer.hpp>
37 #include <com/sun/star/sdbc/XDatabaseMetaData.hpp>
38 #include <com/sun/star/sdb/XDatabaseEnvironment.hpp>
39 #include <com/sun/star/uno/XNamingService.hpp>
40 #include <com/sun/star/sdbc/XDataSource.hpp>
41 #include <com/sun/star/sdb/CommandType.hpp>
42 #include <com/sun/star/sdbcx/XTablesSupplier.hpp>
43 #include <com/sun/star/sdbc/XConnection.hpp>
44 #include <com/sun/star/sdb/XCompletedConnection.hpp>
45 #include <com/sun/star/task/XInteractionHandler.hpp>
46 #include <com/sun/star/form/XLoadable.hpp>
47 #include <com/sun/star/sdbcx/XColumnsSupplier.hpp>
48 #include <com/sun/star/form/XGridColumnFactory.hpp>
49 #include <com/sun/star/io/XDataInputStream.hpp>
50 #include <com/sun/star/container/XNameContainer.hpp>
51 #include <com/sun/star/ucb/XContentProvider.hpp>
52 #include <com/sun/star/ucb/XContentAccess.hpp>
53 #include <ucbhelper/contentbroker.hxx>
54 #include <ucbhelper/content.hxx>
55 #include <ucbhelper/contentidentifier.hxx>
56 #include <comphelper/container.hxx>
57 #include <svl/urihelper.hxx>
58 #include <svtools/svtabbx.hxx>
59 #include <svtools/headbar.hxx>
60 #include <vcl/dialog.hxx>
61 #ifndef _SV_BUTTON_HXX
62 #include <vcl/button.hxx>
63 #endif
64 #include <vcl/lstbox.hxx>
65 #include <vcl/fixed.hxx>
66 #include <vcl/group.hxx>
67 #include <vcl/lstbox.hxx>
68 #include <vcl/edit.hxx>
69 #include <vcl/msgbox.hxx>
70 #include <tools/debug.hxx>
71 #include "datman.hxx"
72 #include "bibresid.hxx"
73 #include "bibmod.hxx"
74 #include "bibview.hxx"
75 // #100312# ---------
76 #include "bibbeam.hxx"
77 #include "bibprop.hrc"
78 #include "toolbar.hxx"
79 #include "toolbar.hrc"
80 #include "bibconfig.hxx"
81 #include "bibbeam.hxx"
82 #include "bib.hrc"
83 #include "datman.hrc"
84 #include "bibliography.hrc"
85 #include <connectivity/dbtools.hxx>
86 
87 using namespace ::com::sun::star;
88 using namespace ::com::sun::star::beans;
89 using namespace ::com::sun::star::container;
90 using namespace ::com::sun::star::uno;
91 using namespace ::com::sun::star::sdb;
92 using namespace ::com::sun::star::sdbc;
93 using namespace ::com::sun::star::sdbcx;
94 using namespace ::com::sun::star::form;
95 using namespace ::com::sun::star::frame;
96 using namespace ::com::sun::star::ucb;
97 using namespace ::com::sun::star::lang;
98 using namespace ::ucb;
99 
100 #define C2U(cChar) ::rtl::OUString::createFromAscii(cChar)
101 #define C2S(cChar) String::CreateFromAscii(cChar)
102 #define MAP_TOKEN ';'
103 #define PAIR_TOKEN ':'
104 
105 
106 /* -----------------17.01.00 14:38-------------------
107 
108  --------------------------------------------------*/
getConnection(const::rtl::OUString & _rURL)109 Reference< XConnection > getConnection(const ::rtl::OUString& _rURL)
110 {
111     // first get the sdb::DataSource corresponding to the url
112     Reference< XDataSource >    xDataSource;
113     // is it a favorite title ?
114     Reference< XMultiServiceFactory >  xMgr = comphelper::getProcessServiceFactory();
115     Reference<XInterface> xNamingContextIfc = xMgr->createInstance(C2U("com.sun.star.sdb.DatabaseContext"));
116     Reference< XNameAccess >  xNamingContext(xNamingContextIfc, UNO_QUERY);
117     if (xNamingContext.is() && xNamingContext->hasByName(_rURL))
118     {
119         DBG_ASSERT(Reference< XNamingService > (xNamingContext, UNO_QUERY).is(), "::getDataSource : no NamingService interface on the sdb::DatabaseAccessContext !");
120         try
121         {
122             xDataSource = Reference< XDataSource > (Reference< XNamingService > (xNamingContext, UNO_QUERY)->getRegisteredObject(_rURL), UNO_QUERY);
123         }
124         catch(Exception eEx)
125         {
126             (void) eEx; // make compiler happy
127             DBG_ERROR("Exception caught in ODatabaseContext::getRegisteredObject()");
128         }
129     }
130     // build the connection from the data source
131     Reference< XConnection >    xConn;
132     if (xDataSource.is())
133     {
134         // need user/pwd for this
135         ::rtl::OUString sUser, sPwd;
136         Reference< XPropertySet >  xDataSourceProps(xDataSource, UNO_QUERY);
137         Reference< XCompletedConnection > xComplConn(xDataSource, UNO_QUERY);
138 /*      Reference< XPropertySetInfo >  xInfo = xDataSourceProps.is() ? xDataSourceProps->getPropertySetInfo() : Reference< XPropertySetInfo > ();
139         if (xInfo.is() && xInfo->hasPropertyByName(C2U("User")))
140             xDataSourceProps->getPropertyValue(C2U("User")) >>= sUser;
141         if (xInfo.is() && xInfo->hasPropertyByName(C2U("Password")))
142             xDataSourceProps->getPropertyValue(C2U("Password"))>>= sPwd;
143 */
144         try
145         {
146 
147             Reference<XInterface> xHdl = xMgr->createInstance(C2U("com.sun.star.task.InteractionHandler"));
148             Reference<task::XInteractionHandler> xIHdl(xHdl, UNO_QUERY);
149             xConn = xComplConn->connectWithCompletion(xIHdl);
150 //          xConn = xDataSource->getConnection(sUser, sPwd);
151         }
152         catch(SQLException&)
153         {
154             // TODO : a real error handling
155         }
156         catch(Exception& e )
157         {
158             (void) e;   // make compiler happy
159         }
160 
161     }
162     return xConn;
163 }
164 
165 /* -----------------17.01.00 14:46-------------------
166 
167  --------------------------------------------------*/
getConnection(const Reference<XInterface> & xRowSet)168 Reference< XConnection >    getConnection(const Reference< XInterface > & xRowSet)
169 {
170     Reference< XConnection >    xConn;
171     try
172     {
173         Reference< XPropertySet >  xFormProps(xRowSet, UNO_QUERY);
174         if (!xFormProps.is())
175             return xConn;
176 
177         xConn = Reference< XConnection > (*(Reference< XInterface > *)xFormProps->getPropertyValue(C2U("ActiveConnection")).getValue(), UNO_QUERY);
178         if (!xConn.is())
179         {
180             DBG_WARNING("no active connection");
181         }
182     }
183     catch(Exception& e )
184     {
185         (void) e;   // make compiler happy
186         DBG_ERROR("exception in getConnection");
187     }
188 
189     return xConn;
190 }
191 /* -----------------17.01.00 16:07-------------------
192 
193  --------------------------------------------------*/
getColumns(const Reference<XForm> & _rxForm)194 Reference< XNameAccess >  getColumns(const Reference< XForm > & _rxForm)
195 {
196     Reference< XNameAccess >  xReturn;
197     // check if the form is alive
198     Reference< XColumnsSupplier >  xSupplyCols( _rxForm, UNO_QUERY );
199     if (xSupplyCols.is())
200         xReturn = xSupplyCols->getColumns();
201 
202     if (!xReturn.is() || (xReturn->getElementNames().getLength() == 0))
203     {   // no ....
204         xReturn = NULL;
205         // -> get the table the form is bound to and ask it for their columns
206         Reference< XTablesSupplier >  xSupplyTables( getConnection( _rxForm ), UNO_QUERY );
207         Reference< XPropertySet >  xFormProps( _rxForm, UNO_QUERY );
208         if (xFormProps.is() && xSupplyTables.is())
209         {
210             try
211             {
212                 DBG_ASSERT((*(sal_Int32*)xFormProps->getPropertyValue(C2U("CommandType")).getValue()) == CommandType::TABLE,
213                     "::getColumns : invalid form (has no table as data source) !");
214                 ::rtl::OUString sTable;
215                 xFormProps->getPropertyValue(C2U("Command")) >>= sTable;
216                 Reference< XNameAccess >  xTables = xSupplyTables->getTables();
217                 if (xTables.is() && xTables->hasByName(sTable))
218                     xSupplyCols = Reference< XColumnsSupplier > (
219                         *(Reference< XInterface > *)xTables->getByName(sTable).getValue(), UNO_QUERY);
220                 if (xSupplyCols.is())
221                     xReturn = xSupplyCols->getColumns();
222             }
223 #ifdef DBG_UTIL
224             catch(Exception& e )
225 #else
226             catch(Exception&)
227 #endif
228             {
229 #ifdef DBG_UTIL
230                 String sMsg(String::CreateFromAscii("::getColumns : catched an exception ("));
231                 sMsg += String(e.Message);
232                 sMsg.AppendAscii(") ...");
233                 DBG_ERROR( ByteString(sMsg, RTL_TEXTENCODING_ASCII_US ).GetBuffer());
234 #endif
235             }
236 
237         }
238     }
239     return xReturn;
240 }
241 
242 /* -----------------11.11.99 15:54-------------------
243 
244  --------------------------------------------------*/
245 class MappingDialog_Impl : public ModalDialog
246 {
247     BibDataManager* pDatMan;
248     OKButton        aOKBT;
249     CancelButton    aCancelBT;
250     HelpButton      aHelpBT;
251     FixedLine       aMapGB;
252     FixedText       aIdentifierFT;
253     ListBox         aIdentifierLB;
254     FixedText       aAuthorityTypeFT;
255     ListBox         aAuthorityTypeLB;
256     FixedText       aAuthorFT;
257     ListBox         aAuthorLB;
258     FixedText       aTitleFT;
259     ListBox         aTitleLB;
260     FixedText       aMonthFT;
261     ListBox         aMonthLB;
262     FixedText       aYearFT;
263     ListBox         aYearLB;
264     FixedText       aISBNFT;
265     ListBox         aISBNLB;
266     FixedText       aBooktitleFT;
267     ListBox         aBooktitleLB;
268     FixedText       aChapterFT;
269     ListBox         aChapterLB;
270     FixedText       aEditionFT;
271     ListBox         aEditionLB;
272     FixedText       aEditorFT;
273     ListBox         aEditorLB;
274     FixedText       aHowpublishedFT;
275     ListBox         aHowpublishedLB;
276     FixedText       aInstitutionFT;
277     ListBox         aInstitutionLB;
278     FixedText       aJournalFT;
279     ListBox         aJournalLB;
280     FixedText       aNoteFT;
281     ListBox         aNoteLB;
282     FixedText       aAnnoteFT;
283     ListBox         aAnnoteLB;
284     FixedText       aNumberFT;
285     ListBox         aNumberLB;
286     FixedText       aOrganizationsFT;
287     ListBox         aOrganizationsLB;
288     FixedText       aPagesFT;
289     ListBox         aPagesLB;
290     FixedText       aPublisherFT;
291     ListBox         aPublisherLB;
292     FixedText       aAddressFT;
293     ListBox         aAddressLB;
294     FixedText       aSchoolFT;
295     ListBox         aSchoolLB;
296     FixedText       aSeriesFT;
297     ListBox         aSeriesLB;
298     FixedText       aReportTypeFT;
299     ListBox         aReportTypeLB;
300     FixedText       aVolumeFT;
301     ListBox         aVolumeLB;
302     FixedText       aURLFT;
303     ListBox         aURLLB;
304     FixedText       aCustom1FT;
305     ListBox         aCustom1LB;
306     FixedText       aCustom2FT;
307     ListBox         aCustom2LB;
308     FixedText       aCustom3FT;
309     ListBox         aCustom3LB;
310     FixedText       aCustom4FT;
311     ListBox         aCustom4LB;
312     FixedText       aCustom5FT;
313     ListBox         aCustom5LB;
314     ListBox*        aListBoxes[COLUMN_COUNT];
315     String          sNone;
316 
317     sal_Bool        bModified;
318 
319 
320 
321     DECL_LINK(OkHdl, OKButton*);
322     DECL_LINK(ListBoxSelectHdl, ListBox*);
323 
324 public:
325     MappingDialog_Impl(Window* pParent, BibDataManager* pDatMan);
326     ~MappingDialog_Impl();
327 
SetModified()328     void    SetModified() {bModified = sal_True;}
329 
330 };
331 /* -----------------11.11.99 16:42-------------------
332 
333  --------------------------------------------------*/
lcl_FindLogicalName(BibConfig * pConfig,const::rtl::OUString & rLogicalColumnName)334 sal_uInt16 lcl_FindLogicalName(BibConfig* pConfig ,
335                                     const ::rtl::OUString& rLogicalColumnName)
336 {
337     for(sal_uInt16 i = 0; i < COLUMN_COUNT; i++)
338     {
339         if(rLogicalColumnName == pConfig->GetDefColumnName(i))
340             return i;
341     }
342     return USHRT_MAX;
343 }
344 //-----------------------------------------------------------------------------
MappingDialog_Impl(Window * pParent,BibDataManager * pMan)345 MappingDialog_Impl::MappingDialog_Impl(Window* pParent, BibDataManager* pMan) :
346     ModalDialog(pParent, BibResId(RID_DLG_MAPPING) ),
347     pDatMan(pMan),
348     aOKBT(this,                 BibResId( BT_OK         )),
349     aCancelBT(this,             BibResId( BT_CANCEL     )),
350     aHelpBT(this,               BibResId( BT_HELP           )),
351 
352     aMapGB(this,                BibResId( GB_MAPPING        )),
353 
354     aIdentifierFT(this,         BibResId( FT_IDENTIFIER )),
355     aIdentifierLB(this,         BibResId( LB_IDENTIFIER )),
356     aAuthorityTypeFT(this,      BibResId( FT_AUTHORITYTYPE )),
357     aAuthorityTypeLB(this,      BibResId( LB_AUTHORITYTYPE )),
358     aAuthorFT(this,             BibResId( FT_AUTHOR     )),
359     aAuthorLB(this,             BibResId( LB_AUTHOR     )),
360     aTitleFT(this,              BibResId( FT_TITLE      )),
361     aTitleLB(this,              BibResId( LB_TITLE      )),
362     aMonthFT(this,              BibResId( FT_MONTH      )),
363     aMonthLB(this,              BibResId( LB_MONTH      )),
364     aYearFT(this,               BibResId( FT_YEAR           )),
365     aYearLB(this,               BibResId( LB_YEAR           )),
366     aISBNFT(this,               BibResId( FT_ISBN           )),
367     aISBNLB(this,               BibResId( LB_ISBN           )),
368     aBooktitleFT(this,          BibResId( FT_BOOKTITLE  )),
369     aBooktitleLB(this,          BibResId( LB_BOOKTITLE  )),
370     aChapterFT(this,            BibResId( FT_CHAPTER        )),
371     aChapterLB(this,            BibResId( LB_CHAPTER        )),
372     aEditionFT(this,            BibResId( FT_EDITION        )),
373     aEditionLB(this,            BibResId( LB_EDITION        )),
374     aEditorFT(this,             BibResId( FT_EDITOR     )),
375     aEditorLB(this,             BibResId( LB_EDITOR     )),
376     aHowpublishedFT(this,       BibResId( FT_HOWPUBLISHED   )),
377     aHowpublishedLB(this,       BibResId( LB_HOWPUBLISHED   )),
378     aInstitutionFT(this,        BibResId( FT_INSTITUTION    )),
379     aInstitutionLB(this,        BibResId( LB_INSTITUTION    )),
380     aJournalFT(this,            BibResId( FT_JOURNAL        )),
381     aJournalLB(this,            BibResId( LB_JOURNAL        )),
382     aNoteFT(this,               BibResId( FT_NOTE           )),
383     aNoteLB(this,               BibResId( LB_NOTE           )),
384     aAnnoteFT(this,             BibResId( FT_ANNOTE     )),
385     aAnnoteLB(this,             BibResId( LB_ANNOTE     )),
386     aNumberFT(this,             BibResId( FT_NUMBER     )),
387     aNumberLB(this,             BibResId( LB_NUMBER     )),
388     aOrganizationsFT(this,      BibResId( FT_ORGANIZATIONS )),
389     aOrganizationsLB(this,      BibResId( LB_ORGANIZATIONS )),
390     aPagesFT(this,              BibResId( FT_PAGES      )),
391     aPagesLB(this,              BibResId( LB_PAGES      )),
392     aPublisherFT(this,          BibResId( FT_PUBLISHER  )),
393     aPublisherLB(this,          BibResId( LB_PUBLISHER  )),
394     aAddressFT(this,            BibResId( FT_ADDRESS        )),
395     aAddressLB(this,            BibResId( LB_ADDRESS        )),
396     aSchoolFT(this,             BibResId( FT_SCHOOL     )),
397     aSchoolLB(this,             BibResId( LB_SCHOOL     )),
398     aSeriesFT(this,             BibResId( FT_SERIES     )),
399     aSeriesLB(this,             BibResId( LB_SERIES     )),
400     aReportTypeFT(this,         BibResId( FT_REPORTTYPE )),
401     aReportTypeLB(this,         BibResId( LB_REPORTTYPE )),
402     aVolumeFT(this,             BibResId( FT_VOLUME     )),
403     aVolumeLB(this,             BibResId( LB_VOLUME     )),
404     aURLFT(this,                BibResId( FT_URL            )),
405     aURLLB(this,                BibResId( LB_URL            )),
406     aCustom1FT(this,            BibResId( FT_CUSTOM1        )),
407     aCustom1LB(this,            BibResId( LB_CUSTOM1        )),
408     aCustom2FT(this,            BibResId( FT_CUSTOM2        )),
409     aCustom2LB(this,            BibResId( LB_CUSTOM2        )),
410     aCustom3FT(this,            BibResId( FT_CUSTOM3        )),
411     aCustom3LB(this,            BibResId( LB_CUSTOM3        )),
412     aCustom4FT(this,            BibResId( FT_CUSTOM4        )),
413     aCustom4LB(this,            BibResId( LB_CUSTOM4        )),
414     aCustom5FT(this,            BibResId( FT_CUSTOM5        )),
415     aCustom5LB(this,            BibResId( LB_CUSTOM5        )),
416     sNone(BibResId(ST_NONE)),
417     bModified(sal_False)
418 {
419     FreeResource();
420 
421     aIdentifierFT.SetText(String(         BibResId( ST_IDENTIFIER    )));
422     aAuthorityTypeFT.SetText(String(      BibResId( ST_AUTHTYPE )));
423     aAuthorFT.SetText(String(             BibResId( ST_AUTHOR        )));
424     aTitleFT.SetText(String(              BibResId( ST_TITLE         )));
425     aMonthFT.SetText(String(              BibResId( ST_MONTH         )));
426     aYearFT.SetText(String(               BibResId( ST_YEAR          )));
427     aISBNFT.SetText(String(               BibResId( ST_ISBN          )));
428     aBooktitleFT.SetText(String(          BibResId( ST_BOOKTITLE     )));
429     aChapterFT.SetText(String(            BibResId( ST_CHAPTER       )));
430     aEditionFT.SetText(String(            BibResId( ST_EDITION       )));
431     aEditorFT.SetText(String(             BibResId( ST_EDITOR        )));
432     aHowpublishedFT.SetText(String(       BibResId( ST_HOWPUBLISHED  )));
433     aInstitutionFT.SetText(String(        BibResId( ST_INSTITUTION   )));
434     aJournalFT.SetText(String(            BibResId( ST_JOURNAL       )));
435     aNoteFT.SetText(String(               BibResId( ST_NOTE          )));
436     aAnnoteFT.SetText(String(             BibResId( ST_ANNOTE        )));
437     aNumberFT.SetText(String(             BibResId( ST_NUMBER        )));
438     aOrganizationsFT.SetText(String(      BibResId( ST_ORGANIZATION )));
439     aPagesFT.SetText(String(              BibResId( ST_PAGE         )));
440     aPublisherFT.SetText(String(          BibResId( ST_PUBLISHER     )));
441     aAddressFT.SetText(String(            BibResId( ST_ADDRESS       )));
442     aSchoolFT.SetText(String(             BibResId( ST_SCHOOL        )));
443     aSeriesFT.SetText(String(             BibResId( ST_SERIES        )));
444     aReportTypeFT.SetText(String(         BibResId( ST_REPORT    )));
445     aVolumeFT.SetText(String(             BibResId( ST_VOLUME        )));
446     aURLFT.SetText(String(                BibResId( ST_URL           )));
447     aCustom1FT.SetText(String(            BibResId( ST_CUSTOM1       )));
448     aCustom2FT.SetText(String(            BibResId( ST_CUSTOM2       )));
449     aCustom3FT.SetText(String(            BibResId( ST_CUSTOM3       )));
450     aCustom4FT.SetText(String(            BibResId( ST_CUSTOM4       )));
451     aCustom5FT.SetText(String(            BibResId( ST_CUSTOM5       )));
452 
453     aOKBT.SetClickHdl(LINK(this, MappingDialog_Impl, OkHdl));
454     String sTitle = GetText();
455     sTitle.SearchAndReplace(C2S("%1"), pDatMan->getActiveDataTable(), 0);
456     SetText(sTitle);
457 
458     aListBoxes[0] = &aIdentifierLB;
459     aListBoxes[1] = &aAuthorityTypeLB;
460     aListBoxes[2] = &aAuthorLB;
461     aListBoxes[3] = &aTitleLB;
462     aListBoxes[4] = &aYearLB;
463     aListBoxes[5] = &aISBNLB;
464     aListBoxes[6] = &aBooktitleLB;
465     aListBoxes[7] = &aChapterLB;
466     aListBoxes[8] = &aEditionLB;
467     aListBoxes[9] = &aEditorLB;
468     aListBoxes[10] = &aHowpublishedLB;
469     aListBoxes[11] = &aInstitutionLB;
470     aListBoxes[12] = &aJournalLB;
471     aListBoxes[13] = &aMonthLB;
472     aListBoxes[14] = &aNoteLB;
473     aListBoxes[15] = &aAnnoteLB;
474     aListBoxes[16] = &aNumberLB;
475     aListBoxes[17] = &aOrganizationsLB;
476     aListBoxes[18] = &aPagesLB;
477     aListBoxes[19] = &aPublisherLB;
478     aListBoxes[20] = &aAddressLB;
479     aListBoxes[21] = &aSchoolLB;
480     aListBoxes[22] = &aSeriesLB;
481     aListBoxes[23] = &aReportTypeLB;
482     aListBoxes[24] = &aVolumeLB;
483     aListBoxes[25] = &aURLLB;
484     aListBoxes[26] = &aCustom1LB;
485     aListBoxes[27] = &aCustom2LB;
486     aListBoxes[28] = &aCustom3LB;
487     aListBoxes[29] = &aCustom4LB;
488     aListBoxes[30] = &aCustom5LB;
489 
490     aListBoxes[0]->InsertEntry(sNone);
491     Reference< XNameAccess >  xFields = getColumns( pDatMan->getForm() );
492     DBG_ASSERT(xFields.is(), "MappingDialog_Impl::MappingDialog_Impl : gave me an invalid form !");
493     if(xFields.is())
494     {
495         Sequence< ::rtl::OUString > aNames = xFields->getElementNames();
496         sal_Int32 nFieldsCount = aNames.getLength();
497         const ::rtl::OUString* pNames = aNames.getConstArray();
498 
499         for(sal_Int32 nField = 0; nField < nFieldsCount; nField++)
500             aListBoxes[0]->InsertEntry(pNames[nField]);
501     }
502 
503     Link aLnk = LINK(this, MappingDialog_Impl, ListBoxSelectHdl);
504 
505     aListBoxes[0]->SelectEntryPos(0);
506     aListBoxes[0]->SetSelectHdl(aLnk);
507     for(sal_uInt16 i = 1; i < COLUMN_COUNT; i++)
508     {
509         for(sal_uInt16 j = 0; j < aListBoxes[0]->GetEntryCount();j++)
510             aListBoxes[i]->InsertEntry(aListBoxes[0]->GetEntry(j));
511         aListBoxes[i]->SelectEntryPos(0);
512         aListBoxes[i]->SetSelectHdl(aLnk);
513     }
514     BibConfig* pConfig = BibModul::GetConfig();
515     BibDBDescriptor aDesc;
516     aDesc.sDataSource = pDatMan->getActiveDataSource();
517     aDesc.sTableOrQuery = pDatMan->getActiveDataTable();
518     aDesc.nCommandType = CommandType::TABLE;
519     const Mapping* pMapping = pConfig->GetMapping(aDesc);
520     if(pMapping)
521     {
522         for(sal_uInt16 nEntry = 0; nEntry < COLUMN_COUNT; nEntry++)
523         {
524             sal_uInt16 nListBoxIndex = lcl_FindLogicalName( pConfig, pMapping->aColumnPairs[nEntry].sLogicalColumnName);
525             if(nListBoxIndex < COLUMN_COUNT)
526             {
527                 aListBoxes[nListBoxIndex]->SelectEntry(pMapping->aColumnPairs[nEntry].sRealColumnName);
528             }
529         }
530     }
531 }
532 /* -----------------11.11.99 16:44-------------------
533 
534  --------------------------------------------------*/
~MappingDialog_Impl()535 MappingDialog_Impl::~MappingDialog_Impl()
536 {}
537 /* -----------------15.11.99 10:38-------------------
538 
539  --------------------------------------------------*/
IMPL_LINK(MappingDialog_Impl,ListBoxSelectHdl,ListBox *,pListBox)540 IMPL_LINK(MappingDialog_Impl, ListBoxSelectHdl, ListBox*, pListBox)
541 {
542     sal_uInt16 nEntryPos = pListBox->GetSelectEntryPos();
543     if(0 < nEntryPos)
544     {
545         for(sal_uInt16 i = 0; i < COLUMN_COUNT; i++)
546         {
547             if(pListBox != aListBoxes[i] && aListBoxes[i]->GetSelectEntryPos() == nEntryPos)
548                 aListBoxes[i]->SelectEntryPos(0);
549         }
550     }
551     SetModified();
552     return 0;
553 }
554 /* -----------------12.11.99 14:50-------------------
555 
556  --------------------------------------------------*/
IMPL_LINK(MappingDialog_Impl,OkHdl,OKButton *,EMPTYARG)557 IMPL_LINK(MappingDialog_Impl, OkHdl, OKButton*, EMPTYARG)
558 {
559     if(bModified)
560     {
561         Mapping aNew;
562         aNew.sTableName = String(pDatMan->getActiveDataTable());
563         aNew.sURL = String(pDatMan->getActiveDataSource());
564 
565         sal_uInt16 nWriteIndex = 0;
566         BibConfig* pConfig = BibModul::GetConfig();
567         for(sal_uInt16 nEntry = 0; nEntry < COLUMN_COUNT; nEntry++)
568         {
569             String sSel = aListBoxes[nEntry]->GetSelectEntry();
570             if(sSel != sNone)
571             {
572                 aNew.aColumnPairs[nWriteIndex].sRealColumnName = sSel;
573                 aNew.aColumnPairs[nWriteIndex].sLogicalColumnName = pConfig->GetDefColumnName(nEntry);
574                 nWriteIndex++;
575             }
576         }
577         BibDBDescriptor aDesc;
578         aDesc.sDataSource = pDatMan->getActiveDataSource();
579         aDesc.sTableOrQuery = pDatMan->getActiveDataTable();
580         aDesc.nCommandType = CommandType::TABLE;
581         pDatMan->ResetIdentifierMapping();
582         pConfig->SetMapping(aDesc, &aNew);
583     }
584     EndDialog(bModified ? RET_OK : RET_CANCEL);
585     return 0;
586 }
587 /* -----------------18.11.99 10:23-------------------
588 
589  --------------------------------------------------*/
590 class DBChangeDialog_Impl : public ModalDialog
591 {
592     OKButton        aOKBT;
593     CancelButton    aCancelBT;
594     HelpButton      aHelpBT;
595     FixedLine       aSelectionGB;
596     SvTabListBox    aSelectionLB;
597     HeaderBar       aSelectionHB;
598     DBChangeDialogConfig_Impl   aConfig;
599     String          aEntryST;
600     String          aURLST;
601 
602     BibDataManager* pDatMan;
603 
604 //  DECL_LINK(EndDragHdl, HeaderBar*);
605     DECL_LINK(DoubleClickHdl, SvTabListBox*);
606 public:
607     DBChangeDialog_Impl(Window* pParent, BibDataManager* pMan );
608     ~DBChangeDialog_Impl();
609 
610     String      GetCurrentURL()const;
611 };
612 
613 /*-- 18.11.99 10:35:20---------------------------------------------------
614 
615   -----------------------------------------------------------------------*/
DBChangeDialog_Impl(Window * pParent,BibDataManager * pMan)616 DBChangeDialog_Impl::DBChangeDialog_Impl(Window* pParent, BibDataManager* pMan ) :
617     ModalDialog(pParent, BibResId(RID_DLG_DBCHANGE) ),
618     aOKBT(this,         BibResId( BT_OK     )),
619     aCancelBT(this,     BibResId( BT_CANCEL )),
620     aHelpBT(this,       BibResId( BT_HELP       )),
621     aSelectionGB(this,  BibResId( GB_SELECTION )),
622     aSelectionLB(this,  BibResId( LB_SELECTION )),
623     aSelectionHB(this,  BibResId( HB_SELECTION )),
624     aEntryST(BibResId(ST_ENTRY)),
625     aURLST( BibResId(ST_URL)),
626     pDatMan(pMan)
627 {
628     FreeResource();
629     aSelectionLB.SetDoubleClickHdl( LINK(this, DBChangeDialog_Impl, DoubleClickHdl));
630     try
631     {
632         Reference< XMultiServiceFactory >  xMgr = comphelper::getProcessServiceFactory();
633 
634         ::Size aSize = aSelectionHB.GetSizePixel();
635         long nTabs[2];
636         nTabs[0] = 1;// Number of Tabs
637         nTabs[1] = aSize.Width() / 4;
638 
639         aSelectionHB.SetStyle(aSelectionHB.GetStyle()|WB_STDHEADERBAR);
640         aSelectionHB.InsertItem( 1, aEntryST, aSize.Width());
641         aSelectionHB.SetSizePixel(aSelectionHB.CalcWindowSizePixel());
642         aSelectionHB.Show();
643 
644         aSelectionLB.SetTabs( &nTabs[0], MAP_PIXEL );
645         aSelectionLB.SetStyle(aSelectionLB.GetStyle()|WB_CLIPCHILDREN|WB_SORT);
646         aSelectionLB.GetModel()->SetSortMode(SortAscending);
647 
648         ::rtl::OUString sActiveSource = pDatMan->getActiveDataSource();
649         const Sequence< ::rtl::OUString >& rSources = aConfig.GetDataSourceNames();
650         const ::rtl::OUString* pSourceNames = rSources.getConstArray();
651         for(int i = 0; i < rSources.getLength(); i++)
652         {
653             SvLBoxEntry* pEntry = aSelectionLB.InsertEntry(pSourceNames[i]);
654             if(pSourceNames[i] == sActiveSource)
655             {
656                 aSelectionLB.Select(pEntry);
657             }
658         }
659         aSelectionLB.GetModel()->Resort();
660     }
661     catch(Exception& e )
662     {
663         (void) e;   // make compiler happy
664         DBG_ERROR("Exception in BibDataManager::DBChangeDialog_Impl::DBChangeDialog_Impl");
665     }
666 
667 
668 }
669 /* -----------------06.12.99 12:09-------------------
670 
671  --------------------------------------------------*/
672 IMPL_LINK(DBChangeDialog_Impl, DoubleClickHdl, SvTabListBox*, /*pLB*/)
673 {
674     EndDialog(RET_OK);
675     return 0;
676 }
677 /* -----------------18.11.99 11:17-------------------
678 
679  --------------------------------------------------*/
680 /*IMPL_LINK(DBChangeDialog_Impl, EndDragHdl, HeaderBar*, pHB)
681 {
682     long nTabs[3];
683     nTabs[0] = 2;// Number of Tabs
684     nTabs[1] = 0;
685     nTabs[2] = pHB->GetItemSize( 1 );
686     aSelectionLB.SetTabs( &nTabs[0], MAP_PIXEL );
687     return 0;
688 };*/
689 
690 /*-- 18.11.99 10:35:20---------------------------------------------------
691 
692   -----------------------------------------------------------------------*/
~DBChangeDialog_Impl()693 DBChangeDialog_Impl::~DBChangeDialog_Impl()
694 {
695 }
696 /* -----------------18.11.99 12:36-------------------
697 
698  --------------------------------------------------*/
GetCurrentURL() const699 String  DBChangeDialog_Impl::GetCurrentURL()const
700 {
701     String sRet;
702     SvLBoxEntry* pEntry = aSelectionLB.FirstSelected();
703     if(pEntry)
704     {
705         sRet = aSelectionLB.GetEntryText(pEntry, 0);
706     }
707     return sRet;
708 }
709 
710 // #100312# --------------------------------------------------------------------
711 // XDispatchProvider
BibInterceptorHelper(::bib::BibBeamer * pBibBeamer,::com::sun::star::uno::Reference<::com::sun::star::frame::XDispatch> xDispatch)712 BibInterceptorHelper::BibInterceptorHelper( ::bib::BibBeamer* pBibBeamer, ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatch > xDispatch)
713 {
714     if( pBibBeamer )
715     {
716         xInterception = pBibBeamer->getDispatchProviderInterception();
717         if( xInterception.is() )
718             xInterception->registerDispatchProviderInterceptor( this );
719     }
720     if( xDispatch.is() )
721         xFormDispatch = xDispatch;
722 }
723 
~BibInterceptorHelper()724 BibInterceptorHelper::~BibInterceptorHelper( )
725 {
726 }
727 
ReleaseInterceptor()728 void BibInterceptorHelper::ReleaseInterceptor()
729 {
730     if ( xInterception.is() )
731         xInterception->releaseDispatchProviderInterceptor( this );
732     xInterception.clear();
733 }
734 
735 ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatch > SAL_CALL
queryDispatch(const::com::sun::star::util::URL & aURL,const::rtl::OUString & aTargetFrameName,sal_Int32 nSearchFlags)736     BibInterceptorHelper::queryDispatch( const ::com::sun::star::util::URL& aURL, const ::rtl::OUString& aTargetFrameName, sal_Int32 nSearchFlags ) throw (::com::sun::star::uno::RuntimeException)
737 {
738     Reference< XDispatch > xReturn;
739 
740     String aCommand( aURL.Path );
741     if ( aCommand.EqualsAscii("FormSlots/ConfirmDeletion") )
742         xReturn = xFormDispatch;
743     else
744         if ( xSlaveDispatchProvider.is() )
745             xReturn = xSlaveDispatchProvider->queryDispatch( aURL, aTargetFrameName, nSearchFlags);
746 
747     return xReturn;
748 }
749 
750 ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatch > > SAL_CALL
queryDispatches(const::com::sun::star::uno::Sequence<::com::sun::star::frame::DispatchDescriptor> & aDescripts)751     BibInterceptorHelper::queryDispatches( const ::com::sun::star::uno::Sequence< ::com::sun::star::frame::DispatchDescriptor >& aDescripts ) throw (::com::sun::star::uno::RuntimeException)
752 {
753     Sequence< Reference< XDispatch> > aReturn( aDescripts.getLength() );
754     Reference< XDispatch >* pReturn = aReturn.getArray();
755     const DispatchDescriptor* pDescripts = aDescripts.getConstArray();
756     for ( sal_Int16 i=0; i<aDescripts.getLength(); ++i, ++pReturn, ++pDescripts )
757     {
758         *pReturn = queryDispatch( pDescripts->FeatureURL, pDescripts->FrameName, pDescripts->SearchFlags );
759     }
760     return aReturn;
761 }
762 
763 // XDispatchProviderInterceptor
764 ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatchProvider > SAL_CALL
getSlaveDispatchProvider()765     BibInterceptorHelper::getSlaveDispatchProvider(  ) throw (::com::sun::star::uno::RuntimeException)
766 {
767     return xSlaveDispatchProvider;
768 }
769 
setSlaveDispatchProvider(const::com::sun::star::uno::Reference<::com::sun::star::frame::XDispatchProvider> & xNewSlaveDispatchProvider)770 void SAL_CALL BibInterceptorHelper::setSlaveDispatchProvider( const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatchProvider >& xNewSlaveDispatchProvider ) throw (::com::sun::star::uno::RuntimeException)
771 {
772     xSlaveDispatchProvider = xNewSlaveDispatchProvider;
773 }
774 
775 ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatchProvider > SAL_CALL
getMasterDispatchProvider()776     BibInterceptorHelper::getMasterDispatchProvider(  ) throw (::com::sun::star::uno::RuntimeException)
777 {
778     return xMasterDispatchProvider;
779 }
780 
setMasterDispatchProvider(const::com::sun::star::uno::Reference<::com::sun::star::frame::XDispatchProvider> & xNewMasterDispatchProvider)781 void SAL_CALL BibInterceptorHelper::setMasterDispatchProvider( const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatchProvider >& xNewMasterDispatchProvider ) throw (::com::sun::star::uno::RuntimeException)
782 {
783     xMasterDispatchProvider = xNewMasterDispatchProvider;
784 }
785 
786 //-----------------------------------------------------------------------------
787 #define STR_UID "uid"
788 ::rtl::OUString gGridName(C2U("theGrid"));
789 ::rtl::OUString gViewName(C2U("theView"));
790 ::rtl::OUString gGlobalName(C2U("theGlobals"));
791 ::rtl::OUString gBeamerSize(C2U("theBeamerSize"));
792 ::rtl::OUString gViewSize(C2U("theViewSize"));
793 
BibDataManager()794 BibDataManager::BibDataManager()
795     :BibDataManager_Base( GetMutex() )
796     // #100312# --------------
797     ,m_pInterceptorHelper( NULL )
798     ,m_aLoadListeners(m_aMutex)
799     ,pBibView( NULL )
800     ,pToolbar(0)
801 {
802 }
803 
804 /* --------------------------------------------------
805 
806  --------------------------------------------------*/
~BibDataManager()807 BibDataManager::~BibDataManager()
808 {
809     Reference< XLoadable >      xLoad( m_xForm, UNO_QUERY );
810     Reference< XPropertySet >   xPrSet( m_xForm, UNO_QUERY );
811     Reference< XComponent >     xComp( m_xForm, UNO_QUERY );
812     if ( m_xForm.is() )
813     {
814         Reference< XComponent >  xConnection;
815         xPrSet->getPropertyValue(C2U("ActiveConnection")) >>= xConnection;
816         RemoveMeAsUidListener();
817         if (xLoad.is())
818             xLoad->unload();
819         if (xComp.is())
820             xComp->dispose();
821         if(xConnection.is())
822             xConnection->dispose();
823         m_xForm = NULL;
824     }
825     // #100312# ----------------
826     if( m_pInterceptorHelper )
827     {
828         m_pInterceptorHelper->ReleaseInterceptor();
829         m_pInterceptorHelper->release();
830         m_pInterceptorHelper = NULL;
831     }
832 }
833 //------------------------------------------------------------------------
InsertFields(const Reference<XFormComponent> & _rxGrid)834 void BibDataManager::InsertFields(const Reference< XFormComponent > & _rxGrid)
835 {
836     if ( !_rxGrid.is() )
837         return;
838 
839     try
840     {
841         Reference< XNameContainer > xColContainer( _rxGrid, UNO_QUERY );
842         // remove the old fields
843         if ( xColContainer->hasElements() )
844         {
845             Sequence< ::rtl::OUString > aNames = xColContainer->getElementNames();
846             const ::rtl::OUString* pNames = aNames.getConstArray();
847             const ::rtl::OUString* pNamesEnd = pNames + aNames.getLength();
848             for ( ; pNames != pNamesEnd; ++pNames )
849                 xColContainer->removeByName( *pNames );
850         }
851 
852         Reference< XNameAccess >  xFields = getColumns( m_xForm );
853         if (!xFields.is())
854             return;
855 
856         Reference< XGridColumnFactory > xColFactory( _rxGrid, UNO_QUERY );
857 
858         Reference< XPropertySet >  xField;
859 
860         Sequence< ::rtl::OUString > aFields( xFields->getElementNames() );
861         const ::rtl::OUString* pFields = aFields.getConstArray();
862         const ::rtl::OUString* pFieldsEnd = pFields + aFields.getLength();
863 
864         for ( ; pFields != pFieldsEnd; ++pFields )
865         {
866             xFields->getByName( *pFields ) >>= xField;
867 
868             ::rtl::OUString sCurrentModelType;
869             const ::rtl::OUString sType(C2U("Type"));
870             sal_Int32 nType = 0;
871             sal_Bool bIsFormatted           = sal_False;
872             sal_Bool bFormattedIsNumeric    = sal_True;
873             xField->getPropertyValue(sType) >>= nType;
874             switch(nType)
875             {
876                 case DataType::BIT:
877                 case DataType::BOOLEAN:
878                     sCurrentModelType = C2U("CheckBox");
879                     break;
880 
881                 case DataType::BINARY:
882                 case DataType::VARBINARY:
883                 case DataType::LONGVARBINARY:
884                 case DataType::BLOB:
885                     sCurrentModelType = C2U("TextField");
886                     break;
887 
888                 case DataType::VARCHAR:
889                 case DataType::LONGVARCHAR:
890                 case DataType::CHAR:
891                 case DataType::CLOB:
892                     bFormattedIsNumeric = sal_False;
893                     // _NO_ break !
894                 default:
895                     sCurrentModelType = C2U("FormattedField");
896                     bIsFormatted = sal_True;
897                     break;
898             }
899 
900             Reference< XPropertySet >  xCurrentCol = xColFactory->createColumn(sCurrentModelType);
901             if (bIsFormatted)
902             {
903                 ::rtl::OUString sFormatKey(C2U("FormatKey"));
904                 xCurrentCol->setPropertyValue(sFormatKey, xField->getPropertyValue(sFormatKey));
905                 Any aFormatted(&bFormattedIsNumeric, ::getBooleanCppuType());
906                 xCurrentCol->setPropertyValue(C2U("TreatAsNumber"), aFormatted);
907             }
908             Any aColName = makeAny( *pFields );
909             xCurrentCol->setPropertyValue(FM_PROP_CONTROLSOURCE,    aColName);
910             xCurrentCol->setPropertyValue(FM_PROP_LABEL, aColName);
911 
912             xColContainer->insertByName( *pFields, makeAny( xCurrentCol ) );
913         }
914     }
915     catch(Exception& e )
916     {
917         (void) e;   // make compiler happy
918         DBG_ERROR("Exception in BibDataManager::InsertFields");
919     }
920 }
921 /* --------------------------------------------------
922 
923  --------------------------------------------------*/
updateGridModel()924 Reference< awt::XControlModel > BibDataManager::updateGridModel()
925 {
926     return updateGridModel( m_xForm );
927 }
928 /* --------------------------------------------------
929 
930  --------------------------------------------------*/
updateGridModel(const Reference<XForm> & xDbForm)931 Reference< awt::XControlModel > BibDataManager::updateGridModel(const Reference< XForm > & xDbForm)
932 {
933     try
934     {
935         Reference< XPropertySet >  aFormPropSet( xDbForm, UNO_QUERY );
936         ::rtl::OUString sName;
937         aFormPropSet->getPropertyValue(C2U("Command")) >>= sName;
938 
939         if ( !m_xGridModel.is() )
940         {
941             m_xGridModel = createGridModel( gGridName );
942 
943             Reference< XNameContainer >  xNameCont(xDbForm, UNO_QUERY);
944 //          if (xNameCont->hasByName(sName))
945 //              xNameCont->removeByName(sName);
946 //
947             xNameCont->insertByName( sName, makeAny( m_xGridModel ) );
948         }
949 
950         // insert the fields
951         Reference< XFormComponent > xFormComp( m_xGridModel, UNO_QUERY );
952         InsertFields( xFormComp );
953     }
954     catch(Exception& e )
955     {
956         (void) e;   // make compiler happy
957         DBG_ERROR("::updateGridModel: something went wrong !");
958     }
959 
960 
961     return m_xGridModel;
962 }
963 /* --------------------------------------------------
964 
965  --------------------------------------------------*/
createDatabaseForm(BibDBDescriptor & rDesc)966 Reference< XForm >  BibDataManager::createDatabaseForm(BibDBDescriptor& rDesc)
967 {
968     Reference< XForm >  xResult;
969     try
970     {
971         Reference< XMultiServiceFactory >  xMgr = comphelper::getProcessServiceFactory();
972         m_xForm = Reference< XForm > ( xMgr->createInstance( C2U("com.sun.star.form.component.Form") ), UNO_QUERY );
973 
974         Reference< XPropertySet >  aPropertySet( m_xForm, UNO_QUERY );
975 
976         aDataSourceURL = rDesc.sDataSource;
977         if(aPropertySet.is())
978         {
979             Any aVal;
980             aVal <<= (sal_Int32)ResultSetType::SCROLL_INSENSITIVE;
981             aPropertySet->setPropertyValue(C2U("ResultSetType"),aVal );
982             aVal <<= (sal_Int32)ResultSetConcurrency::READ_ONLY;
983             aPropertySet->setPropertyValue(C2U("ResultSetConcurrency"), aVal);
984 
985             //Caching for Performance
986             aVal <<= (sal_Int32)50;
987             aPropertySet->setPropertyValue(C2U("FetchSize"), aVal);
988 
989             Reference< XConnection >    xConnection = getConnection(rDesc.sDataSource);
990             aVal <<= xConnection;
991             aPropertySet->setPropertyValue(C2U("ActiveConnection"), aVal);
992 
993             Reference< XTablesSupplier >  xSupplyTables(xConnection, UNO_QUERY);
994             Reference< XNameAccess >  xTables = xSupplyTables.is() ?
995                                 xSupplyTables->getTables() : Reference< XNameAccess > ();
996 
997             Sequence< ::rtl::OUString > aTableNameSeq;
998             if (xTables.is())
999                 aTableNameSeq = xTables->getElementNames();
1000 
1001             if(aTableNameSeq.getLength() > 0)
1002             {
1003                 const ::rtl::OUString* pTableNames = aTableNameSeq.getConstArray();
1004                 if(rDesc.sTableOrQuery.getLength())
1005                     aActiveDataTable = rDesc.sTableOrQuery;
1006                 else
1007                 {
1008                     rDesc.sTableOrQuery = aActiveDataTable = pTableNames[0];
1009                     rDesc.nCommandType = CommandType::TABLE;
1010                 }
1011 
1012                 aVal <<= aActiveDataTable;
1013                 aPropertySet->setPropertyValue(C2U("Command"), aVal);
1014                 aVal <<= rDesc.nCommandType;
1015                 aPropertySet->setPropertyValue(C2U("CommandType"), aVal);
1016 
1017 
1018                 Reference< XDatabaseMetaData >  xMetaData = xConnection->getMetaData();
1019                 aQuoteChar = xMetaData->getIdentifierQuoteString();
1020 
1021                 Reference< XMultiServiceFactory > xFactory(xConnection, UNO_QUERY);
1022                 if ( xFactory.is() )
1023                     m_xParser.set( xFactory->createInstance( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.sdb.SingleSelectQueryComposer" ) ) ), UNO_QUERY );
1024 
1025                 ::rtl::OUString aString(C2U("SELECT * FROM "));
1026 
1027                 ::rtl::OUString sCatalog, sSchema, sName;
1028                 ::dbtools::qualifiedNameComponents( xMetaData, aActiveDataTable, sCatalog, sSchema, sName, ::dbtools::eInDataManipulation );
1029                 aString += ::dbtools::composeTableNameForSelect( xConnection, sCatalog, sSchema, sName );
1030 
1031                 m_xParser->setElementaryQuery(aString);
1032                 BibConfig* pConfig = BibModul::GetConfig();
1033                 pConfig->setQueryField(getQueryField());
1034                 startQueryWith(pConfig->getQueryText());
1035 
1036                 xResult = m_xForm;
1037             }
1038         }
1039     }
1040     catch(Exception& e )
1041     {
1042         (void) e;   // make compiler happy
1043         DBG_ERROR("::createDatabaseForm: something went wrong !");
1044     }
1045 
1046 
1047     return xResult;
1048 }
1049 //------------------------------------------------------------------------
getDataSources()1050 Sequence< ::rtl::OUString > BibDataManager::getDataSources()
1051 {
1052     Sequence< ::rtl::OUString > aTableNameSeq;
1053 
1054     try
1055     {
1056         Reference< XTablesSupplier >  xSupplyTables( getConnection( m_xForm ), UNO_QUERY );
1057         Reference< XNameAccess >  xTables;
1058         if (xSupplyTables.is())
1059             xTables = xSupplyTables->getTables();
1060         if (xTables.is())
1061             aTableNameSeq = xTables->getElementNames();
1062     }
1063     catch(Exception& e )
1064     {
1065         (void) e;   // make compiler happy
1066         DBG_ERROR("::getDataSources: something went wrong !");
1067     }
1068 
1069 
1070     return aTableNameSeq;
1071 }
1072 //------------------------------------------------------------------------
getActiveDataTable()1073 ::rtl::OUString BibDataManager::getActiveDataTable()
1074 {
1075     return aActiveDataTable;
1076 }
1077 //------------------------------------------------------------------------
setFilter(const::rtl::OUString & rQuery)1078 void BibDataManager::setFilter(const ::rtl::OUString& rQuery)
1079 {
1080     if(!m_xParser.is())
1081         return;
1082     try
1083     {
1084         m_xParser->setFilter( rQuery );
1085         ::rtl::OUString aQuery = m_xParser->getFilter();
1086         Reference< XPropertySet >  xFormProps( m_xForm, UNO_QUERY_THROW );
1087         xFormProps->setPropertyValue( C2U( "Filter" ), makeAny( aQuery ) );
1088         xFormProps->setPropertyValue( C2U( "ApplyFilter" ), makeAny( sal_True ) );
1089         reload();
1090     }
1091     catch(Exception& e )
1092     {
1093         DBG_UNHANDLED_EXCEPTION();
1094     }
1095 
1096 
1097 }
1098 //------------------------------------------------------------------------
getFilter()1099 ::rtl::OUString BibDataManager::getFilter()
1100 {
1101 
1102     ::rtl::OUString aQueryString;
1103     try
1104     {
1105         Reference< XPropertySet > xFormProps( m_xForm, UNO_QUERY_THROW );
1106         OSL_VERIFY( xFormProps->getPropertyValue( C2U( "Filter" ) ) >>= aQueryString );
1107     }
1108     catch( const Exception& )
1109     {
1110         DBG_UNHANDLED_EXCEPTION();
1111     }
1112 
1113 
1114     return aQueryString;
1115 
1116 }
1117 //------------------------------------------------------------------------
getQueryFields()1118 Sequence< ::rtl::OUString > BibDataManager::getQueryFields()
1119 {
1120     Sequence< ::rtl::OUString > aFieldSeq;
1121     Reference< XNameAccess >  xFields = getColumns( m_xForm );
1122     if (xFields.is())
1123         aFieldSeq = xFields->getElementNames();
1124     return aFieldSeq;
1125 }
1126 //------------------------------------------------------------------------
getQueryField()1127 ::rtl::OUString BibDataManager::getQueryField()
1128 {
1129     BibConfig* pConfig = BibModul::GetConfig();
1130     ::rtl::OUString aFieldString = pConfig->getQueryField();
1131     if(!aFieldString.getLength())
1132     {
1133         Sequence< ::rtl::OUString > aSeq = getQueryFields();
1134         const ::rtl::OUString* pFields = aSeq.getConstArray();
1135         if(aSeq.getLength()>0)
1136         {
1137             aFieldString=pFields[0];
1138         }
1139     }
1140     return aFieldString;
1141 }
1142 //------------------------------------------------------------------------
startQueryWith(const::rtl::OUString & rQuery)1143 void BibDataManager::startQueryWith(const ::rtl::OUString& rQuery)
1144 {
1145     BibConfig* pConfig = BibModul::GetConfig();
1146     pConfig->setQueryText( rQuery );
1147 
1148     ::rtl::OUString aQueryString;
1149     if(rQuery.getLength()>0)
1150     {
1151         aQueryString=aQuoteChar;
1152         aQueryString+=getQueryField();
1153         aQueryString+=aQuoteChar;
1154         aQueryString+=C2U(" like '");
1155         String sQuery(rQuery);
1156         sQuery.SearchAndReplaceAll('?','_');
1157         sQuery.SearchAndReplaceAll('*','%');
1158         aQueryString += sQuery;
1159         aQueryString+=C2U("%'");
1160     }
1161     setFilter(aQueryString);
1162 }
1163 /* -----------------03.12.99 15:05-------------------
1164 
1165  --------------------------------------------------*/
setActiveDataSource(const::rtl::OUString & rURL)1166 void BibDataManager::setActiveDataSource(const ::rtl::OUString& rURL)
1167 {
1168     ::rtl::OUString uTable;
1169     ::rtl::OUString sTmp(aDataSourceURL);
1170     aDataSourceURL = rURL;
1171 
1172     Reference< XPropertySet >  aPropertySet( m_xForm, UNO_QUERY );
1173     if(aPropertySet.is())
1174     {
1175         unload();
1176 
1177         Reference< XComponent >  xOldConnection;
1178         aPropertySet->getPropertyValue(C2U("ActiveConnection")) >>= xOldConnection;
1179 
1180         Reference< XConnection >    xConnection = getConnection(rURL);
1181         if(!xConnection.is())
1182         {
1183             aDataSourceURL = sTmp;
1184             return;
1185         }
1186         Any aVal; aVal <<= xConnection;
1187         aPropertySet->setPropertyValue(C2U("ActiveConnection"), aVal);
1188         Reference< XMultiServiceFactory >   xFactory(xConnection, UNO_QUERY);
1189         if ( xFactory.is() )
1190             m_xParser.set( xFactory->createInstance( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.sdb.SingleSelectQueryComposer" ) ) ), UNO_QUERY );
1191 
1192         if(xOldConnection.is())
1193             xOldConnection->dispose();
1194 
1195         Sequence< ::rtl::OUString > aTableNameSeq;
1196         Reference< XTablesSupplier >  xSupplyTables(xConnection, UNO_QUERY);
1197         if(xSupplyTables.is())
1198         {
1199             Reference< XNameAccess >  xAccess = xSupplyTables->getTables();
1200             aTableNameSeq = xAccess->getElementNames();
1201         }
1202         if(aTableNameSeq.getLength() > 0)
1203         {
1204             const ::rtl::OUString* pTableNames = aTableNameSeq.getConstArray();
1205             aActiveDataTable = pTableNames[0];
1206             aVal <<= aActiveDataTable;
1207             aPropertySet->setPropertyValue(C2U("Command"), aVal);
1208             aPropertySet->setPropertyValue(C2U("CommandType"), makeAny(CommandType::TABLE));
1209             //Caching for Performance
1210             aVal <<= (sal_Int32)50;
1211             aPropertySet->setPropertyValue(C2U("FetchSize"), aVal);
1212             ::rtl::OUString aString(C2U("SELECT * FROM "));
1213             // quote the table name which may contain catalog.schema.table
1214             Reference<XDatabaseMetaData> xMetaData(xConnection->getMetaData(),UNO_QUERY);
1215             aQuoteChar = xMetaData->getIdentifierQuoteString();
1216 
1217             ::rtl::OUString sCatalog, sSchema, sName;
1218             ::dbtools::qualifiedNameComponents( xMetaData, aActiveDataTable, sCatalog, sSchema, sName, ::dbtools::eInDataManipulation );
1219             aString += ::dbtools::composeTableNameForSelect( xConnection, sCatalog, sSchema, sName );
1220 
1221             m_xParser->setElementaryQuery(aString);
1222             BibConfig* pConfig = BibModul::GetConfig();
1223             pConfig->setQueryField(getQueryField());
1224             startQueryWith(pConfig->getQueryText());
1225             setActiveDataTable(aActiveDataTable);
1226         }
1227         FeatureStateEvent aEvent;
1228         util::URL aURL;
1229         aEvent.IsEnabled  = sal_True;
1230         aEvent.Requery    = sal_False;
1231         aEvent.FeatureDescriptor = getActiveDataTable();
1232 
1233         aEvent.State = makeAny( getDataSources() );
1234 
1235         if(pToolbar)
1236         {
1237             aURL.Complete =C2U(".uno:Bib/source");
1238             aEvent.FeatureURL = aURL;
1239             pToolbar->statusChanged( aEvent );
1240         }
1241 
1242         updateGridModel();
1243         load();
1244     }
1245 }
1246 
1247 /* --------------------------------------------------
1248 
1249  --------------------------------------------------*/
setActiveDataTable(const::rtl::OUString & rTable)1250 void BibDataManager::setActiveDataTable(const ::rtl::OUString& rTable)
1251 {
1252     ResetIdentifierMapping();
1253     try
1254     {
1255         Reference< XPropertySet >  aPropertySet( m_xForm, UNO_QUERY );
1256 
1257         if(aPropertySet.is())
1258         {
1259             Reference< XConnection >    xConnection = getConnection( m_xForm );
1260             Reference< XTablesSupplier >  xSupplyTables(xConnection, UNO_QUERY);
1261             Reference< XNameAccess > xAccess = xSupplyTables->getTables();
1262             Sequence< ::rtl::OUString > aTableNameSeq = xAccess->getElementNames();
1263             sal_uInt32 nCount = aTableNameSeq.getLength();
1264 
1265             const ::rtl::OUString* pTableNames = aTableNameSeq.getConstArray();
1266             const ::rtl::OUString* pTableNamesEnd = pTableNames + nCount;
1267 
1268             for ( ; pTableNames != pTableNamesEnd; ++pTableNames )
1269             {
1270                 if ( rTable == *pTableNames )
1271                 {
1272                     aActiveDataTable = rTable;
1273                     Any aVal; aVal <<= rTable;
1274                     aPropertySet->setPropertyValue( C2U("Command"), aVal );
1275                     break;
1276                 }
1277             }
1278             if (pTableNames != pTableNamesEnd)
1279             {
1280                 Reference< XDatabaseMetaData >  xMetaData = xConnection->getMetaData();
1281                 aQuoteChar = xMetaData->getIdentifierQuoteString();
1282 
1283                 Reference< XMultiServiceFactory > xFactory(xConnection, UNO_QUERY);
1284                 if ( xFactory.is() )
1285                     m_xParser.set( xFactory->createInstance( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.sdb.SingleSelectQueryComposer" ) ) ), UNO_QUERY );
1286 
1287                 ::rtl::OUString aString(C2U("SELECT * FROM "));
1288 
1289                 ::rtl::OUString sCatalog, sSchema, sName;
1290                 ::dbtools::qualifiedNameComponents( xMetaData, aActiveDataTable, sCatalog, sSchema, sName, ::dbtools::eInDataManipulation );
1291                 aString += ::dbtools::composeTableNameForSelect( xConnection, sCatalog, sSchema, sName );
1292 
1293                 m_xParser->setElementaryQuery(aString);
1294 
1295                 BibConfig* pConfig = BibModul::GetConfig();
1296                 pConfig->setQueryField(getQueryField());
1297                 startQueryWith(pConfig->getQueryText());
1298 
1299                 BibDBDescriptor aDesc;
1300                 aDesc.sDataSource = aDataSourceURL;
1301                 aDesc.sTableOrQuery = aActiveDataTable;
1302                 aDesc.nCommandType = CommandType::TABLE;
1303                 BibModul::GetConfig()->SetBibliographyURL(aDesc);
1304             }
1305         }
1306     }
1307     catch(Exception& e )
1308     {
1309         (void) e;   // make compiler happy
1310         DBG_ERROR("::setActiveDataTable: something went wrong !");
1311     }
1312 
1313 }
1314 
1315 //------------------------------------------------------------------------
load()1316 void SAL_CALL BibDataManager::load(  ) throw (RuntimeException)
1317 {
1318     if ( isLoaded() )
1319         // nothing to do
1320         return;
1321 
1322     Reference< XLoadable > xFormAsLoadable( m_xForm, UNO_QUERY );
1323     DBG_ASSERT( xFormAsLoadable.is() || !m_xForm.is(), "BibDataManager::load: invalid form!");
1324     if ( xFormAsLoadable.is() )
1325     {
1326         xFormAsLoadable->load();
1327         SetMeAsUidListener();
1328 
1329         EventObject aEvt( static_cast< XWeak* >( this ) );
1330         m_aLoadListeners.notifyEach( &XLoadListener::loaded, aEvt );
1331     }
1332 }
1333 
1334 //------------------------------------------------------------------------
unload()1335 void SAL_CALL BibDataManager::unload(  ) throw (RuntimeException)
1336 {
1337     if ( !isLoaded() )
1338         // nothing to do
1339         return;
1340 
1341     Reference< XLoadable >xFormAsLoadable( m_xForm, UNO_QUERY );
1342     DBG_ASSERT( xFormAsLoadable.is() || !m_xForm.is(), "BibDataManager::unload: invalid form!");
1343     if ( xFormAsLoadable.is() )
1344     {
1345         EventObject aEvt( static_cast< XWeak* >( this ) );
1346 
1347         {
1348             m_aLoadListeners.notifyEach( &XLoadListener::unloading, aEvt );
1349         }
1350 
1351         RemoveMeAsUidListener();
1352         xFormAsLoadable->unload();
1353 
1354         {
1355             m_aLoadListeners.notifyEach( &XLoadListener::unloaded, aEvt );
1356         }
1357     }
1358 }
1359 
1360 //------------------------------------------------------------------------
reload()1361 void SAL_CALL BibDataManager::reload(  ) throw (RuntimeException)
1362 {
1363     if ( !isLoaded() )
1364         // nothing to do
1365         return;
1366 
1367     Reference< XLoadable >xFormAsLoadable( m_xForm, UNO_QUERY );
1368     DBG_ASSERT( xFormAsLoadable.is() || !m_xForm.is(), "BibDataManager::unload: invalid form!");
1369     if ( xFormAsLoadable.is() )
1370     {
1371         EventObject aEvt( static_cast< XWeak* >( this ) );
1372 
1373         {
1374             m_aLoadListeners.notifyEach( &XLoadListener::reloading, aEvt );
1375         }
1376 
1377         xFormAsLoadable->reload();
1378 
1379         {
1380             m_aLoadListeners.notifyEach( &XLoadListener::reloaded, aEvt );
1381         }
1382     }
1383 }
1384 
1385 //------------------------------------------------------------------------
isLoaded()1386 sal_Bool SAL_CALL BibDataManager::isLoaded(  ) throw (RuntimeException)
1387 {
1388     Reference< XLoadable >xFormAsLoadable( m_xForm, UNO_QUERY );
1389     DBG_ASSERT( xFormAsLoadable.is() || !m_xForm.is(), "BibDataManager::isLoaded: invalid form!");
1390 
1391     sal_Bool bLoaded = sal_False;
1392     if ( xFormAsLoadable.is() )
1393         bLoaded = xFormAsLoadable->isLoaded();
1394     return bLoaded;
1395 }
1396 
1397 //------------------------------------------------------------------------
addLoadListener(const Reference<XLoadListener> & aListener)1398 void SAL_CALL BibDataManager::addLoadListener( const Reference< XLoadListener >& aListener ) throw (RuntimeException)
1399 {
1400     m_aLoadListeners.addInterface( aListener );
1401 }
1402 
1403 //------------------------------------------------------------------------
removeLoadListener(const Reference<XLoadListener> & aListener)1404 void SAL_CALL BibDataManager::removeLoadListener( const Reference< XLoadListener >& aListener ) throw (RuntimeException)
1405 {
1406     m_aLoadListeners.removeInterface( aListener );
1407 }
1408 
1409 //------------------------------------------------------------------------
createGridModel(const::rtl::OUString & rName)1410 Reference< awt::XControlModel > BibDataManager::createGridModel(const ::rtl::OUString& rName)
1411 {
1412     Reference< awt::XControlModel > xModel;
1413 
1414     try
1415     {
1416         // create the control model
1417         Reference< XMultiServiceFactory >  xMgr = ::comphelper::getProcessServiceFactory();
1418         Reference< XInterface >  xObject = xMgr->createInstance(C2U("com.sun.star.form.component.GridControl"));
1419         xModel=Reference< awt::XControlModel > ( xObject, UNO_QUERY );
1420 
1421         // set the
1422         Reference< XPropertySet > xPropSet( xModel, UNO_QUERY );
1423         xPropSet->setPropertyValue( C2U("Name"), makeAny( rName ) );
1424 
1425         // set the name of the to-be-created control
1426         ::rtl::OUString aControlName(C2U("com.sun.star.form.control.InteractionGridControl"));
1427         Any aAny; aAny <<= aControlName;
1428         xPropSet->setPropertyValue( C2U("DefaultControl"),aAny );
1429 
1430         // the the helpURL
1431         ::rtl::OUString uProp(C2U("HelpURL"));
1432         Reference< XPropertySetInfo > xPropInfo = xPropSet->getPropertySetInfo();
1433         if (xPropInfo->hasPropertyByName(uProp))
1434         {
1435             ::rtl::OUString sId = ::rtl::OUString::createFromAscii( INET_HID_SCHEME );
1436             sId += ::rtl::OUString::createFromAscii( HID_BIB_DB_GRIDCTRL );
1437             xPropSet->setPropertyValue( uProp, makeAny( sId ) );
1438         }
1439     }
1440     catch(Exception& e )
1441     {
1442         (void) e;   // make compiler happy
1443         DBG_ERROR("::createGridModel: something went wrong !");
1444     }
1445 
1446 
1447     return xModel;
1448 }
1449 //------------------------------------------------------------------------
getControlName(sal_Int32 nFormatKey)1450 ::rtl::OUString BibDataManager::getControlName(sal_Int32 nFormatKey )
1451 {
1452     ::rtl::OUString aResStr;
1453     switch (nFormatKey)
1454     {
1455         case DataType::BIT:
1456         case DataType::BOOLEAN:
1457             aResStr=C2U("CheckBox");
1458             break;
1459         case DataType::TINYINT:
1460         case DataType::SMALLINT:
1461         case DataType::INTEGER:
1462             aResStr=C2U("NumericField");   ;
1463             break;
1464         case DataType::REAL:
1465         case DataType::DOUBLE:
1466         case DataType::NUMERIC:
1467         case DataType::DECIMAL:
1468             aResStr=C2U("FormattedField");
1469             break;
1470         case DataType::TIMESTAMP:
1471             aResStr=C2U("FormattedField");
1472             break;
1473         case DataType::DATE:
1474             aResStr=C2U("DateField");
1475             break;
1476         case DataType::TIME:
1477             aResStr=C2U("TimeField");
1478             break;
1479         case DataType::CHAR:
1480         case DataType::VARCHAR:
1481         case DataType::LONGVARCHAR:
1482         default:
1483             aResStr=C2U("TextField");
1484             break;
1485     }
1486     return aResStr;
1487 }
1488 //------------------------------------------------------------------------
loadControlModel(const::rtl::OUString & rName,sal_Bool bForceListBox)1489 Reference< awt::XControlModel > BibDataManager::loadControlModel(
1490                     const ::rtl::OUString& rName, sal_Bool bForceListBox)
1491 {
1492     Reference< awt::XControlModel > xModel;
1493     ::rtl::OUString aName(C2U("View_"));
1494     aName += rName;
1495 
1496     try
1497     {
1498         Reference< XNameAccess >  xFields = getColumns( m_xForm );
1499         if (!xFields.is())
1500             return xModel;
1501         Reference< XPropertySet >  xField;
1502 
1503         Any aElement;
1504 
1505         if(xFields->hasByName(rName))
1506         {
1507             aElement = xFields->getByName(rName);
1508             aElement >>= xField;
1509             Reference< XPropertySetInfo >  xInfo = xField.is() ? xField->getPropertySetInfo() : Reference< XPropertySetInfo > ();
1510 
1511             ::rtl::OUString sCurrentModelType;
1512             const ::rtl::OUString sType(C2U("Type"));
1513             sal_Int32 nFormatKey = 0;
1514             xField->getPropertyValue(sType) >>= nFormatKey;
1515 
1516             ::rtl::OUString aInstanceName(C2U("com.sun.star.form.component."));
1517 
1518             if (bForceListBox)
1519                 aInstanceName += C2U("ListBox");
1520             else
1521                 aInstanceName += getControlName(nFormatKey);
1522 
1523             Reference< XMultiServiceFactory >  xMgr = comphelper::getProcessServiceFactory();
1524             Reference< XInterface >  xObject = xMgr->createInstance(aInstanceName);
1525             xModel=Reference< awt::XControlModel > ( xObject, UNO_QUERY );
1526             Reference< XPropertySet >  xPropSet( xModel, UNO_QUERY );
1527             Any aFieldName; aFieldName <<= aName;
1528 
1529             xPropSet->setPropertyValue( FM_PROP_NAME,aFieldName);
1530             xPropSet->setPropertyValue( FM_PROP_CONTROLSOURCE, makeAny( rName ) );
1531             xPropSet->setPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "NativeWidgetLook" ) ), makeAny( (sal_Bool)sal_True ) );
1532 
1533             Reference< XFormComponent >  aFormComp(xModel,UNO_QUERY );
1534 
1535             Reference< XNameContainer >  xNameCont( m_xForm, UNO_QUERY );
1536             xNameCont->insertByName(aName, makeAny( aFormComp ) );
1537 
1538             // now if the form where we inserted the new model is already loaded, notify the model of this
1539             // Note that this implementation below is a HACK as it relies on the fact that the model adds itself
1540             // as load listener to it's parent, which is an implementation detail of the model.
1541             //
1542             // the better solution would be the following:
1543             // in the current scenario, we insert a control model into a form. This results in the control model
1544             // adding itself as load listener to the form. Now, the form should realize that it's already loaded
1545             // and notify the model (which it knows as XLoadListener only) immediately. This seems to make sense.
1546             // (as an anologon to the XStatusListener semantics).
1547             //
1548             // But this would be way too risky for this last-day fix here.
1549             // 97140 - 30.01.2002 - fs@openoffice.org
1550             Reference< XLoadable > xLoad( m_xForm, UNO_QUERY );
1551             if ( xLoad.is() && xLoad->isLoaded() )
1552             {
1553                 Reference< XLoadListener > xListener( aFormComp, UNO_QUERY );
1554                 if ( xListener.is() )
1555                 {
1556                     EventObject aLoadSource;
1557                     aLoadSource.Source = xLoad;
1558                     xListener->loaded( aLoadSource );
1559                 }
1560             }
1561         }
1562     }
1563     catch(Exception& e )
1564     {
1565         (void) e;   // make compiler happy
1566         DBG_ERROR("::loadControlModel: something went wrong !");
1567     }
1568     return xModel;
1569 }
1570 //------------------------------------------------------------------------
disposing()1571 void SAL_CALL BibDataManager::disposing()
1572 {
1573     BibDataManager_Base::WeakComponentImplHelperBase::disposing();
1574 }
1575 
1576 //------------------------------------------------------------------------
disposing(const EventObject &)1577 void BibDataManager::disposing( const EventObject& /*Source*/ ) throw( ::com::sun::star::uno::RuntimeException )
1578 {
1579     // not interested in
1580 }
1581 
1582 //------------------------------------------------------------------------
propertyChange(const beans::PropertyChangeEvent & evt)1583 void BibDataManager::propertyChange(const beans::PropertyChangeEvent& evt) throw( RuntimeException )
1584 {
1585     try
1586     {
1587         sal_Bool bFlag=sal_False;
1588         if(evt.PropertyName == FM_PROP_VALUE)
1589         {
1590             if( evt.NewValue.getValueType() == ::getCppuType((Reference<io::XInputStream>*)0) )
1591             {
1592                 Reference< io::XDataInputStream >  xStream(
1593                     *(const Reference< io::XInputStream > *)evt.NewValue.getValue(), UNO_QUERY );
1594                 aUID <<= xStream->readUTF();
1595             }
1596             else
1597                 aUID = evt.NewValue;
1598 
1599             Reference< XRowLocate > xLocate(xBibCursor, UNO_QUERY);
1600             DBG_ASSERT(xLocate.is(), "BibDataManager::propertyChange : invalid cursor !");
1601             bFlag = xLocate->moveToBookmark(aUID);
1602         }
1603     }
1604     catch(Exception& e )
1605     {
1606         (void) e;   // make compiler happy
1607         DBG_ERROR("::propertyChange: something went wrong !");
1608     }
1609 
1610 
1611 }
1612 //------------------------------------------------------------------------
SetMeAsUidListener()1613 void BibDataManager::SetMeAsUidListener()
1614 {
1615 try
1616 {
1617     Reference< XNameAccess >  xFields = getColumns( m_xForm );
1618     if (!xFields.is())
1619         return;
1620 
1621     Sequence< ::rtl::OUString > aFields(xFields->getElementNames());
1622     const ::rtl::OUString* pFields = aFields.getConstArray();
1623     sal_Int32 nCount=aFields.getLength();
1624     String StrUID(C2S(STR_UID));
1625     ::rtl::OUString theFieldName;
1626     for( sal_Int32 i=0; i<nCount; i++ )
1627     {
1628         String aName= pFields[i];
1629 
1630         if(aName.EqualsIgnoreCaseAscii(StrUID))
1631         {
1632             theFieldName=pFields[i];
1633             break;
1634         }
1635     }
1636 
1637     if(theFieldName.getLength()>0)
1638     {
1639         Reference< XPropertySet >  xPropSet;
1640         Any aElement;
1641 
1642         aElement = xFields->getByName(theFieldName);
1643         xPropSet = *(Reference< XPropertySet > *)aElement.getValue();
1644 
1645         xPropSet->addPropertyChangeListener(FM_PROP_VALUE, this);
1646     }
1647 
1648 }
1649 catch(Exception& e )
1650 {
1651     (void) e;   // make compiler happy
1652     DBG_ERROR("Exception in BibDataManager::SetMeAsUidListener");
1653 }
1654 
1655 
1656 }
1657 //------------------------------------------------------------------------
RemoveMeAsUidListener()1658 void BibDataManager::RemoveMeAsUidListener()
1659 {
1660 try
1661 {
1662     Reference< XNameAccess >  xFields = getColumns( m_xForm );
1663     if (!xFields.is())
1664         return;
1665 
1666 
1667     Sequence< ::rtl::OUString > aFields(xFields->getElementNames());
1668     const ::rtl::OUString* pFields = aFields.getConstArray();
1669     sal_Int32 nCount=aFields.getLength();
1670     String StrUID(C2S(STR_UID));
1671     ::rtl::OUString theFieldName;
1672     for( sal_Int32 i=0; i<nCount; i++ )
1673     {
1674         String aName= pFields[i];
1675 
1676         if(aName.EqualsIgnoreCaseAscii(StrUID))
1677         {
1678             theFieldName=pFields[i];
1679             break;
1680         }
1681     }
1682 
1683     if(theFieldName.getLength()>0)
1684     {
1685         Reference< XPropertySet >  xPropSet;
1686         Any aElement;
1687 
1688         aElement = xFields->getByName(theFieldName);
1689         xPropSet = *(Reference< XPropertySet > *)aElement.getValue();
1690 
1691         xPropSet->removePropertyChangeListener(FM_PROP_VALUE, this);
1692     }
1693 
1694 }
1695 catch(Exception& e )
1696 {
1697     (void) e;   // make compiler happy
1698     DBG_ERROR("Exception in BibDataManager::RemoveMeAsUidListener");
1699 }
1700 
1701 
1702 }
1703 /* -----------------11.11.99 15:51-------------------
1704 
1705  --------------------------------------------------*/
CreateMappingDialog(Window * pParent)1706 void BibDataManager::CreateMappingDialog(Window* pParent)
1707 {
1708     MappingDialog_Impl* pDlg = new MappingDialog_Impl(pParent, this);
1709     if(RET_OK == pDlg->Execute() && pBibView)
1710     {
1711         reload();
1712 //      unload();
1713 //      pBibView->UpdatePages();
1714 //      load();
1715     }
1716     delete pDlg;
1717 }
1718 /* --------------------------------------------------
1719 
1720  --------------------------------------------------*/
CreateDBChangeDialog(Window * pParent)1721 ::rtl::OUString BibDataManager::CreateDBChangeDialog(Window* pParent)
1722 {
1723     ::rtl::OUString uRet;
1724     DBChangeDialog_Impl * pDlg = new DBChangeDialog_Impl(pParent, this );
1725     if(RET_OK == pDlg->Execute())
1726     {
1727         String sNewURL = pDlg->GetCurrentURL();
1728         if(sNewURL != String(getActiveDataSource()))
1729         {
1730             uRet = sNewURL;
1731         }
1732     }
1733     delete pDlg;
1734     return uRet;
1735 }
1736 /*-- 18.05.2004 15:20:15---------------------------------------------------
1737 
1738   -----------------------------------------------------------------------*/
DispatchDBChangeDialog()1739 void BibDataManager::DispatchDBChangeDialog()
1740 {
1741     if(pToolbar)
1742         pToolbar->SendDispatch(TBC_BT_CHANGESOURCE, Sequence< PropertyValue >());
1743 }
1744 /* -----------------06.12.99 15:11-------------------
1745 
1746  --------------------------------------------------*/
GetIdentifierMapping()1747 const ::rtl::OUString& BibDataManager::GetIdentifierMapping()
1748 {
1749     if(!sIdentifierMapping.getLength())
1750     {
1751         BibConfig* pConfig = BibModul::GetConfig();
1752         BibDBDescriptor aDesc;
1753         aDesc.sDataSource = getActiveDataSource();
1754         aDesc.sTableOrQuery = getActiveDataTable();
1755         aDesc.nCommandType = CommandType::TABLE;
1756         const Mapping* pMapping = pConfig->GetMapping(aDesc);
1757         sIdentifierMapping = pConfig->GetDefColumnName(IDENTIFIER_POS);
1758         if(pMapping)
1759         {
1760             for(sal_uInt16 nEntry = 0; nEntry < COLUMN_COUNT; nEntry++)
1761             {
1762                 if(pMapping->aColumnPairs[nEntry].sLogicalColumnName == sIdentifierMapping)
1763                 {
1764                     sIdentifierMapping = pMapping->aColumnPairs[nEntry].sRealColumnName;
1765                     break;
1766                 }
1767             }
1768         }
1769     }
1770     return sIdentifierMapping;
1771 }
1772 /* -----------------------------20.11.00 10:31--------------------------------
1773 
1774  ---------------------------------------------------------------------------*/
SetToolbar(BibToolBar * pSet)1775 void BibDataManager::SetToolbar(BibToolBar* pSet)
1776 {
1777     pToolbar = pSet;
1778     if(pToolbar)
1779         pToolbar->SetDatMan(*this);
1780 }
1781 /* -----------------------------08.05.2002 09:26------------------------------
1782 
1783  ---------------------------------------------------------------------------*/
GetFormController()1784 uno::Reference< form::runtime::XFormController > BibDataManager::GetFormController()
1785 {
1786     if(!m_xFormCtrl.is())
1787     {
1788         Reference< lang::XMultiServiceFactory > xMgr = comphelper::getProcessServiceFactory();
1789         m_xFormCtrl = uno::Reference< form::runtime::XFormController > (
1790             xMgr->createInstance(C2U("com.sun.star.form.runtime.FormController")), UNO_QUERY);
1791         m_xFormCtrl->setModel(uno::Reference< awt::XTabControllerModel > (getForm(), UNO_QUERY));
1792         // #100312# -------------
1793         m_xFormDispatch = uno::Reference< frame::XDispatch > ( m_xFormCtrl, UNO_QUERY);
1794     }
1795     return m_xFormCtrl;
1796 }
1797 
1798 // #100312# ----------
RegisterInterceptor(::bib::BibBeamer * pBibBeamer)1799 void BibDataManager::RegisterInterceptor( ::bib::BibBeamer* pBibBeamer)
1800 {
1801     DBG_ASSERT( !m_pInterceptorHelper, "BibDataManager::RegisterInterceptor: called twice!" );
1802 
1803     if( pBibBeamer )
1804         m_pInterceptorHelper = new BibInterceptorHelper( pBibBeamer, m_xFormDispatch);
1805     if( m_pInterceptorHelper )
1806         m_pInterceptorHelper->acquire();
1807 }
1808 
1809 /*-- 18.05.2004 17:04:20---------------------------------------------------
1810 
1811   -----------------------------------------------------------------------*/
HasActiveConnection() const1812 sal_Bool BibDataManager::HasActiveConnection()const
1813 {
1814     sal_Bool bRet = sal_False;
1815     Reference< XPropertySet >   xPrSet( m_xForm, UNO_QUERY );
1816     if( xPrSet.is() )
1817     {
1818         Reference< XComponent >  xConnection;
1819         xPrSet->getPropertyValue(C2U("ActiveConnection")) >>= xConnection;
1820         bRet = xConnection.is();
1821     }
1822     return bRet;
1823 }
1824 /*-- 04.06.2004 14:37:29---------------------------------------------------
1825 
1826   -----------------------------------------------------------------------*/
HasActiveConnection()1827 sal_Bool BibDataManager::HasActiveConnection()
1828 {
1829     return getConnection( m_xForm ).is();
1830 }
1831