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 --------------------------------------------------*/ 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 --------------------------------------------------*/ 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 --------------------------------------------------*/ 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 328 void SetModified() {bModified = sal_True;} 329 330 }; 331 /* -----------------11.11.99 16:42------------------- 332 333 --------------------------------------------------*/ 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 //----------------------------------------------------------------------------- 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 --------------------------------------------------*/ 535 MappingDialog_Impl::~MappingDialog_Impl() 536 {} 537 /* -----------------15.11.99 10:38------------------- 538 539 --------------------------------------------------*/ 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 --------------------------------------------------*/ 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 -----------------------------------------------------------------------*/ 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 -----------------------------------------------------------------------*/ 693 DBChangeDialog_Impl::~DBChangeDialog_Impl() 694 { 695 } 696 /* -----------------18.11.99 12:36------------------- 697 698 --------------------------------------------------*/ 699 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 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 724 BibInterceptorHelper::~BibInterceptorHelper( ) 725 { 726 } 727 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 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 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 765 BibInterceptorHelper::getSlaveDispatchProvider( ) throw (::com::sun::star::uno::RuntimeException) 766 { 767 return xSlaveDispatchProvider; 768 } 769 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 776 BibInterceptorHelper::getMasterDispatchProvider( ) throw (::com::sun::star::uno::RuntimeException) 777 { 778 return xMasterDispatchProvider; 779 } 780 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 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 --------------------------------------------------*/ 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 //------------------------------------------------------------------------ 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 --------------------------------------------------*/ 924 Reference< awt::XControlModel > BibDataManager::updateGridModel() 925 { 926 return updateGridModel( m_xForm ); 927 } 928 /* -------------------------------------------------- 929 930 --------------------------------------------------*/ 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 --------------------------------------------------*/ 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 //------------------------------------------------------------------------ 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 //------------------------------------------------------------------------ 1073 ::rtl::OUString BibDataManager::getActiveDataTable() 1074 { 1075 return aActiveDataTable; 1076 } 1077 //------------------------------------------------------------------------ 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 //------------------------------------------------------------------------ 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 //------------------------------------------------------------------------ 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 //------------------------------------------------------------------------ 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 //------------------------------------------------------------------------ 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 --------------------------------------------------*/ 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 --------------------------------------------------*/ 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 //------------------------------------------------------------------------ 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 //------------------------------------------------------------------------ 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 //------------------------------------------------------------------------ 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 //------------------------------------------------------------------------ 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 //------------------------------------------------------------------------ 1398 void SAL_CALL BibDataManager::addLoadListener( const Reference< XLoadListener >& aListener ) throw (RuntimeException) 1399 { 1400 m_aLoadListeners.addInterface( aListener ); 1401 } 1402 1403 //------------------------------------------------------------------------ 1404 void SAL_CALL BibDataManager::removeLoadListener( const Reference< XLoadListener >& aListener ) throw (RuntimeException) 1405 { 1406 m_aLoadListeners.removeInterface( aListener ); 1407 } 1408 1409 //------------------------------------------------------------------------ 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 //------------------------------------------------------------------------ 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 //------------------------------------------------------------------------ 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 //------------------------------------------------------------------------ 1571 void SAL_CALL BibDataManager::disposing() 1572 { 1573 BibDataManager_Base::WeakComponentImplHelperBase::disposing(); 1574 } 1575 1576 //------------------------------------------------------------------------ 1577 void BibDataManager::disposing( const EventObject& /*Source*/ ) throw( ::com::sun::star::uno::RuntimeException ) 1578 { 1579 // not interested in 1580 } 1581 1582 //------------------------------------------------------------------------ 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 //------------------------------------------------------------------------ 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 //------------------------------------------------------------------------ 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 --------------------------------------------------*/ 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 --------------------------------------------------*/ 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 -----------------------------------------------------------------------*/ 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 --------------------------------------------------*/ 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 ---------------------------------------------------------------------------*/ 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 ---------------------------------------------------------------------------*/ 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# ---------- 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 -----------------------------------------------------------------------*/ 1812 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 -----------------------------------------------------------------------*/ 1827 sal_Bool BibDataManager::HasActiveConnection() 1828 { 1829 return getConnection( m_xForm ).is(); 1830 } 1831