summaryrefslogtreecommitdiff
path: root/extensions/source/bibliography/datman.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'extensions/source/bibliography/datman.cxx')
-rw-r--r--extensions/source/bibliography/datman.cxx1739
1 files changed, 0 insertions, 1739 deletions
diff --git a/extensions/source/bibliography/datman.cxx b/extensions/source/bibliography/datman.cxx
deleted file mode 100644
index fe17033a9..000000000
--- a/extensions/source/bibliography/datman.cxx
+++ /dev/null
@@ -1,1739 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_extensions.hxx"
-#include <osl/mutex.hxx>
-#include <tools/diagnose_ex.h>
-#include <tools/urlobj.hxx>
-#include <comphelper/processfactory.hxx>
-#include <com/sun/star/io/XPersistObject.hpp>
-#include <com/sun/star/sdbc/ResultSetType.hpp>
-#include <com/sun/star/sdbc/ResultSetConcurrency.hpp>
-#include <com/sun/star/sdbc/XResultSetUpdate.hpp>
-#include <com/sun/star/sdbcx/XRowLocate.hpp>
-#include <com/sun/star/sdbc/DataType.hpp>
-#include <com/sun/star/sdb/XSingleSelectQueryComposer.hpp>
-#include <com/sun/star/sdbc/XDatabaseMetaData.hpp>
-#include <com/sun/star/sdb/XDatabaseEnvironment.hpp>
-#include <com/sun/star/uno/XNamingService.hpp>
-#include <com/sun/star/sdbc/XDataSource.hpp>
-#include <com/sun/star/sdb/CommandType.hpp>
-#include <com/sun/star/sdbcx/XTablesSupplier.hpp>
-#include <com/sun/star/sdbc/XConnection.hpp>
-#include <com/sun/star/sdb/XCompletedConnection.hpp>
-#include <com/sun/star/task/XInteractionHandler.hpp>
-#include <com/sun/star/form/XLoadable.hpp>
-#include <com/sun/star/sdbcx/XColumnsSupplier.hpp>
-#include <com/sun/star/form/XGridColumnFactory.hpp>
-#include <com/sun/star/io/XDataInputStream.hpp>
-#include <com/sun/star/container/XNameContainer.hpp>
-#include <com/sun/star/ucb/XContentProvider.hpp>
-#include <com/sun/star/ucb/XContentAccess.hpp>
-#include <ucbhelper/contentbroker.hxx>
-#include <ucbhelper/content.hxx>
-#include <ucbhelper/contentidentifier.hxx>
-#include <comphelper/container.hxx>
-#include <svl/urihelper.hxx>
-#include <svtools/svtabbx.hxx>
-#include <svtools/headbar.hxx>
-#include <vcl/dialog.hxx>
-#include <vcl/button.hxx>
-#include <vcl/fixed.hxx>
-#include <vcl/group.hxx>
-#include <vcl/lstbox.hxx>
-#include <vcl/edit.hxx>
-#include <vcl/msgbox.hxx>
-#include <tools/debug.hxx>
-#include "datman.hxx"
-#include "bibresid.hxx"
-#include "bibmod.hxx"
-#include "bibview.hxx"
-// #100312# ---------
-#include "bibprop.hrc"
-#include "toolbar.hxx"
-#include "toolbar.hrc"
-#include "bibconfig.hxx"
-#include "bibbeam.hxx"
-#include "bib.hrc"
-#include "datman.hrc"
-#include "bibliography.hrc"
-#include <connectivity/dbtools.hxx>
-
-using namespace ::com::sun::star;
-using namespace ::com::sun::star::beans;
-using namespace ::com::sun::star::container;
-using namespace ::com::sun::star::uno;
-using namespace ::com::sun::star::sdb;
-using namespace ::com::sun::star::sdbc;
-using namespace ::com::sun::star::sdbcx;
-using namespace ::com::sun::star::form;
-using namespace ::com::sun::star::frame;
-using namespace ::com::sun::star::ucb;
-using namespace ::com::sun::star::lang;
-using namespace ::ucb;
-
-#define C2U(cChar) ::rtl::OUString::createFromAscii(cChar)
-#define C2S(cChar) String::CreateFromAscii(cChar)
-#define MAP_TOKEN ';'
-#define PAIR_TOKEN ':'
-
-Reference< XConnection > getConnection(const ::rtl::OUString& _rURL)
-{
- // first get the sdb::DataSource corresponding to the url
- Reference< XDataSource > xDataSource;
- // is it a favorite title ?
- Reference< XMultiServiceFactory > xMgr = comphelper::getProcessServiceFactory();
- Reference<XInterface> xNamingContextIfc = xMgr->createInstance(C2U("com.sun.star.sdb.DatabaseContext"));
- Reference< XNameAccess > xNamingContext(xNamingContextIfc, UNO_QUERY);
- if (xNamingContext.is() && xNamingContext->hasByName(_rURL))
- {
- DBG_ASSERT(Reference< XNamingService > (xNamingContext, UNO_QUERY).is(), "::getDataSource : no NamingService interface on the sdb::DatabaseAccessContext !");
- try
- {
- xDataSource = Reference< XDataSource > (Reference< XNamingService > (xNamingContext, UNO_QUERY)->getRegisteredObject(_rURL), UNO_QUERY);
- }
- catch(Exception &)
- {
- OSL_FAIL("Exception caught in ODatabaseContext::getRegisteredObject()");
- }
- }
- // build the connection from the data source
- Reference< XConnection > xConn;
- if (xDataSource.is())
- {
- // need user/pwd for this
- ::rtl::OUString sUser, sPwd;
- Reference< XPropertySet > xDataSourceProps(xDataSource, UNO_QUERY);
- Reference< XCompletedConnection > xComplConn(xDataSource, UNO_QUERY);
- try
- {
-
- Reference<XInterface> xHdl = xMgr->createInstance(C2U("com.sun.star.task.InteractionHandler"));
- Reference<task::XInteractionHandler> xIHdl(xHdl, UNO_QUERY);
- xConn = xComplConn->connectWithCompletion(xIHdl);
- }
- catch(SQLException&)
- {
- // TODO : a real error handling
- }
- catch(Exception& e )
- {
- (void) e; // make compiler happy
- }
-
- }
- return xConn;
-}
-
-Reference< XConnection > getConnection(const Reference< XInterface > & xRowSet)
-{
- Reference< XConnection > xConn;
- try
- {
- Reference< XPropertySet > xFormProps(xRowSet, UNO_QUERY);
- if (!xFormProps.is())
- return xConn;
-
- xConn = Reference< XConnection > (*(Reference< XInterface > *)xFormProps->getPropertyValue(C2U("ActiveConnection")).getValue(), UNO_QUERY);
- if (!xConn.is())
- {
- DBG_WARNING("no active connection");
- }
- }
- catch(Exception& e )
- {
- (void) e; // make compiler happy
- OSL_FAIL("exception in getConnection");
- }
-
- return xConn;
-}
-
-Reference< XNameAccess > getColumns(const Reference< XForm > & _rxForm)
-{
- Reference< XNameAccess > xReturn;
- // check if the form is alive
- Reference< XColumnsSupplier > xSupplyCols( _rxForm, UNO_QUERY );
- if (xSupplyCols.is())
- xReturn = xSupplyCols->getColumns();
-
- if (!xReturn.is() || (xReturn->getElementNames().getLength() == 0))
- { // no ....
- xReturn = NULL;
- // -> get the table the form is bound to and ask it for their columns
- Reference< XTablesSupplier > xSupplyTables( getConnection( _rxForm ), UNO_QUERY );
- Reference< XPropertySet > xFormProps( _rxForm, UNO_QUERY );
- if (xFormProps.is() && xSupplyTables.is())
- {
- try
- {
- DBG_ASSERT((*(sal_Int32*)xFormProps->getPropertyValue(C2U("CommandType")).getValue()) == CommandType::TABLE,
- "::getColumns : invalid form (has no table as data source) !");
- ::rtl::OUString sTable;
- xFormProps->getPropertyValue(C2U("Command")) >>= sTable;
- Reference< XNameAccess > xTables = xSupplyTables->getTables();
- if (xTables.is() && xTables->hasByName(sTable))
- xSupplyCols = Reference< XColumnsSupplier > (
- *(Reference< XInterface > *)xTables->getByName(sTable).getValue(), UNO_QUERY);
- if (xSupplyCols.is())
- xReturn = xSupplyCols->getColumns();
- }
-#ifdef DBG_UTIL
- catch(Exception& e )
-#else
- catch(Exception&)
-#endif
- {
-#ifdef DBG_UTIL
- String sMsg(String::CreateFromAscii("::getColumns : catched an exception ("));
- sMsg += String(e.Message);
- sMsg.AppendAscii(") ...");
- OSL_FAIL( ByteString(sMsg, RTL_TEXTENCODING_ASCII_US ).GetBuffer());
-#endif
- }
-
- }
- }
- return xReturn;
-}
-
-class MappingDialog_Impl : public ModalDialog
-{
- BibDataManager* pDatMan;
- OKButton aOKBT;
- CancelButton aCancelBT;
- HelpButton aHelpBT;
- FixedLine aMapGB;
- FixedText aIdentifierFT;
- ListBox aIdentifierLB;
- FixedText aAuthorityTypeFT;
- ListBox aAuthorityTypeLB;
- FixedText aAuthorFT;
- ListBox aAuthorLB;
- FixedText aTitleFT;
- ListBox aTitleLB;
- FixedText aMonthFT;
- ListBox aMonthLB;
- FixedText aYearFT;
- ListBox aYearLB;
- FixedText aISBNFT;
- ListBox aISBNLB;
- FixedText aBooktitleFT;
- ListBox aBooktitleLB;
- FixedText aChapterFT;
- ListBox aChapterLB;
- FixedText aEditionFT;
- ListBox aEditionLB;
- FixedText aEditorFT;
- ListBox aEditorLB;
- FixedText aHowpublishedFT;
- ListBox aHowpublishedLB;
- FixedText aInstitutionFT;
- ListBox aInstitutionLB;
- FixedText aJournalFT;
- ListBox aJournalLB;
- FixedText aNoteFT;
- ListBox aNoteLB;
- FixedText aAnnoteFT;
- ListBox aAnnoteLB;
- FixedText aNumberFT;
- ListBox aNumberLB;
- FixedText aOrganizationsFT;
- ListBox aOrganizationsLB;
- FixedText aPagesFT;
- ListBox aPagesLB;
- FixedText aPublisherFT;
- ListBox aPublisherLB;
- FixedText aAddressFT;
- ListBox aAddressLB;
- FixedText aSchoolFT;
- ListBox aSchoolLB;
- FixedText aSeriesFT;
- ListBox aSeriesLB;
- FixedText aReportTypeFT;
- ListBox aReportTypeLB;
- FixedText aVolumeFT;
- ListBox aVolumeLB;
- FixedText aURLFT;
- ListBox aURLLB;
- FixedText aCustom1FT;
- ListBox aCustom1LB;
- FixedText aCustom2FT;
- ListBox aCustom2LB;
- FixedText aCustom3FT;
- ListBox aCustom3LB;
- FixedText aCustom4FT;
- ListBox aCustom4LB;
- FixedText aCustom5FT;
- ListBox aCustom5LB;
- ListBox* aListBoxes[COLUMN_COUNT];
- String sNone;
-
- sal_Bool bModified;
-
-
-
- DECL_LINK(OkHdl, OKButton*);
- DECL_LINK(ListBoxSelectHdl, ListBox*);
-
-public:
- MappingDialog_Impl(Window* pParent, BibDataManager* pDatMan);
- ~MappingDialog_Impl();
-
- void SetModified() {bModified = sal_True;}
-
-};
-
-sal_uInt16 lcl_FindLogicalName(BibConfig* pConfig ,
- const ::rtl::OUString& rLogicalColumnName)
-{
- for(sal_uInt16 i = 0; i < COLUMN_COUNT; i++)
- {
- if(rLogicalColumnName == pConfig->GetDefColumnName(i))
- return i;
- }
- return USHRT_MAX;
-}
-//-----------------------------------------------------------------------------
-MappingDialog_Impl::MappingDialog_Impl(Window* pParent, BibDataManager* pMan) :
- ModalDialog(pParent, BibResId(RID_DLG_MAPPING) ),
- pDatMan(pMan),
- aOKBT(this, BibResId( BT_OK )),
- aCancelBT(this, BibResId( BT_CANCEL )),
- aHelpBT(this, BibResId( BT_HELP )),
-
- aMapGB(this, BibResId( GB_MAPPING )),
-
- aIdentifierFT(this, BibResId( FT_IDENTIFIER )),
- aIdentifierLB(this, BibResId( LB_IDENTIFIER )),
- aAuthorityTypeFT(this, BibResId( FT_AUTHORITYTYPE )),
- aAuthorityTypeLB(this, BibResId( LB_AUTHORITYTYPE )),
- aAuthorFT(this, BibResId( FT_AUTHOR )),
- aAuthorLB(this, BibResId( LB_AUTHOR )),
- aTitleFT(this, BibResId( FT_TITLE )),
- aTitleLB(this, BibResId( LB_TITLE )),
- aMonthFT(this, BibResId( FT_MONTH )),
- aMonthLB(this, BibResId( LB_MONTH )),
- aYearFT(this, BibResId( FT_YEAR )),
- aYearLB(this, BibResId( LB_YEAR )),
- aISBNFT(this, BibResId( FT_ISBN )),
- aISBNLB(this, BibResId( LB_ISBN )),
- aBooktitleFT(this, BibResId( FT_BOOKTITLE )),
- aBooktitleLB(this, BibResId( LB_BOOKTITLE )),
- aChapterFT(this, BibResId( FT_CHAPTER )),
- aChapterLB(this, BibResId( LB_CHAPTER )),
- aEditionFT(this, BibResId( FT_EDITION )),
- aEditionLB(this, BibResId( LB_EDITION )),
- aEditorFT(this, BibResId( FT_EDITOR )),
- aEditorLB(this, BibResId( LB_EDITOR )),
- aHowpublishedFT(this, BibResId( FT_HOWPUBLISHED )),
- aHowpublishedLB(this, BibResId( LB_HOWPUBLISHED )),
- aInstitutionFT(this, BibResId( FT_INSTITUTION )),
- aInstitutionLB(this, BibResId( LB_INSTITUTION )),
- aJournalFT(this, BibResId( FT_JOURNAL )),
- aJournalLB(this, BibResId( LB_JOURNAL )),
- aNoteFT(this, BibResId( FT_NOTE )),
- aNoteLB(this, BibResId( LB_NOTE )),
- aAnnoteFT(this, BibResId( FT_ANNOTE )),
- aAnnoteLB(this, BibResId( LB_ANNOTE )),
- aNumberFT(this, BibResId( FT_NUMBER )),
- aNumberLB(this, BibResId( LB_NUMBER )),
- aOrganizationsFT(this, BibResId( FT_ORGANIZATIONS )),
- aOrganizationsLB(this, BibResId( LB_ORGANIZATIONS )),
- aPagesFT(this, BibResId( FT_PAGES )),
- aPagesLB(this, BibResId( LB_PAGES )),
- aPublisherFT(this, BibResId( FT_PUBLISHER )),
- aPublisherLB(this, BibResId( LB_PUBLISHER )),
- aAddressFT(this, BibResId( FT_ADDRESS )),
- aAddressLB(this, BibResId( LB_ADDRESS )),
- aSchoolFT(this, BibResId( FT_SCHOOL )),
- aSchoolLB(this, BibResId( LB_SCHOOL )),
- aSeriesFT(this, BibResId( FT_SERIES )),
- aSeriesLB(this, BibResId( LB_SERIES )),
- aReportTypeFT(this, BibResId( FT_REPORTTYPE )),
- aReportTypeLB(this, BibResId( LB_REPORTTYPE )),
- aVolumeFT(this, BibResId( FT_VOLUME )),
- aVolumeLB(this, BibResId( LB_VOLUME )),
- aURLFT(this, BibResId( FT_URL )),
- aURLLB(this, BibResId( LB_URL )),
- aCustom1FT(this, BibResId( FT_CUSTOM1 )),
- aCustom1LB(this, BibResId( LB_CUSTOM1 )),
- aCustom2FT(this, BibResId( FT_CUSTOM2 )),
- aCustom2LB(this, BibResId( LB_CUSTOM2 )),
- aCustom3FT(this, BibResId( FT_CUSTOM3 )),
- aCustom3LB(this, BibResId( LB_CUSTOM3 )),
- aCustom4FT(this, BibResId( FT_CUSTOM4 )),
- aCustom4LB(this, BibResId( LB_CUSTOM4 )),
- aCustom5FT(this, BibResId( FT_CUSTOM5 )),
- aCustom5LB(this, BibResId( LB_CUSTOM5 )),
- sNone(BibResId(ST_NONE)),
- bModified(sal_False)
-{
- FreeResource();
-
- aIdentifierFT.SetText(String( BibResId( ST_IDENTIFIER )));
- aAuthorityTypeFT.SetText(String( BibResId( ST_AUTHTYPE )));
- aAuthorFT.SetText(String( BibResId( ST_AUTHOR )));
- aTitleFT.SetText(String( BibResId( ST_TITLE )));
- aMonthFT.SetText(String( BibResId( ST_MONTH )));
- aYearFT.SetText(String( BibResId( ST_YEAR )));
- aISBNFT.SetText(String( BibResId( ST_ISBN )));
- aBooktitleFT.SetText(String( BibResId( ST_BOOKTITLE )));
- aChapterFT.SetText(String( BibResId( ST_CHAPTER )));
- aEditionFT.SetText(String( BibResId( ST_EDITION )));
- aEditorFT.SetText(String( BibResId( ST_EDITOR )));
- aHowpublishedFT.SetText(String( BibResId( ST_HOWPUBLISHED )));
- aInstitutionFT.SetText(String( BibResId( ST_INSTITUTION )));
- aJournalFT.SetText(String( BibResId( ST_JOURNAL )));
- aNoteFT.SetText(String( BibResId( ST_NOTE )));
- aAnnoteFT.SetText(String( BibResId( ST_ANNOTE )));
- aNumberFT.SetText(String( BibResId( ST_NUMBER )));
- aOrganizationsFT.SetText(String( BibResId( ST_ORGANIZATION )));
- aPagesFT.SetText(String( BibResId( ST_PAGE )));
- aPublisherFT.SetText(String( BibResId( ST_PUBLISHER )));
- aAddressFT.SetText(String( BibResId( ST_ADDRESS )));
- aSchoolFT.SetText(String( BibResId( ST_SCHOOL )));
- aSeriesFT.SetText(String( BibResId( ST_SERIES )));
- aReportTypeFT.SetText(String( BibResId( ST_REPORT )));
- aVolumeFT.SetText(String( BibResId( ST_VOLUME )));
- aURLFT.SetText(String( BibResId( ST_URL )));
- aCustom1FT.SetText(String( BibResId( ST_CUSTOM1 )));
- aCustom2FT.SetText(String( BibResId( ST_CUSTOM2 )));
- aCustom3FT.SetText(String( BibResId( ST_CUSTOM3 )));
- aCustom4FT.SetText(String( BibResId( ST_CUSTOM4 )));
- aCustom5FT.SetText(String( BibResId( ST_CUSTOM5 )));
-
- aOKBT.SetClickHdl(LINK(this, MappingDialog_Impl, OkHdl));
- String sTitle = GetText();
- sTitle.SearchAndReplace(C2S("%1"), pDatMan->getActiveDataTable(), 0);
- SetText(sTitle);
-
- aListBoxes[0] = &aIdentifierLB;
- aListBoxes[1] = &aAuthorityTypeLB;
- aListBoxes[2] = &aAuthorLB;
- aListBoxes[3] = &aTitleLB;
- aListBoxes[4] = &aYearLB;
- aListBoxes[5] = &aISBNLB;
- aListBoxes[6] = &aBooktitleLB;
- aListBoxes[7] = &aChapterLB;
- aListBoxes[8] = &aEditionLB;
- aListBoxes[9] = &aEditorLB;
- aListBoxes[10] = &aHowpublishedLB;
- aListBoxes[11] = &aInstitutionLB;
- aListBoxes[12] = &aJournalLB;
- aListBoxes[13] = &aMonthLB;
- aListBoxes[14] = &aNoteLB;
- aListBoxes[15] = &aAnnoteLB;
- aListBoxes[16] = &aNumberLB;
- aListBoxes[17] = &aOrganizationsLB;
- aListBoxes[18] = &aPagesLB;
- aListBoxes[19] = &aPublisherLB;
- aListBoxes[20] = &aAddressLB;
- aListBoxes[21] = &aSchoolLB;
- aListBoxes[22] = &aSeriesLB;
- aListBoxes[23] = &aReportTypeLB;
- aListBoxes[24] = &aVolumeLB;
- aListBoxes[25] = &aURLLB;
- aListBoxes[26] = &aCustom1LB;
- aListBoxes[27] = &aCustom2LB;
- aListBoxes[28] = &aCustom3LB;
- aListBoxes[29] = &aCustom4LB;
- aListBoxes[30] = &aCustom5LB;
-
- aListBoxes[0]->InsertEntry(sNone);
- Reference< XNameAccess > xFields = getColumns( pDatMan->getForm() );
- DBG_ASSERT(xFields.is(), "MappingDialog_Impl::MappingDialog_Impl : gave me an invalid form !");
- if(xFields.is())
- {
- Sequence< ::rtl::OUString > aNames = xFields->getElementNames();
- sal_Int32 nFieldsCount = aNames.getLength();
- const ::rtl::OUString* pNames = aNames.getConstArray();
-
- for(sal_Int32 nField = 0; nField < nFieldsCount; nField++)
- aListBoxes[0]->InsertEntry(pNames[nField]);
- }
-
- Link aLnk = LINK(this, MappingDialog_Impl, ListBoxSelectHdl);
-
- aListBoxes[0]->SelectEntryPos(0);
- aListBoxes[0]->SetSelectHdl(aLnk);
- for(sal_uInt16 i = 1; i < COLUMN_COUNT; i++)
- {
- for(sal_uInt16 j = 0; j < aListBoxes[0]->GetEntryCount();j++)
- aListBoxes[i]->InsertEntry(aListBoxes[0]->GetEntry(j));
- aListBoxes[i]->SelectEntryPos(0);
- aListBoxes[i]->SetSelectHdl(aLnk);
- }
- BibConfig* pConfig = BibModul::GetConfig();
- BibDBDescriptor aDesc;
- aDesc.sDataSource = pDatMan->getActiveDataSource();
- aDesc.sTableOrQuery = pDatMan->getActiveDataTable();
- aDesc.nCommandType = CommandType::TABLE;
- const Mapping* pMapping = pConfig->GetMapping(aDesc);
- if(pMapping)
- {
- for(sal_uInt16 nEntry = 0; nEntry < COLUMN_COUNT; nEntry++)
- {
- sal_uInt16 nListBoxIndex = lcl_FindLogicalName( pConfig, pMapping->aColumnPairs[nEntry].sLogicalColumnName);
- if(nListBoxIndex < COLUMN_COUNT)
- {
- aListBoxes[nListBoxIndex]->SelectEntry(pMapping->aColumnPairs[nEntry].sRealColumnName);
- }
- }
- }
-}
-
-MappingDialog_Impl::~MappingDialog_Impl()
-{}
-
-IMPL_LINK(MappingDialog_Impl, ListBoxSelectHdl, ListBox*, pListBox)
-{
- sal_uInt16 nEntryPos = pListBox->GetSelectEntryPos();
- if(0 < nEntryPos)
- {
- for(sal_uInt16 i = 0; i < COLUMN_COUNT; i++)
- {
- if(pListBox != aListBoxes[i] && aListBoxes[i]->GetSelectEntryPos() == nEntryPos)
- aListBoxes[i]->SelectEntryPos(0);
- }
- }
- SetModified();
- return 0;
-}
-
-IMPL_LINK(MappingDialog_Impl, OkHdl, OKButton*, EMPTYARG)
-{
- if(bModified)
- {
- Mapping aNew;
- aNew.sTableName = String(pDatMan->getActiveDataTable());
- aNew.sURL = String(pDatMan->getActiveDataSource());
-
- sal_uInt16 nWriteIndex = 0;
- BibConfig* pConfig = BibModul::GetConfig();
- for(sal_uInt16 nEntry = 0; nEntry < COLUMN_COUNT; nEntry++)
- {
- String sSel = aListBoxes[nEntry]->GetSelectEntry();
- if(sSel != sNone)
- {
- aNew.aColumnPairs[nWriteIndex].sRealColumnName = sSel;
- aNew.aColumnPairs[nWriteIndex].sLogicalColumnName = pConfig->GetDefColumnName(nEntry);
- nWriteIndex++;
- }
- }
- BibDBDescriptor aDesc;
- aDesc.sDataSource = pDatMan->getActiveDataSource();
- aDesc.sTableOrQuery = pDatMan->getActiveDataTable();
- aDesc.nCommandType = CommandType::TABLE;
- pDatMan->ResetIdentifierMapping();
- pConfig->SetMapping(aDesc, &aNew);
- }
- EndDialog(bModified ? RET_OK : RET_CANCEL);
- return 0;
-}
-
-class DBChangeDialog_Impl : public ModalDialog
-{
- OKButton aOKBT;
- CancelButton aCancelBT;
- HelpButton aHelpBT;
- FixedLine aSelectionGB;
- SvTabListBox aSelectionLB;
- HeaderBar aSelectionHB;
- DBChangeDialogConfig_Impl aConfig;
- String aEntryST;
- String aURLST;
-
- BibDataManager* pDatMan;
-
- DECL_LINK(DoubleClickHdl, SvTabListBox*);
-public:
- DBChangeDialog_Impl(Window* pParent, BibDataManager* pMan );
- ~DBChangeDialog_Impl();
-
- String GetCurrentURL()const;
-};
-
-DBChangeDialog_Impl::DBChangeDialog_Impl(Window* pParent, BibDataManager* pMan ) :
- ModalDialog(pParent, BibResId(RID_DLG_DBCHANGE) ),
- aOKBT(this, BibResId( BT_OK )),
- aCancelBT(this, BibResId( BT_CANCEL )),
- aHelpBT(this, BibResId( BT_HELP )),
- aSelectionGB(this, BibResId( GB_SELECTION )),
- aSelectionLB(this, BibResId( LB_SELECTION )),
- aSelectionHB(this, BibResId( HB_SELECTION )),
- aEntryST(BibResId(ST_ENTRY)),
- aURLST( BibResId(ST_URL)),
- pDatMan(pMan)
-{
- FreeResource();
- aSelectionLB.SetDoubleClickHdl( LINK(this, DBChangeDialog_Impl, DoubleClickHdl));
- try
- {
- Reference< XMultiServiceFactory > xMgr = comphelper::getProcessServiceFactory();
-
- ::Size aSize = aSelectionHB.GetSizePixel();
- long nTabs[2];
- nTabs[0] = 1;// Number of Tabs
- nTabs[1] = aSize.Width() / 4;
-
- aSelectionHB.SetStyle(aSelectionHB.GetStyle()|WB_STDHEADERBAR);
- aSelectionHB.InsertItem( 1, aEntryST, aSize.Width());
- aSelectionHB.SetSizePixel(aSelectionHB.CalcWindowSizePixel());
- aSelectionHB.Show();
-
- aSelectionLB.SetTabs( &nTabs[0], MAP_PIXEL );
- aSelectionLB.SetStyle(aSelectionLB.GetStyle()|WB_CLIPCHILDREN|WB_SORT);
- aSelectionLB.GetModel()->SetSortMode(SortAscending);
-
- ::rtl::OUString sActiveSource = pDatMan->getActiveDataSource();
- const Sequence< ::rtl::OUString >& rSources = aConfig.GetDataSourceNames();
- const ::rtl::OUString* pSourceNames = rSources.getConstArray();
- for(int i = 0; i < rSources.getLength(); i++)
- {
- SvLBoxEntry* pEntry = aSelectionLB.InsertEntry(pSourceNames[i]);
- if(pSourceNames[i] == sActiveSource)
- {
- aSelectionLB.Select(pEntry);
- }
- }
- aSelectionLB.GetModel()->Resort();
- }
- catch(Exception& e )
- {
- (void) e; // make compiler happy
- OSL_FAIL("Exception in BibDataManager::DBChangeDialog_Impl::DBChangeDialog_Impl");
- }
-
-
-}
-
-IMPL_LINK(DBChangeDialog_Impl, DoubleClickHdl, SvTabListBox*, /*pLB*/)
-{
- EndDialog(RET_OK);
- return 0;
-}
-
-DBChangeDialog_Impl::~DBChangeDialog_Impl()
-{
-}
-
-String DBChangeDialog_Impl::GetCurrentURL()const
-{
- String sRet;
- SvLBoxEntry* pEntry = aSelectionLB.FirstSelected();
- if(pEntry)
- {
- sRet = aSelectionLB.GetEntryText(pEntry, 0);
- }
- return sRet;
-}
-
-// XDispatchProvider
-BibInterceptorHelper::BibInterceptorHelper( ::bib::BibBeamer* pBibBeamer, ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatch > xDispatch)
-{
- if( pBibBeamer )
- {
- xInterception = pBibBeamer->getDispatchProviderInterception();
- if( xInterception.is() )
- xInterception->registerDispatchProviderInterceptor( this );
- }
- if( xDispatch.is() )
- xFormDispatch = xDispatch;
-}
-
-BibInterceptorHelper::~BibInterceptorHelper( )
-{
-}
-
-void BibInterceptorHelper::ReleaseInterceptor()
-{
- if ( xInterception.is() )
- xInterception->releaseDispatchProviderInterceptor( this );
- xInterception.clear();
-}
-
-::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatch > SAL_CALL
- BibInterceptorHelper::queryDispatch( const ::com::sun::star::util::URL& aURL, const ::rtl::OUString& aTargetFrameName, sal_Int32 nSearchFlags ) throw (::com::sun::star::uno::RuntimeException)
-{
- Reference< XDispatch > xReturn;
-
- String aCommand( aURL.Path );
- if ( aCommand.EqualsAscii("FormSlots/ConfirmDeletion") )
- xReturn = xFormDispatch;
- else
- if ( xSlaveDispatchProvider.is() )
- xReturn = xSlaveDispatchProvider->queryDispatch( aURL, aTargetFrameName, nSearchFlags);
-
- return xReturn;
-}
-
-::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatch > > SAL_CALL
- BibInterceptorHelper::queryDispatches( const ::com::sun::star::uno::Sequence< ::com::sun::star::frame::DispatchDescriptor >& aDescripts ) throw (::com::sun::star::uno::RuntimeException)
-{
- Sequence< Reference< XDispatch> > aReturn( aDescripts.getLength() );
- Reference< XDispatch >* pReturn = aReturn.getArray();
- const DispatchDescriptor* pDescripts = aDescripts.getConstArray();
- for ( sal_Int16 i=0; i<aDescripts.getLength(); ++i, ++pReturn, ++pDescripts )
- {
- *pReturn = queryDispatch( pDescripts->FeatureURL, pDescripts->FrameName, pDescripts->SearchFlags );
- }
- return aReturn;
-}
-
-// XDispatchProviderInterceptor
-::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatchProvider > SAL_CALL
- BibInterceptorHelper::getSlaveDispatchProvider( ) throw (::com::sun::star::uno::RuntimeException)
-{
- return xSlaveDispatchProvider;
-}
-
-void SAL_CALL BibInterceptorHelper::setSlaveDispatchProvider( const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatchProvider >& xNewSlaveDispatchProvider ) throw (::com::sun::star::uno::RuntimeException)
-{
- xSlaveDispatchProvider = xNewSlaveDispatchProvider;
-}
-
-::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatchProvider > SAL_CALL
- BibInterceptorHelper::getMasterDispatchProvider( ) throw (::com::sun::star::uno::RuntimeException)
-{
- return xMasterDispatchProvider;
-}
-
-void SAL_CALL BibInterceptorHelper::setMasterDispatchProvider( const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatchProvider >& xNewMasterDispatchProvider ) throw (::com::sun::star::uno::RuntimeException)
-{
- xMasterDispatchProvider = xNewMasterDispatchProvider;
-}
-
-//-----------------------------------------------------------------------------
-#define STR_UID "uid"
-::rtl::OUString gGridName(C2U("theGrid"));
-::rtl::OUString gViewName(C2U("theView"));
-::rtl::OUString gGlobalName(C2U("theGlobals"));
-::rtl::OUString gBeamerSize(C2U("theBeamerSize"));
-::rtl::OUString gViewSize(C2U("theViewSize"));
-
-BibDataManager::BibDataManager()
- :BibDataManager_Base( GetMutex() )
- ,m_pInterceptorHelper( NULL )
- ,m_aLoadListeners(m_aMutex)
- ,pBibView( NULL )
- ,pToolbar(0)
-{
-}
-
-
-BibDataManager::~BibDataManager()
-{
- Reference< XLoadable > xLoad( m_xForm, UNO_QUERY );
- Reference< XPropertySet > xPrSet( m_xForm, UNO_QUERY );
- Reference< XComponent > xComp( m_xForm, UNO_QUERY );
- if ( m_xForm.is() )
- {
- Reference< XComponent > xConnection;
- xPrSet->getPropertyValue(C2U("ActiveConnection")) >>= xConnection;
- RemoveMeAsUidListener();
- if (xLoad.is())
- xLoad->unload();
- if (xComp.is())
- xComp->dispose();
- if(xConnection.is())
- xConnection->dispose();
- m_xForm = NULL;
- }
- if( m_pInterceptorHelper )
- {
- m_pInterceptorHelper->ReleaseInterceptor();
- m_pInterceptorHelper->release();
- m_pInterceptorHelper = NULL;
- }
-}
-//------------------------------------------------------------------------
-void BibDataManager::InsertFields(const Reference< XFormComponent > & _rxGrid)
-{
- if ( !_rxGrid.is() )
- return;
-
- try
- {
- Reference< XNameContainer > xColContainer( _rxGrid, UNO_QUERY );
- // remove the old fields
- if ( xColContainer->hasElements() )
- {
- Sequence< ::rtl::OUString > aNames = xColContainer->getElementNames();
- const ::rtl::OUString* pNames = aNames.getConstArray();
- const ::rtl::OUString* pNamesEnd = pNames + aNames.getLength();
- for ( ; pNames != pNamesEnd; ++pNames )
- xColContainer->removeByName( *pNames );
- }
-
- Reference< XNameAccess > xFields = getColumns( m_xForm );
- if (!xFields.is())
- return;
-
- Reference< XGridColumnFactory > xColFactory( _rxGrid, UNO_QUERY );
-
- Reference< XPropertySet > xField;
-
- Sequence< ::rtl::OUString > aFields( xFields->getElementNames() );
- const ::rtl::OUString* pFields = aFields.getConstArray();
- const ::rtl::OUString* pFieldsEnd = pFields + aFields.getLength();
-
- for ( ; pFields != pFieldsEnd; ++pFields )
- {
- xFields->getByName( *pFields ) >>= xField;
-
- ::rtl::OUString sCurrentModelType;
- const ::rtl::OUString sType(C2U("Type"));
- sal_Int32 nType = 0;
- sal_Bool bIsFormatted = sal_False;
- sal_Bool bFormattedIsNumeric = sal_True;
- xField->getPropertyValue(sType) >>= nType;
- switch(nType)
- {
- case DataType::BIT:
- case DataType::BOOLEAN:
- sCurrentModelType = C2U("CheckBox");
- break;
-
- case DataType::BINARY:
- case DataType::VARBINARY:
- case DataType::LONGVARBINARY:
- case DataType::BLOB:
- sCurrentModelType = C2U("TextField");
- break;
-
- case DataType::VARCHAR:
- case DataType::LONGVARCHAR:
- case DataType::CHAR:
- case DataType::CLOB:
- bFormattedIsNumeric = sal_False;
- // _NO_ break !
- default:
- sCurrentModelType = C2U("FormattedField");
- bIsFormatted = sal_True;
- break;
- }
-
- Reference< XPropertySet > xCurrentCol = xColFactory->createColumn(sCurrentModelType);
- if (bIsFormatted)
- {
- ::rtl::OUString sFormatKey(C2U("FormatKey"));
- xCurrentCol->setPropertyValue(sFormatKey, xField->getPropertyValue(sFormatKey));
- Any aFormatted(&bFormattedIsNumeric, ::getBooleanCppuType());
- xCurrentCol->setPropertyValue(C2U("TreatAsNumber"), aFormatted);
- }
- Any aColName = makeAny( *pFields );
- xCurrentCol->setPropertyValue(FM_PROP_CONTROLSOURCE, aColName);
- xCurrentCol->setPropertyValue(FM_PROP_LABEL, aColName);
-
- xColContainer->insertByName( *pFields, makeAny( xCurrentCol ) );
- }
- }
- catch(Exception& e )
- {
- (void) e; // make compiler happy
- OSL_FAIL("Exception in BibDataManager::InsertFields");
- }
-}
-
-Reference< awt::XControlModel > BibDataManager::updateGridModel()
-{
- return updateGridModel( m_xForm );
-}
-
-Reference< awt::XControlModel > BibDataManager::updateGridModel(const Reference< XForm > & xDbForm)
-{
- try
- {
- Reference< XPropertySet > aFormPropSet( xDbForm, UNO_QUERY );
- ::rtl::OUString sName;
- aFormPropSet->getPropertyValue(C2U("Command")) >>= sName;
-
- if ( !m_xGridModel.is() )
- {
- m_xGridModel = createGridModel( gGridName );
-
- Reference< XNameContainer > xNameCont(xDbForm, UNO_QUERY);
- xNameCont->insertByName( sName, makeAny( m_xGridModel ) );
- }
-
- // insert the fields
- Reference< XFormComponent > xFormComp( m_xGridModel, UNO_QUERY );
- InsertFields( xFormComp );
- }
- catch(Exception& e )
- {
- (void) e; // make compiler happy
- OSL_FAIL("::updateGridModel: something went wrong !");
- }
-
-
- return m_xGridModel;
-}
-
-Reference< XForm > BibDataManager::createDatabaseForm(BibDBDescriptor& rDesc)
-{
- Reference< XForm > xResult;
- try
- {
- Reference< XMultiServiceFactory > xMgr = comphelper::getProcessServiceFactory();
- m_xForm = Reference< XForm > ( xMgr->createInstance( C2U("com.sun.star.form.component.Form") ), UNO_QUERY );
-
- Reference< XPropertySet > aPropertySet( m_xForm, UNO_QUERY );
-
- aDataSourceURL = rDesc.sDataSource;
- if(aPropertySet.is())
- {
- Any aVal;
- aVal <<= (sal_Int32)ResultSetType::SCROLL_INSENSITIVE;
- aPropertySet->setPropertyValue(C2U("ResultSetType"),aVal );
- aVal <<= (sal_Int32)ResultSetConcurrency::READ_ONLY;
- aPropertySet->setPropertyValue(C2U("ResultSetConcurrency"), aVal);
-
- //Caching for Performance
- aVal <<= (sal_Int32)50;
- aPropertySet->setPropertyValue(C2U("FetchSize"), aVal);
-
- Reference< XConnection > xConnection = getConnection(rDesc.sDataSource);
- aVal <<= xConnection;
- aPropertySet->setPropertyValue(C2U("ActiveConnection"), aVal);
-
- Reference< XTablesSupplier > xSupplyTables(xConnection, UNO_QUERY);
- Reference< XNameAccess > xTables = xSupplyTables.is() ?
- xSupplyTables->getTables() : Reference< XNameAccess > ();
-
- Sequence< ::rtl::OUString > aTableNameSeq;
- if (xTables.is())
- aTableNameSeq = xTables->getElementNames();
-
- if(aTableNameSeq.getLength() > 0)
- {
- const ::rtl::OUString* pTableNames = aTableNameSeq.getConstArray();
- if(rDesc.sTableOrQuery.getLength())
- aActiveDataTable = rDesc.sTableOrQuery;
- else
- {
- rDesc.sTableOrQuery = aActiveDataTable = pTableNames[0];
- rDesc.nCommandType = CommandType::TABLE;
- }
-
- aVal <<= aActiveDataTable;
- aPropertySet->setPropertyValue(C2U("Command"), aVal);
- aVal <<= rDesc.nCommandType;
- aPropertySet->setPropertyValue(C2U("CommandType"), aVal);
-
-
- Reference< XDatabaseMetaData > xMetaData = xConnection->getMetaData();
- aQuoteChar = xMetaData->getIdentifierQuoteString();
-
- Reference< XMultiServiceFactory > xFactory(xConnection, UNO_QUERY);
- if ( xFactory.is() )
- m_xParser.set( xFactory->createInstance( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.sdb.SingleSelectQueryComposer" ) ) ), UNO_QUERY );
-
- ::rtl::OUString aString(C2U("SELECT * FROM "));
-
- ::rtl::OUString sCatalog, sSchema, sName;
- ::dbtools::qualifiedNameComponents( xMetaData, aActiveDataTable, sCatalog, sSchema, sName, ::dbtools::eInDataManipulation );
- aString += ::dbtools::composeTableNameForSelect( xConnection, sCatalog, sSchema, sName );
-
- m_xParser->setElementaryQuery(aString);
- BibConfig* pConfig = BibModul::GetConfig();
- pConfig->setQueryField(getQueryField());
- startQueryWith(pConfig->getQueryText());
-
- xResult = m_xForm;
- }
- }
- }
- catch(Exception& e )
- {
- (void) e; // make compiler happy
- OSL_FAIL("::createDatabaseForm: something went wrong !");
- }
-
-
- return xResult;
-}
-//------------------------------------------------------------------------
-Sequence< ::rtl::OUString > BibDataManager::getDataSources()
-{
- Sequence< ::rtl::OUString > aTableNameSeq;
-
- try
- {
- Reference< XTablesSupplier > xSupplyTables( getConnection( m_xForm ), UNO_QUERY );
- Reference< XNameAccess > xTables;
- if (xSupplyTables.is())
- xTables = xSupplyTables->getTables();
- if (xTables.is())
- aTableNameSeq = xTables->getElementNames();
- }
- catch(Exception& e )
- {
- (void) e; // make compiler happy
- OSL_FAIL("::getDataSources: something went wrong !");
- }
-
-
- return aTableNameSeq;
-}
-//------------------------------------------------------------------------
-::rtl::OUString BibDataManager::getActiveDataTable()
-{
- return aActiveDataTable;
-}
-//------------------------------------------------------------------------
-void BibDataManager::setFilter(const ::rtl::OUString& rQuery)
-{
- if(!m_xParser.is())
- return;
- try
- {
- m_xParser->setFilter( rQuery );
- ::rtl::OUString aQuery = m_xParser->getFilter();
- Reference< XPropertySet > xFormProps( m_xForm, UNO_QUERY_THROW );
- xFormProps->setPropertyValue( C2U( "Filter" ), makeAny( aQuery ) );
- xFormProps->setPropertyValue( C2U( "ApplyFilter" ), makeAny( sal_True ) );
- reload();
- }
- catch(Exception& e )
- {
- DBG_UNHANDLED_EXCEPTION();
- }
-
-
-}
-//------------------------------------------------------------------------
-::rtl::OUString BibDataManager::getFilter()
-{
-
- ::rtl::OUString aQueryString;
- try
- {
- Reference< XPropertySet > xFormProps( m_xForm, UNO_QUERY_THROW );
- OSL_VERIFY( xFormProps->getPropertyValue( C2U( "Filter" ) ) >>= aQueryString );
- }
- catch( const Exception& )
- {
- DBG_UNHANDLED_EXCEPTION();
- }
-
-
- return aQueryString;
-
-}
-//------------------------------------------------------------------------
-Sequence< ::rtl::OUString > BibDataManager::getQueryFields()
-{
- Sequence< ::rtl::OUString > aFieldSeq;
- Reference< XNameAccess > xFields = getColumns( m_xForm );
- if (xFields.is())
- aFieldSeq = xFields->getElementNames();
- return aFieldSeq;
-}
-//------------------------------------------------------------------------
-::rtl::OUString BibDataManager::getQueryField()
-{
- BibConfig* pConfig = BibModul::GetConfig();
- ::rtl::OUString aFieldString = pConfig->getQueryField();
- if(!aFieldString.getLength())
- {
- Sequence< ::rtl::OUString > aSeq = getQueryFields();
- const ::rtl::OUString* pFields = aSeq.getConstArray();
- if(aSeq.getLength()>0)
- {
- aFieldString=pFields[0];
- }
- }
- return aFieldString;
-}
-//------------------------------------------------------------------------
-void BibDataManager::startQueryWith(const ::rtl::OUString& rQuery)
-{
- BibConfig* pConfig = BibModul::GetConfig();
- pConfig->setQueryText( rQuery );
-
- ::rtl::OUString aQueryString;
- if(rQuery.getLength()>0)
- {
- aQueryString=aQuoteChar;
- aQueryString+=getQueryField();
- aQueryString+=aQuoteChar;
- aQueryString+=C2U(" like '");
- String sQuery(rQuery);
- sQuery.SearchAndReplaceAll('?','_');
- sQuery.SearchAndReplaceAll('*','%');
- aQueryString += sQuery;
- aQueryString+=C2U("%'");
- }
- setFilter(aQueryString);
-}
-
-void BibDataManager::setActiveDataSource(const ::rtl::OUString& rURL)
-{
- ::rtl::OUString uTable;
- ::rtl::OUString sTmp(aDataSourceURL);
- aDataSourceURL = rURL;
-
- Reference< XPropertySet > aPropertySet( m_xForm, UNO_QUERY );
- if(aPropertySet.is())
- {
- unload();
-
- Reference< XComponent > xOldConnection;
- aPropertySet->getPropertyValue(C2U("ActiveConnection")) >>= xOldConnection;
-
- Reference< XConnection > xConnection = getConnection(rURL);
- if(!xConnection.is())
- {
- aDataSourceURL = sTmp;
- return;
- }
- Any aVal; aVal <<= xConnection;
- aPropertySet->setPropertyValue(C2U("ActiveConnection"), aVal);
- Reference< XMultiServiceFactory > xFactory(xConnection, UNO_QUERY);
- if ( xFactory.is() )
- m_xParser.set( xFactory->createInstance( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.sdb.SingleSelectQueryComposer" ) ) ), UNO_QUERY );
-
- if(xOldConnection.is())
- xOldConnection->dispose();
-
- Sequence< ::rtl::OUString > aTableNameSeq;
- Reference< XTablesSupplier > xSupplyTables(xConnection, UNO_QUERY);
- if(xSupplyTables.is())
- {
- Reference< XNameAccess > xAccess = xSupplyTables->getTables();
- aTableNameSeq = xAccess->getElementNames();
- }
- if(aTableNameSeq.getLength() > 0)
- {
- const ::rtl::OUString* pTableNames = aTableNameSeq.getConstArray();
- aActiveDataTable = pTableNames[0];
- aVal <<= aActiveDataTable;
- aPropertySet->setPropertyValue(C2U("Command"), aVal);
- aPropertySet->setPropertyValue(C2U("CommandType"), makeAny(CommandType::TABLE));
- //Caching for Performance
- aVal <<= (sal_Int32)50;
- aPropertySet->setPropertyValue(C2U("FetchSize"), aVal);
- ::rtl::OUString aString(C2U("SELECT * FROM "));
- // quote the table name which may contain catalog.schema.table
- Reference<XDatabaseMetaData> xMetaData(xConnection->getMetaData(),UNO_QUERY);
- aQuoteChar = xMetaData->getIdentifierQuoteString();
-
- ::rtl::OUString sCatalog, sSchema, sName;
- ::dbtools::qualifiedNameComponents( xMetaData, aActiveDataTable, sCatalog, sSchema, sName, ::dbtools::eInDataManipulation );
- aString += ::dbtools::composeTableNameForSelect( xConnection, sCatalog, sSchema, sName );
-
- m_xParser->setElementaryQuery(aString);
- BibConfig* pConfig = BibModul::GetConfig();
- pConfig->setQueryField(getQueryField());
- startQueryWith(pConfig->getQueryText());
- setActiveDataTable(aActiveDataTable);
- }
- FeatureStateEvent aEvent;
- util::URL aURL;
- aEvent.IsEnabled = sal_True;
- aEvent.Requery = sal_False;
- aEvent.FeatureDescriptor = getActiveDataTable();
-
- aEvent.State = makeAny( getDataSources() );
-
- if(pToolbar)
- {
- aURL.Complete =C2U(".uno:Bib/source");
- aEvent.FeatureURL = aURL;
- pToolbar->statusChanged( aEvent );
- }
-
- updateGridModel();
- load();
- }
-}
-
-
-void BibDataManager::setActiveDataTable(const ::rtl::OUString& rTable)
-{
- ResetIdentifierMapping();
- try
- {
- Reference< XPropertySet > aPropertySet( m_xForm, UNO_QUERY );
-
- if(aPropertySet.is())
- {
- Reference< XConnection > xConnection = getConnection( m_xForm );
- Reference< XTablesSupplier > xSupplyTables(xConnection, UNO_QUERY);
- Reference< XNameAccess > xAccess = xSupplyTables->getTables();
- Sequence< ::rtl::OUString > aTableNameSeq = xAccess->getElementNames();
- sal_uInt32 nCount = aTableNameSeq.getLength();
-
- const ::rtl::OUString* pTableNames = aTableNameSeq.getConstArray();
- const ::rtl::OUString* pTableNamesEnd = pTableNames + nCount;
-
- for ( ; pTableNames != pTableNamesEnd; ++pTableNames )
- {
- if ( rTable == *pTableNames )
- {
- aActiveDataTable = rTable;
- Any aVal; aVal <<= rTable;
- aPropertySet->setPropertyValue( C2U("Command"), aVal );
- break;
- }
- }
- if (pTableNames != pTableNamesEnd)
- {
- Reference< XDatabaseMetaData > xMetaData = xConnection->getMetaData();
- aQuoteChar = xMetaData->getIdentifierQuoteString();
-
- Reference< XMultiServiceFactory > xFactory(xConnection, UNO_QUERY);
- if ( xFactory.is() )
- m_xParser.set( xFactory->createInstance( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.sdb.SingleSelectQueryComposer" ) ) ), UNO_QUERY );
-
- ::rtl::OUString aString(C2U("SELECT * FROM "));
-
- ::rtl::OUString sCatalog, sSchema, sName;
- ::dbtools::qualifiedNameComponents( xMetaData, aActiveDataTable, sCatalog, sSchema, sName, ::dbtools::eInDataManipulation );
- aString += ::dbtools::composeTableNameForSelect( xConnection, sCatalog, sSchema, sName );
-
- m_xParser->setElementaryQuery(aString);
-
- BibConfig* pConfig = BibModul::GetConfig();
- pConfig->setQueryField(getQueryField());
- startQueryWith(pConfig->getQueryText());
-
- BibDBDescriptor aDesc;
- aDesc.sDataSource = aDataSourceURL;
- aDesc.sTableOrQuery = aActiveDataTable;
- aDesc.nCommandType = CommandType::TABLE;
- BibModul::GetConfig()->SetBibliographyURL(aDesc);
- }
- }
- }
- catch(Exception& e )
- {
- (void) e; // make compiler happy
- OSL_FAIL("::setActiveDataTable: something went wrong !");
- }
-
-}
-
-//------------------------------------------------------------------------
-void SAL_CALL BibDataManager::load( ) throw (RuntimeException)
-{
- if ( isLoaded() )
- // nothing to do
- return;
-
- Reference< XLoadable > xFormAsLoadable( m_xForm, UNO_QUERY );
- DBG_ASSERT( xFormAsLoadable.is() || !m_xForm.is(), "BibDataManager::load: invalid form!");
- if ( xFormAsLoadable.is() )
- {
- xFormAsLoadable->load();
- SetMeAsUidListener();
-
- EventObject aEvt( static_cast< XWeak* >( this ) );
- m_aLoadListeners.notifyEach( &XLoadListener::loaded, aEvt );
- }
-}
-
-//------------------------------------------------------------------------
-void SAL_CALL BibDataManager::unload( ) throw (RuntimeException)
-{
- if ( !isLoaded() )
- // nothing to do
- return;
-
- Reference< XLoadable >xFormAsLoadable( m_xForm, UNO_QUERY );
- DBG_ASSERT( xFormAsLoadable.is() || !m_xForm.is(), "BibDataManager::unload: invalid form!");
- if ( xFormAsLoadable.is() )
- {
- EventObject aEvt( static_cast< XWeak* >( this ) );
-
- {
- m_aLoadListeners.notifyEach( &XLoadListener::unloading, aEvt );
- }
-
- RemoveMeAsUidListener();
- xFormAsLoadable->unload();
-
- {
- m_aLoadListeners.notifyEach( &XLoadListener::unloaded, aEvt );
- }
- }
-}
-
-//------------------------------------------------------------------------
-void SAL_CALL BibDataManager::reload( ) throw (RuntimeException)
-{
- if ( !isLoaded() )
- // nothing to do
- return;
-
- Reference< XLoadable >xFormAsLoadable( m_xForm, UNO_QUERY );
- DBG_ASSERT( xFormAsLoadable.is() || !m_xForm.is(), "BibDataManager::unload: invalid form!");
- if ( xFormAsLoadable.is() )
- {
- EventObject aEvt( static_cast< XWeak* >( this ) );
-
- {
- m_aLoadListeners.notifyEach( &XLoadListener::reloading, aEvt );
- }
-
- xFormAsLoadable->reload();
-
- {
- m_aLoadListeners.notifyEach( &XLoadListener::reloaded, aEvt );
- }
- }
-}
-
-//------------------------------------------------------------------------
-sal_Bool SAL_CALL BibDataManager::isLoaded( ) throw (RuntimeException)
-{
- Reference< XLoadable >xFormAsLoadable( m_xForm, UNO_QUERY );
- DBG_ASSERT( xFormAsLoadable.is() || !m_xForm.is(), "BibDataManager::isLoaded: invalid form!");
-
- sal_Bool bLoaded = sal_False;
- if ( xFormAsLoadable.is() )
- bLoaded = xFormAsLoadable->isLoaded();
- return bLoaded;
-}
-
-//------------------------------------------------------------------------
-void SAL_CALL BibDataManager::addLoadListener( const Reference< XLoadListener >& aListener ) throw (RuntimeException)
-{
- m_aLoadListeners.addInterface( aListener );
-}
-
-//------------------------------------------------------------------------
-void SAL_CALL BibDataManager::removeLoadListener( const Reference< XLoadListener >& aListener ) throw (RuntimeException)
-{
- m_aLoadListeners.removeInterface( aListener );
-}
-
-//------------------------------------------------------------------------
-Reference< awt::XControlModel > BibDataManager::createGridModel(const ::rtl::OUString& rName)
-{
- Reference< awt::XControlModel > xModel;
-
- try
- {
- // create the control model
- Reference< XMultiServiceFactory > xMgr = ::comphelper::getProcessServiceFactory();
- Reference< XInterface > xObject = xMgr->createInstance(C2U("com.sun.star.form.component.GridControl"));
- xModel=Reference< awt::XControlModel > ( xObject, UNO_QUERY );
-
- // set the
- Reference< XPropertySet > xPropSet( xModel, UNO_QUERY );
- xPropSet->setPropertyValue( C2U("Name"), makeAny( rName ) );
-
- // set the name of the to-be-created control
- ::rtl::OUString aControlName(C2U("com.sun.star.form.control.InteractionGridControl"));
- Any aAny; aAny <<= aControlName;
- xPropSet->setPropertyValue( C2U("DefaultControl"),aAny );
-
- // the the helpURL
- ::rtl::OUString uProp(C2U("HelpURL"));
- Reference< XPropertySetInfo > xPropInfo = xPropSet->getPropertySetInfo();
- if (xPropInfo->hasPropertyByName(uProp))
- {
- ::rtl::OUString sId(RTL_CONSTASCII_USTRINGPARAM( INET_HID_SCHEME ));
- sId += ::rtl::OUString::createFromAscii( HID_BIB_DB_GRIDCTRL );
- xPropSet->setPropertyValue( uProp, makeAny( sId ) );
- }
- }
- catch(Exception& e )
- {
- (void) e; // make compiler happy
- OSL_FAIL("::createGridModel: something went wrong !");
- }
-
-
- return xModel;
-}
-//------------------------------------------------------------------------
-::rtl::OUString BibDataManager::getControlName(sal_Int32 nFormatKey )
-{
- ::rtl::OUString aResStr;
- switch (nFormatKey)
- {
- case DataType::BIT:
- case DataType::BOOLEAN:
- aResStr=C2U("CheckBox");
- break;
- case DataType::TINYINT:
- case DataType::SMALLINT:
- case DataType::INTEGER:
- aResStr=C2U("NumericField"); ;
- break;
- case DataType::REAL:
- case DataType::DOUBLE:
- case DataType::NUMERIC:
- case DataType::DECIMAL:
- aResStr=C2U("FormattedField");
- break;
- case DataType::TIMESTAMP:
- aResStr=C2U("FormattedField");
- break;
- case DataType::DATE:
- aResStr=C2U("DateField");
- break;
- case DataType::TIME:
- aResStr=C2U("TimeField");
- break;
- case DataType::CHAR:
- case DataType::VARCHAR:
- case DataType::LONGVARCHAR:
- default:
- aResStr=C2U("TextField");
- break;
- }
- return aResStr;
-}
-//------------------------------------------------------------------------
-Reference< awt::XControlModel > BibDataManager::loadControlModel(
- const ::rtl::OUString& rName, sal_Bool bForceListBox)
-{
- Reference< awt::XControlModel > xModel;
- ::rtl::OUString aName(C2U("View_"));
- aName += rName;
-
- try
- {
- Reference< XNameAccess > xFields = getColumns( m_xForm );
- if (!xFields.is())
- return xModel;
- Reference< XPropertySet > xField;
-
- Any aElement;
-
- if(xFields->hasByName(rName))
- {
- aElement = xFields->getByName(rName);
- aElement >>= xField;
- Reference< XPropertySetInfo > xInfo = xField.is() ? xField->getPropertySetInfo() : Reference< XPropertySetInfo > ();
-
- ::rtl::OUString sCurrentModelType;
- const ::rtl::OUString sType(C2U("Type"));
- sal_Int32 nFormatKey = 0;
- xField->getPropertyValue(sType) >>= nFormatKey;
-
- ::rtl::OUString aInstanceName(C2U("com.sun.star.form.component."));
-
- if (bForceListBox)
- aInstanceName += C2U("ListBox");
- else
- aInstanceName += getControlName(nFormatKey);
-
- Reference< XMultiServiceFactory > xMgr = comphelper::getProcessServiceFactory();
- Reference< XInterface > xObject = xMgr->createInstance(aInstanceName);
- xModel=Reference< awt::XControlModel > ( xObject, UNO_QUERY );
- Reference< XPropertySet > xPropSet( xModel, UNO_QUERY );
- Any aFieldName; aFieldName <<= aName;
-
- xPropSet->setPropertyValue( FM_PROP_NAME,aFieldName);
- xPropSet->setPropertyValue( FM_PROP_CONTROLSOURCE, makeAny( rName ) );
- xPropSet->setPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "NativeWidgetLook" ) ), makeAny( (sal_Bool)sal_True ) );
-
- Reference< XFormComponent > aFormComp(xModel,UNO_QUERY );
-
- Reference< XNameContainer > xNameCont( m_xForm, UNO_QUERY );
- xNameCont->insertByName(aName, makeAny( aFormComp ) );
-
- // now if the form where we inserted the new model is already loaded, notify the model of this
- // Note that this implementation below is a HACK as it relies on the fact that the model adds itself
- // as load listener to it's parent, which is an implementation detail of the model.
- //
- // the better solution would be the following:
- // in the current scenario, we insert a control model into a form. This results in the control model
- // adding itself as load listener to the form. Now, the form should realize that it's already loaded
- // and notify the model (which it knows as XLoadListener only) immediately. This seems to make sense.
- // (as an anologon to the XStatusListener semantics).
- //
- // But this would be way too risky for this last-day fix here.
- Reference< XLoadable > xLoad( m_xForm, UNO_QUERY );
- if ( xLoad.is() && xLoad->isLoaded() )
- {
- Reference< XLoadListener > xListener( aFormComp, UNO_QUERY );
- if ( xListener.is() )
- {
- EventObject aLoadSource;
- aLoadSource.Source = xLoad;
- xListener->loaded( aLoadSource );
- }
- }
- }
- }
- catch(Exception& e )
- {
- (void) e; // make compiler happy
- OSL_FAIL("::loadControlModel: something went wrong !");
- }
- return xModel;
-}
-//------------------------------------------------------------------------
-void SAL_CALL BibDataManager::disposing()
-{
- BibDataManager_Base::WeakComponentImplHelperBase::disposing();
-}
-
-//------------------------------------------------------------------------
-void BibDataManager::disposing( const EventObject& /*Source*/ ) throw( ::com::sun::star::uno::RuntimeException )
-{
- // not interested in
-}
-
-//------------------------------------------------------------------------
-void BibDataManager::propertyChange(const beans::PropertyChangeEvent& evt) throw( RuntimeException )
-{
- try
- {
- if(evt.PropertyName == FM_PROP_VALUE)
- {
- if( evt.NewValue.getValueType() == ::getCppuType((Reference<io::XInputStream>*)0) )
- {
- Reference< io::XDataInputStream > xStream(
- *(const Reference< io::XInputStream > *)evt.NewValue.getValue(), UNO_QUERY );
- aUID <<= xStream->readUTF();
- }
- else
- aUID = evt.NewValue;
-
- Reference< XRowLocate > xLocate(xBibCursor, UNO_QUERY);
- DBG_ASSERT(xLocate.is(), "BibDataManager::propertyChange : invalid cursor !");
- xLocate->moveToBookmark(aUID);
- }
- }
- catch(Exception& e )
- {
- (void) e; // make compiler happy
- OSL_FAIL("::propertyChange: something went wrong !");
- }
-
-
-}
-//------------------------------------------------------------------------
-void BibDataManager::SetMeAsUidListener()
-{
-try
-{
- Reference< XNameAccess > xFields = getColumns( m_xForm );
- if (!xFields.is())
- return;
-
- Sequence< ::rtl::OUString > aFields(xFields->getElementNames());
- const ::rtl::OUString* pFields = aFields.getConstArray();
- sal_Int32 nCount=aFields.getLength();
- String StrUID(C2S(STR_UID));
- ::rtl::OUString theFieldName;
- for( sal_Int32 i=0; i<nCount; i++ )
- {
- String aName= pFields[i];
-
- if(aName.EqualsIgnoreCaseAscii(StrUID))
- {
- theFieldName=pFields[i];
- break;
- }
- }
-
- if(theFieldName.getLength()>0)
- {
- Reference< XPropertySet > xPropSet;
- Any aElement;
-
- aElement = xFields->getByName(theFieldName);
- xPropSet = *(Reference< XPropertySet > *)aElement.getValue();
-
- xPropSet->addPropertyChangeListener(FM_PROP_VALUE, this);
- }
-
-}
-catch(Exception& e )
-{
- (void) e; // make compiler happy
- OSL_FAIL("Exception in BibDataManager::SetMeAsUidListener");
-}
-
-
-}
-//------------------------------------------------------------------------
-void BibDataManager::RemoveMeAsUidListener()
-{
-try
-{
- Reference< XNameAccess > xFields = getColumns( m_xForm );
- if (!xFields.is())
- return;
-
-
- Sequence< ::rtl::OUString > aFields(xFields->getElementNames());
- const ::rtl::OUString* pFields = aFields.getConstArray();
- sal_Int32 nCount=aFields.getLength();
- String StrUID(C2S(STR_UID));
- ::rtl::OUString theFieldName;
- for( sal_Int32 i=0; i<nCount; i++ )
- {
- String aName= pFields[i];
-
- if(aName.EqualsIgnoreCaseAscii(StrUID))
- {
- theFieldName=pFields[i];
- break;
- }
- }
-
- if(theFieldName.getLength()>0)
- {
- Reference< XPropertySet > xPropSet;
- Any aElement;
-
- aElement = xFields->getByName(theFieldName);
- xPropSet = *(Reference< XPropertySet > *)aElement.getValue();
-
- xPropSet->removePropertyChangeListener(FM_PROP_VALUE, this);
- }
-
-}
-catch(Exception& e )
-{
- (void) e; // make compiler happy
- OSL_FAIL("Exception in BibDataManager::RemoveMeAsUidListener");
-}
-
-
-}
-
-void BibDataManager::CreateMappingDialog(Window* pParent)
-{
- MappingDialog_Impl* pDlg = new MappingDialog_Impl(pParent, this);
- if(RET_OK == pDlg->Execute() && pBibView)
- {
- reload();
- }
- delete pDlg;
-}
-
-::rtl::OUString BibDataManager::CreateDBChangeDialog(Window* pParent)
-{
- ::rtl::OUString uRet;
- DBChangeDialog_Impl * pDlg = new DBChangeDialog_Impl(pParent, this );
- if(RET_OK == pDlg->Execute())
- {
- String sNewURL = pDlg->GetCurrentURL();
- if(sNewURL != String(getActiveDataSource()))
- {
- uRet = sNewURL;
- }
- }
- delete pDlg;
- return uRet;
-}
-
-void BibDataManager::DispatchDBChangeDialog()
-{
- if(pToolbar)
- pToolbar->SendDispatch(TBC_BT_CHANGESOURCE, Sequence< PropertyValue >());
-}
-
-const ::rtl::OUString& BibDataManager::GetIdentifierMapping()
-{
- if(!sIdentifierMapping.getLength())
- {
- BibConfig* pConfig = BibModul::GetConfig();
- BibDBDescriptor aDesc;
- aDesc.sDataSource = getActiveDataSource();
- aDesc.sTableOrQuery = getActiveDataTable();
- aDesc.nCommandType = CommandType::TABLE;
- const Mapping* pMapping = pConfig->GetMapping(aDesc);
- sIdentifierMapping = pConfig->GetDefColumnName(IDENTIFIER_POS);
- if(pMapping)
- {
- for(sal_uInt16 nEntry = 0; nEntry < COLUMN_COUNT; nEntry++)
- {
- if(pMapping->aColumnPairs[nEntry].sLogicalColumnName == sIdentifierMapping)
- {
- sIdentifierMapping = pMapping->aColumnPairs[nEntry].sRealColumnName;
- break;
- }
- }
- }
- }
- return sIdentifierMapping;
-}
-
-void BibDataManager::SetToolbar(BibToolBar* pSet)
-{
- pToolbar = pSet;
- if(pToolbar)
- pToolbar->SetDatMan(*this);
-}
-
-uno::Reference< form::runtime::XFormController > BibDataManager::GetFormController()
-{
- if(!m_xFormCtrl.is())
- {
- Reference< lang::XMultiServiceFactory > xMgr = comphelper::getProcessServiceFactory();
- m_xFormCtrl = uno::Reference< form::runtime::XFormController > (
- xMgr->createInstance(C2U("com.sun.star.form.runtime.FormController")), UNO_QUERY);
- m_xFormCtrl->setModel(uno::Reference< awt::XTabControllerModel > (getForm(), UNO_QUERY));
- m_xFormDispatch = uno::Reference< frame::XDispatch > ( m_xFormCtrl, UNO_QUERY);
- }
- return m_xFormCtrl;
-}
-
-void BibDataManager::RegisterInterceptor( ::bib::BibBeamer* pBibBeamer)
-{
- DBG_ASSERT( !m_pInterceptorHelper, "BibDataManager::RegisterInterceptor: called twice!" );
-
- if( pBibBeamer )
- m_pInterceptorHelper = new BibInterceptorHelper( pBibBeamer, m_xFormDispatch);
- if( m_pInterceptorHelper )
- m_pInterceptorHelper->acquire();
-}
-
-
-sal_Bool BibDataManager::HasActiveConnection()const
-{
- sal_Bool bRet = sal_False;
- Reference< XPropertySet > xPrSet( m_xForm, UNO_QUERY );
- if( xPrSet.is() )
- {
- Reference< XComponent > xConnection;
- xPrSet->getPropertyValue(C2U("ActiveConnection")) >>= xConnection;
- bRet = xConnection.is();
- }
- return bRet;
-}
-
-sal_Bool BibDataManager::HasActiveConnection()
-{
- return getConnection( m_xForm ).is();
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */