diff options
Diffstat (limited to 'dbaccess/source/ui/dlg/AdabasStat.cxx')
-rw-r--r-- | dbaccess/source/ui/dlg/AdabasStat.cxx | 333 |
1 files changed, 333 insertions, 0 deletions
diff --git a/dbaccess/source/ui/dlg/AdabasStat.cxx b/dbaccess/source/ui/dlg/AdabasStat.cxx new file mode 100644 index 000000000000..7dd769be3131 --- /dev/null +++ b/dbaccess/source/ui/dlg/AdabasStat.cxx @@ -0,0 +1,333 @@ +/************************************************************************* + * + * 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" + +#ifndef _TOOLS_DEBUG_HXX +#include <tools/debug.hxx> +#endif +#ifndef _CPPUHELPER_EXC_HLP_HXX_ +#include <cppuhelper/exc_hlp.hxx> +#endif +#ifndef TOOLS_DIAGNOSE_EX_H +#include <tools/diagnose_ex.h> +#endif +#ifndef _DBAUI_ADASTAT_HXX_ +#include "AdabasStat.hxx" +#endif +#ifndef _COMPHELPER_TYPES_HXX_ +#include <comphelper/types.hxx> +#endif +#ifndef _COM_SUN_STAR_SDBC_XSTATEMENT_HPP_ +#include <com/sun/star/sdbc/XStatement.hpp> +#endif +#ifndef _COM_SUN_STAR_SDBC_XROW_HPP_ +#include <com/sun/star/sdbc/XRow.hpp> +#endif +#ifndef _COM_SUN_STAR_SDBC_XRESULTSET_HPP_ +#include <com/sun/star/sdbc/XResultSet.hpp> +#endif +#ifndef _COM_SUN_STAR_BEANS_XPROPERTYSET_HPP_ +#include <com/sun/star/beans/XPropertySet.hpp> +#endif +#ifndef DBAUI_ADABASSTAT_HRC +#include "AdabasStat.hrc" +#endif +#ifndef _DBU_DLG_HRC_ +#include "dbu_dlg.hrc" +#endif +#ifndef DBACCESS_SHARED_DBUSTRINGS_HRC +#include "dbustrings.hrc" +#endif +#ifndef DBAUI_TOOLS_HXX +#include "UITools.hxx" +#endif +#ifndef _CONNECTIVITY_DBTOOLS_HXX_ +#include <connectivity/dbtools.hxx> +#endif +#ifndef _DBAUI_SQLMESSAGE_HXX_ +#include "sqlmessage.hxx" +#endif + +using namespace dbaui; +DBG_NAME(OAdabasStatistics) +namespace dbaui +{ + using namespace dbtools; + using namespace ::com::sun::star::uno; + using namespace ::com::sun::star::beans; + using namespace ::com::sun::star::sdbc; + using namespace ::com::sun::star::lang; + + + +OAdabasStatistics::OAdabasStatistics( Window* pParent, + const ::rtl::OUString& _rUser, + const Reference< ::com::sun::star::sdbc::XConnection >& _xCurrentConnection, + const Reference< XMultiServiceFactory >& _xFactory) + : ModalDialog( pParent, ModuleRes(DLG_ADABASSTAT) ) + ,m_FL_FILES( this , ModuleRes(FL_FILES)) + ,m_FT_SYSDEVSPACE( this , ModuleRes(FT_SYSDEVSPACE)) + ,m_ET_SYSDEVSPACE( this , STR_ADABAS_HELP_SYSDEVSPACE,ModuleRes(ET_SYSDEVSPACE)) + ,m_FT_TRANSACTIONLOG( this , ModuleRes(FT_TRANSACTIONLOG)) + ,m_ET_TRANSACTIONLOG( this , STR_ADABAS_HELP_TRANSACT,ModuleRes(ET_TRANSACTIONLOG)) + ,m_FT_DATADEVSPACE( this , ModuleRes(FT_DATADEVSPACE)) + ,m_LB_DATADEVS( this , STR_ADABAS_HELP_DATADEVSPACES,ModuleRes(LB_DATADEVS)) + ,m_FL_SIZES( this , ModuleRes(FL_SIZES)) + ,m_FT_SIZE( this , ModuleRes(FT_SIZE)) + ,m_ET_SIZE( this , STR_ADABAS_HELP_SIZE,ModuleRes(ET_SIZE)) + ,m_FT_FREESIZE( this , ModuleRes(FT_FREESIZE)) + ,m_ET_FREESIZE( this , STR_ADABAS_HELP_FREESIZE,ModuleRes(ET_FREESIZE)) + ,m_FT_MEMORYUSING( this , ModuleRes(FT_MEMORYUSING)) + ,m_ET_MEMORYUSING( this , STR_ADABAS_HELP_MEMORYUSING,ModuleRes(ET_MEMORYUSING)) + ,m_PB_OK( this , ModuleRes(PB_OK)) + ,m_xConnection(_xCurrentConnection) + ,m_bErrorShown(sal_False) +{ + DBG_CTOR(OAdabasStatistics,NULL); + + FreeResource(); + + DBG_ASSERT(m_xConnection.is(),"No connection"); + if(m_xConnection.is()) + { + Reference<XStatement> xStmt; + Reference<XResultSet> xRes; + + sal_Bool bCanSelect = sal_False; + ::rtl::OUString aStmt; + ::rtl::OUString sSchema = _rUser.toAsciiUpperCase(); + + Reference<XDatabaseMetaData> xMetaData; + // first read the sizes + try + { + xMetaData = m_xConnection->getMetaData(); + bCanSelect = checkSystemTable(::rtl::OUString::createFromAscii("SERVERDBSTATISTICS"),sSchema); + + if(bCanSelect) + { + aStmt = ::rtl::OUString::createFromAscii("SELECT SERVERDBSIZE, UNUSEDPAGES FROM "); + + aStmt += ::dbtools::quoteTableName(xMetaData,sSchema,::dbtools::eInDataManipulation); + aStmt += ::rtl::OUString::createFromAscii(".\"SERVERDBSTATISTICS\""); + + xStmt = m_xConnection->createStatement(); + xRes = xStmt->executeQuery(aStmt); + + + Reference<XRow> xRow(xRes,UNO_QUERY); + // first the db sizes + if(xRes.is() && xRes->next()) + { + double nUsedPages = xRow->getInt(1) / 256; + double nFreePages = xRow->getInt(2) / 256; + + m_ET_SIZE.SetText(::rtl::OUString::valueOf((sal_Int32)nUsedPages)); + m_ET_FREESIZE.SetText(::rtl::OUString::valueOf((sal_Int32)nFreePages)); + m_ET_MEMORYUSING.SetValue(static_cast<sal_Int32>(((nUsedPages-nFreePages)/nUsedPages)*100)); + } + else + showError(); + + xRow = NULL; + } + else + showError(); + } + catch(const SQLException& ) + { + ::dbaui::showError( SQLExceptionInfo( ::cppu::getCaughtException() ), pParent, _xFactory ); + } + catch( const Exception& ) + { + DBG_UNHANDLED_EXCEPTION(); + } + try + { + ::comphelper::disposeComponent(xStmt); + } + catch( const Exception& ) + { + DBG_UNHANDLED_EXCEPTION(); + } + + // now fill the datadev spaces + if(bCanSelect) + { + try + { + bCanSelect = checkSystemTable(::rtl::OUString::createFromAscii("DATADEVSPACES"),sSchema); + + if(bCanSelect) + { + // then the db files + aStmt = ::rtl::OUString::createFromAscii("SELECT DEVSPACENAME FROM "); + aStmt += ::dbtools::quoteTableName(xMetaData,sSchema,::dbtools::eInDataManipulation); + aStmt += ::rtl::OUString::createFromAscii(".\"DATADEVSPACES\""); + xStmt = m_xConnection->createStatement(); + xRes = xStmt->executeQuery(aStmt); + + Reference<XRow> xRow(xRes,UNO_QUERY); + while(xRes.is() && xRes->next()) + { + m_LB_DATADEVS.InsertEntry(xRow->getString(1)); + } + if(!m_LB_DATADEVS.GetEntryCount()) + showError(); + } + else + showError(); + } + catch(const SQLException& e) + { + ::dbaui::showError(SQLExceptionInfo(e),pParent,_xFactory); + } + catch( const Exception& ) + { + DBG_UNHANDLED_EXCEPTION(); + } + try + { + ::comphelper::disposeComponent(xStmt); + } + catch( const Exception& ) + { + DBG_UNHANDLED_EXCEPTION(); + } + + // now fill the sysdatadev spaces + if(bCanSelect) + { + try + { + bCanSelect = checkSystemTable(::rtl::OUString::createFromAscii("CONFIGURATION"),sSchema); + + if(bCanSelect) + { + aStmt = ::rtl::OUString::createFromAscii("SELECT * FROM "); + aStmt += ::dbtools::quoteTableName(xMetaData,sSchema,::dbtools::eInDataManipulation); + aStmt += ::rtl::OUString::createFromAscii(".CONFIGURATION WHERE DESCRIPTION LIKE 'SYS%DEVSPACE%NAME'"); + xStmt = m_xConnection->createStatement(); + xRes = xStmt->executeQuery(aStmt); + if(xRes.is() && xRes->next()) + { + Reference<XRow> xRow(xRes,UNO_QUERY); + m_ET_SYSDEVSPACE.SetText(xRow->getString(2)); + } + else + showError(); + + aStmt = ::rtl::OUString::createFromAscii("SELECT * FROM "); + aStmt += ::dbtools::quoteTableName(xMetaData,sSchema,::dbtools::eInDataManipulation); + aStmt += ::rtl::OUString::createFromAscii(".CONFIGURATION WHERE DESCRIPTION = 'TRANSACTION LOG NAME'"); + xRes = xStmt->executeQuery(aStmt); + if(xRes.is() && xRes->next()) + { + Reference<XRow> xRow(xRes,UNO_QUERY); + m_ET_TRANSACTIONLOG.SetText(xRow->getString(2)); + } + else + showError(); + } + else + showError(); + } + catch(const SQLException& e) + { + ::dbaui::showError(SQLExceptionInfo(e),pParent,_xFactory); + } + catch( const Exception& ) + { + DBG_UNHANDLED_EXCEPTION(); + } + try + { + ::comphelper::disposeComponent(xStmt); + } + catch( const Exception& ) + { + DBG_UNHANDLED_EXCEPTION(); + } + } + } + } + + m_ET_SYSDEVSPACE.SetSpecialReadOnly(sal_True); + m_ET_TRANSACTIONLOG.SetSpecialReadOnly(sal_True); + m_LB_DATADEVS.SetSpecialReadOnly(sal_True); + m_ET_SIZE.SetSpecialReadOnly(sal_True); + m_ET_FREESIZE.SetSpecialReadOnly(sal_True); + m_ET_MEMORYUSING.SetSpecialReadOnly(sal_True); +} +//------------------------------------------------------------------------ +OAdabasStatistics::~OAdabasStatistics() +{ + DBG_DTOR(OAdabasStatistics,NULL); +} +// ----------------------------------------------------------------------------- +sal_Bool OAdabasStatistics::checkSystemTable(const ::rtl::OUString& _rsSystemTable, ::rtl::OUString& _rsSchemaName ) +{ + sal_Bool bCanSelect = sal_False; + Reference<XDatabaseMetaData> xMeta = m_xConnection->getMetaData(); + if ( xMeta.is() ) + { + Reference<XResultSet> xRes = xMeta->getTablePrivileges(Any(),::rtl::OUString::createFromAscii("%"), _rsSystemTable); + if(xRes.is()) + { + Reference<XRow> xRow(xRes,UNO_QUERY); + static const ::rtl::OUString sSelect = ::rtl::OUString::createFromAscii("SELECT"); + // first the db sizes + while( xRow.is() && xRes->next() ) + { + _rsSchemaName = xRow->getString(2); + if(sSelect == xRow->getString(6) && !xRow->wasNull()) + { + bCanSelect = sal_True; + break; + } + } + ::comphelper::disposeComponent(xRes); + } + } + + return bCanSelect; +} +// ----------------------------------------------------------------------------- +void OAdabasStatistics::showError() +{ + if(!m_bErrorShown) + { + OSQLMessageBox aMsg(GetParent(),GetText(),String(ModuleRes(STR_ADABAS_ERROR_SYSTEMTABLES))); + aMsg.Execute(); + m_bErrorShown = sal_True; + } +} +// ----------------------------------------------------------------------------- +} + |