diff options
Diffstat (limited to 'dbaccess/source/ui/dlg/dbfindex.cxx')
-rw-r--r-- | dbaccess/source/ui/dlg/dbfindex.cxx | 557 |
1 files changed, 0 insertions, 557 deletions
diff --git a/dbaccess/source/ui/dlg/dbfindex.cxx b/dbaccess/source/ui/dlg/dbfindex.cxx deleted file mode 100644 index 6403be25f..000000000 --- a/dbaccess/source/ui/dlg/dbfindex.cxx +++ /dev/null @@ -1,557 +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_dbaccess.hxx" - -#include "dbfindex.hxx" - -#include <tools/config.hxx> -#include <sfx2/app.hxx> -#include "moduledbu.hxx" -#include "dbu_dlg.hrc" -#include "dbfindex.hrc" -#include <osl/diagnose.h> -#include <unotools/localfilehelper.hxx> -#include <tools/urlobj.hxx> -#include <unotools/pathoptions.hxx> -#include <ucbhelper/content.hxx> -#include <svl/filenotation.hxx> -#include <rtl/strbuf.hxx> - - -//......................................................................... -namespace dbaui -{ -//......................................................................... - -using namespace ::com::sun::star::uno; -using namespace ::com::sun::star::ucb; -using namespace ::svt; - -const ByteString aGroupIdent("dBase III"); - -////////////////////////////////////////////////////////////////////////// -// Klasse ODbaseIndexDialog -DBG_NAME(ODbaseIndexDialog) -//------------------------------------------------------------------------- -ODbaseIndexDialog::ODbaseIndexDialog( Window * pParent, String aDataSrcName ) - : ModalDialog( pParent, ModuleRes(DLG_DBASE_INDEXES) ), - aPB_OK( this, ModuleRes( PB_OK ) ), - aPB_CANCEL( this, ModuleRes( PB_CANCEL ) ), - aPB_HELP( this, ModuleRes( PB_HELP ) ), - m_FT_Tables( this, ModuleRes( FT_TABLES ) ), - aCB_Tables( this, ModuleRes( CB_TABLES ) ), - m_FL_Indexes( this, ModuleRes( FL_INDEXES ) ), - m_FT_TableIndexes( this, ModuleRes( FT_TABLEINDEXES ) ), - aLB_TableIndexes( this, ModuleRes( LB_TABLEINDEXES ) ), - m_FT_AllIndexes( this, ModuleRes( FT_ALLINDEXES ) ), - aLB_FreeIndexes( this, ModuleRes( LB_FREEINDEXES ) ), - aIB_Add( this, ModuleRes( IB_ADD ) ), - aIB_Remove( this, ModuleRes( IB_REMOVE ) ), - aIB_AddAll( this, ModuleRes( IB_ADDALL ) ), - aIB_RemoveAll( this, ModuleRes( IB_REMOVEALL ) ), - m_aDSN(aDataSrcName), - m_bCaseSensitiv(sal_True) -{ - DBG_CTOR(ODbaseIndexDialog,NULL); - - aCB_Tables.SetSelectHdl( LINK(this, ODbaseIndexDialog, TableSelectHdl) ); - aIB_Add.SetClickHdl( LINK(this, ODbaseIndexDialog, AddClickHdl) ); - aIB_Remove.SetClickHdl( LINK(this, ODbaseIndexDialog, RemoveClickHdl) ); - aIB_AddAll.SetClickHdl( LINK(this, ODbaseIndexDialog, AddAllClickHdl) ); - aIB_RemoveAll.SetClickHdl( LINK(this, ODbaseIndexDialog, RemoveAllClickHdl) ); - aPB_OK.SetClickHdl( LINK(this, ODbaseIndexDialog, OKClickHdl) ); - - aLB_FreeIndexes.SetSelectHdl( LINK(this, ODbaseIndexDialog, OnListEntrySelected) ); - aLB_TableIndexes.SetSelectHdl( LINK(this, ODbaseIndexDialog, OnListEntrySelected) ); - - aCB_Tables.SetDropDownLineCount(8); - Init(); - SetCtrls(); - FreeResource(); -} - -//------------------------------------------------------------------------- -ODbaseIndexDialog::~ODbaseIndexDialog() -{ - - DBG_DTOR(ODbaseIndexDialog,NULL); -} - -//------------------------------------------------------------------------- -sal_Bool ODbaseIndexDialog::GetTable(const String& _rName, TableInfoListIterator& _rPosition) -{ - for ( _rPosition = m_aTableInfoList.begin(); - _rPosition != m_aTableInfoList.end(); - ++_rPosition - ) - { - if (m_bCaseSensitiv) - { - if (_rPosition->aTableName.Equals(_rName)) - return sal_True; - } - else - { - if (_rPosition->aTableName.EqualsIgnoreCaseAscii(_rName)) - return sal_True; - } - } - return sal_False; -} - -//------------------------------------------------------------------------- -void ODbaseIndexDialog::checkButtons() -{ - aIB_Add.Enable(0 != aLB_FreeIndexes.GetSelectEntryCount()); - aIB_AddAll.Enable(0 != aLB_FreeIndexes.GetEntryCount()); - - aIB_Remove.Enable(0 != aLB_TableIndexes.GetSelectEntryCount()); - aIB_RemoveAll.Enable(0 != aLB_TableIndexes.GetEntryCount()); -} - -//------------------------------------------------------------------------- -OTableIndex ODbaseIndexDialog::implRemoveIndex(const String& _rName, TableIndexList& _rList, ListBox& _rDisplay, sal_Bool _bMustExist) -{ - OTableIndex aReturn; - - sal_Int32 nPos = 0; - - TableIndexListIterator aSearch; - for ( aSearch = _rList.begin(); - aSearch != _rList.end(); - ++aSearch, ++nPos - ) - { - if ( m_bCaseSensitiv ? aSearch->GetIndexFileName().Equals(_rName) : aSearch->GetIndexFileName().EqualsIgnoreCaseAscii(_rName) ) - { - aReturn = *aSearch; - - _rList.erase(aSearch); - _rDisplay.RemoveEntry( _rName ); - - // adjust selection if necessary - if ((sal_uInt32)nPos == _rList.size()) - _rDisplay.SelectEntryPos((sal_uInt16)nPos-1); - else - _rDisplay.SelectEntryPos((sal_uInt16)nPos); - - break; - } - } - - (void)_bMustExist; - OSL_ENSURE(!_bMustExist || (aSearch != _rList.end()), "ODbaseIndexDialog::implRemoveIndex : did not find the index!"); - return aReturn; -} - -//------------------------------------------------------------------------- -void ODbaseIndexDialog::implInsertIndex(const OTableIndex& _rIndex, TableIndexList& _rList, ListBox& _rDisplay) -{ - _rList.push_front( _rIndex ); - _rDisplay.InsertEntry( _rIndex.GetIndexFileName() ); - _rDisplay.SelectEntryPos(0); -} - -//------------------------------------------------------------------------- -OTableIndex ODbaseIndexDialog::RemoveTableIndex( const String& _rTableName, const String& _rIndexName, sal_Bool _bMustExist ) -{ - OTableIndex aReturn; - - // does the table exist ? - TableInfoListIterator aTablePos; - if (!GetTable(_rTableName, aTablePos)) - return aReturn; - - return implRemoveIndex(_rIndexName, aTablePos->aIndexList, aLB_TableIndexes, _bMustExist); -} - -//------------------------------------------------------------------------- -void ODbaseIndexDialog::InsertTableIndex( const String& _rTableName, const OTableIndex& _rIndex) -{ - TableInfoListIterator aTablePos; - if (!GetTable(_rTableName, aTablePos)) - return; - - implInsertIndex(_rIndex, aTablePos->aIndexList, aLB_TableIndexes); -} - -//------------------------------------------------------------------------- -IMPL_LINK( ODbaseIndexDialog, OKClickHdl, PushButton*, /*pButton*/ ) -{ - // let all tables write their INF file - - for ( ConstTableInfoListIterator aLoop = m_aTableInfoList.begin(); - aLoop != m_aTableInfoList.end(); - ++aLoop - ) - aLoop->WriteInfFile(m_aDSN); - - EndDialog(); - return 0; -} - -//------------------------------------------------------------------------- -IMPL_LINK( ODbaseIndexDialog, AddClickHdl, PushButton*, /*pButton*/ ) -{ - String aSelection = aLB_FreeIndexes.GetSelectEntry(); - String aTableName = aCB_Tables.GetText(); - OTableIndex aIndex = RemoveFreeIndex( aSelection, sal_True ); - InsertTableIndex( aTableName, aIndex ); - - checkButtons(); - return 0; -} - -//------------------------------------------------------------------------- -IMPL_LINK( ODbaseIndexDialog, RemoveClickHdl, PushButton*, /*pButton*/ ) -{ - String aSelection = aLB_TableIndexes.GetSelectEntry(); - String aTableName = aCB_Tables.GetText(); - OTableIndex aIndex = RemoveTableIndex( aTableName, aSelection, sal_True ); - InsertFreeIndex( aIndex ); - - checkButtons(); - return 0; -} - -//------------------------------------------------------------------------- -IMPL_LINK( ODbaseIndexDialog, AddAllClickHdl, PushButton*, /*pButton*/ ) -{ - sal_uInt16 nCnt = aLB_FreeIndexes.GetEntryCount(); - String aTableName = aCB_Tables.GetText(); - String aEntry; - - for( sal_uInt16 nPos = 0; nPos < nCnt; ++nPos ) - InsertTableIndex( aTableName, RemoveFreeIndex( aLB_FreeIndexes.GetEntry(0), sal_True ) ); - - checkButtons(); - return 0; -} - -//------------------------------------------------------------------------- -IMPL_LINK( ODbaseIndexDialog, RemoveAllClickHdl, PushButton*, /*pButton*/ ) -{ - sal_uInt16 nCnt = aLB_TableIndexes.GetEntryCount(); - String aTableName = aCB_Tables.GetText(); - String aEntry; - - for( sal_uInt16 nPos = 0; nPos < nCnt; ++nPos ) - InsertFreeIndex( RemoveTableIndex( aTableName, aLB_TableIndexes.GetEntry(0), sal_True ) ); - - checkButtons(); - return 0; -} - -//------------------------------------------------------------------------- -IMPL_LINK( ODbaseIndexDialog, OnListEntrySelected, ListBox*, /*NOTINTERESTEDIN*/ ) -{ - checkButtons(); - return 0; -} - -//------------------------------------------------------------------------- -IMPL_LINK( ODbaseIndexDialog, TableSelectHdl, ComboBox*, pComboBox ) -{ - // search the table - TableInfoListIterator aTablePos; - if (!GetTable(pComboBox->GetText(), aTablePos)) - return 0L; - - // fill the listbox for the indexes - aLB_TableIndexes.Clear(); - for ( ConstTableIndexListIterator aLoop = aTablePos->aIndexList.begin(); - aLoop != aTablePos->aIndexList.end(); - ++aLoop - ) - aLB_TableIndexes.InsertEntry( aLoop->GetIndexFileName() ); - - if ( aTablePos->aIndexList.size() ) - aLB_TableIndexes.SelectEntryPos(0); - - checkButtons(); - return 0; -} - -//------------------------------------------------------------------------- -void ODbaseIndexDialog::Init() -{ - aPB_OK.Disable(); - m_FL_Indexes.Disable(); - m_FT_TableIndexes.Disable(); - aLB_TableIndexes.Disable(); - m_FT_AllIndexes.Disable(); - aLB_FreeIndexes.Disable(); - aIB_Add.Disable(); - aIB_Remove.Disable(); - aIB_AddAll.Disable(); - aIB_RemoveAll.Disable(); - - /////////////////////////////////////////////////////////////////////////// - // Alle Indizes werden erst einmal zur Liste der freien Indizes hinzugefuegt. - // Dann wird fuer jede Tabelle in der Inf-Datei nachgeschaut, welche Indizes sie besitzt. - // Diese Indizes werden aus der Liste der freien Indizes entfernt - // und in die Indexliste der Tabelle eingetragen - - /////////////////////////////////////////////////////////////////////////// - // if the string does not contain a path, cut the string - INetURLObject aURL; - aURL.SetSmartProtocol(INET_PROT_FILE); - { - SvtPathOptions aPathOptions; - m_aDSN = aPathOptions.SubstituteVariable(m_aDSN); - } - aURL.SetSmartURL(m_aDSN); - - - // String aFileName = aURL.PathToFileName(); - m_aDSN = aURL.GetMainURL(INetURLObject::NO_DECODE); - ::ucbhelper::Content aFile; - sal_Bool bFolder=sal_True; - try - { - aFile = ::ucbhelper::Content(m_aDSN,Reference< ::com::sun::star::ucb::XCommandEnvironment >()); - bFolder = aFile.isFolder(); - } - catch(Exception&) - { - return; - } - - /////////////////////////////////////////////////////////////////////////// - // first assume for all indexes they're free - - Sequence< ::rtl::OUString> aFolderContent( ::utl::LocalFileHelper::GetFolderContents(m_aDSN,bFolder)); - - ::rtl::OUString aIndexExt(RTL_CONSTASCII_USTRINGPARAM("ndx")); - ::rtl::OUString aTableExt(RTL_CONSTASCII_USTRINGPARAM("dbf")); - - ::std::vector< String > aUsedIndexes; - - String aExt; - const ::rtl::OUString *pBegin = aFolderContent.getConstArray(); - const ::rtl::OUString *pEnd = pBegin + aFolderContent.getLength(); - aURL.SetSmartProtocol(INET_PROT_FILE); - for(;pBegin != pEnd;++pBegin) - { - String aName; - ::utl::LocalFileHelper::ConvertURLToPhysicalName(pBegin->getStr(),aName); - aURL.SetSmartURL(aName); - aExt = aURL.getExtension(); - if(aExt == aIndexExt.getStr()) - { - m_aFreeIndexList.push_back( OTableIndex(aURL.getName()) ); - } - else if(aExt == aTableExt.getStr()) - { - m_aTableInfoList.push_back( OTableInfo(aURL.getName()) ); - OTableInfo& rTabInfo = m_aTableInfoList.back(); - - // open the INF file - aURL.setExtension(String::CreateFromAscii("inf")); - OFileNotation aTransformer(aURL.GetURLNoPass(), OFileNotation::N_URL); - Config aInfFile( aTransformer.get(OFileNotation::N_SYSTEM) ); - aInfFile.SetGroup( aGroupIdent ); - - /////////////////////////////////////////////////////////////////////////// - // fill the indexes list - ByteString aNDX; - sal_uInt16 nKeyCnt = aInfFile.GetKeyCount(); - ByteString aKeyName; - String aEntry; - - for( sal_uInt16 nKey = 0; nKey < nKeyCnt; nKey++ ) - { - // does the key point to an index file ? - aKeyName = aInfFile.GetKeyName( nKey ); - aNDX = aKeyName.Copy(0,3); - - // yes -> add to the tables index list - if (aNDX == "NDX" ) - { - aEntry = String(aInfFile.ReadKey(aKeyName), gsl_getSystemTextEncoding()); - rTabInfo.aIndexList.push_back( OTableIndex( aEntry ) ); - - // and remove it from the free index list - aUsedIndexes.push_back(aEntry); - // do this later below. We may not have encountered the index file, yet, thus we may not - // know the index as beeing free, yet - } - - } - } - } - - for ( ::std::vector< String >::const_iterator aUsedIndex = aUsedIndexes.begin(); - aUsedIndex != aUsedIndexes.end(); - ++aUsedIndex - ) - RemoveFreeIndex( *aUsedIndex, sal_False ); - - if (m_aTableInfoList.size()) - { - aPB_OK.Enable(); - m_FL_Indexes.Enable(); - m_FT_TableIndexes.Enable(); - aLB_TableIndexes.Enable(); - m_FT_AllIndexes.Enable(); - aLB_FreeIndexes.Enable(); - } - - checkButtons(); -} - -//------------------------------------------------------------------------- -void ODbaseIndexDialog::SetCtrls() -{ - // ComboBox Tabellen - for ( ConstTableInfoListIterator aLoop = m_aTableInfoList.begin(); - aLoop != m_aTableInfoList.end(); - ++aLoop - ) - aCB_Tables.InsertEntry( aLoop->aTableName ); - - // Den ersten Datensatz ins Edit stellen - if( m_aTableInfoList.size() ) - { - const OTableInfo& rTabInfo = m_aTableInfoList.front(); - aCB_Tables.SetText( rTabInfo.aTableName ); - - // ListBox der Tabellenindizes aufbauen - for ( ConstTableIndexListIterator aIndex = rTabInfo.aIndexList.begin(); - aIndex != rTabInfo.aIndexList.end(); - ++aIndex - ) - aLB_TableIndexes.InsertEntry( aIndex->GetIndexFileName() ); - - if( rTabInfo.aIndexList.size() ) - aLB_TableIndexes.SelectEntryPos( 0 ); - - } - - // ListBox freie Indizes - for ( ConstTableIndexListIterator aFree = m_aFreeIndexList.begin(); - aFree != m_aFreeIndexList.end(); - ++aFree - ) - aLB_FreeIndexes.InsertEntry( aFree->GetIndexFileName() ); - - if( m_aFreeIndexList.size() ) - aLB_FreeIndexes.SelectEntryPos( 0 ); - - - TableSelectHdl(&aCB_Tables); - checkButtons(); -} - -////////////////////////////////////////////////////////////////////////// -// Klasse OTableInfo -//------------------------------------------------------------------------- -void OTableInfo::WriteInfFile( const String& rDSN ) const -{ - // INF-Datei oeffnen - INetURLObject aURL; - aURL.SetSmartProtocol(INET_PROT_FILE); - String aDsn = rDSN; - { - SvtPathOptions aPathOptions; - aDsn = aPathOptions.SubstituteVariable(aDsn); - } - aURL.SetSmartURL(aDsn); - aURL.Append(aTableName); - aURL.setExtension(String::CreateFromAscii("inf")); - - OFileNotation aTransformer(aURL.GetURLNoPass(), OFileNotation::N_URL); - Config aInfFile( aTransformer.get(OFileNotation::N_SYSTEM) ); - aInfFile.SetGroup( aGroupIdent ); - - // Erst einmal alle Tabellenindizes loeschen - ByteString aNDX; - sal_uInt16 nKeyCnt = aInfFile.GetKeyCount(); - ByteString aEntry; - sal_uInt16 nKey = 0; - - while( nKey < nKeyCnt ) - { - // Verweist der Key auf ein Indexfile?... - ByteString aKeyName = aInfFile.GetKeyName( nKey ); - aNDX = aKeyName.Copy(0,3); - - //...wenn ja, Indexfile loeschen, nKey steht dann auf nachfolgendem Key - if( aNDX == "NDX" ) - { - aInfFile.DeleteKey(aKeyName); - nKeyCnt--; - } - else - nKey++; - - } - - // Jetzt alle gespeicherten Indizes hinzufuegen - sal_uInt16 nPos = 0; - for ( ConstTableIndexListIterator aIndex = aIndexList.begin(); - aIndex != aIndexList.end(); - ++aIndex, ++nPos - ) - { - rtl::OStringBuffer aKeyName(RTL_CONSTASCII_STRINGPARAM("NDX")); - if( nPos > 0 ) // Erster Index erhaelt keine Ziffer - aKeyName.append(static_cast<sal_Int32>(nPos)); - aInfFile.WriteKey( - aKeyName.makeStringAndClear(), - rtl::OUStringToOString(aIndex->GetIndexFileName(), - gsl_getSystemTextEncoding())); - } - - aInfFile.Flush(); - - // Falls nur noch [dbase] in INF-File steht, Datei loeschen - if(!nPos) - { - try - { - ::ucbhelper::Content aContent(aURL.GetURLNoPass(),Reference<XCommandEnvironment>()); - aContent.executeCommand( rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("delete")),makeAny( sal_Bool( sal_True ) ) ); - } - catch (const Exception& e ) - { - (void)e; // make compiler happy - // simply silent this. The strange algorithm here does a lot of things even if no files at all were - // created or accessed, so it's possible that the file we're trying to delete does not even exist, - // and this is a valid condition. - } - } -} - -//......................................................................... -} // namespace dbaui -//......................................................................... - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |