1*cdf0e10cSrcweir /*************************************************************************
2*cdf0e10cSrcweir  *
3*cdf0e10cSrcweir  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4*cdf0e10cSrcweir  *
5*cdf0e10cSrcweir  * Copyright 2000, 2010 Oracle and/or its affiliates.
6*cdf0e10cSrcweir  *
7*cdf0e10cSrcweir  * OpenOffice.org - a multi-platform office productivity suite
8*cdf0e10cSrcweir  *
9*cdf0e10cSrcweir  * This file is part of OpenOffice.org.
10*cdf0e10cSrcweir  *
11*cdf0e10cSrcweir  * OpenOffice.org is free software: you can redistribute it and/or modify
12*cdf0e10cSrcweir  * it under the terms of the GNU Lesser General Public License version 3
13*cdf0e10cSrcweir  * only, as published by the Free Software Foundation.
14*cdf0e10cSrcweir  *
15*cdf0e10cSrcweir  * OpenOffice.org is distributed in the hope that it will be useful,
16*cdf0e10cSrcweir  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17*cdf0e10cSrcweir  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18*cdf0e10cSrcweir  * GNU Lesser General Public License version 3 for more details
19*cdf0e10cSrcweir  * (a copy is included in the LICENSE file that accompanied this code).
20*cdf0e10cSrcweir  *
21*cdf0e10cSrcweir  * You should have received a copy of the GNU Lesser General Public License
22*cdf0e10cSrcweir  * version 3 along with OpenOffice.org.  If not, see
23*cdf0e10cSrcweir  * <http://www.openoffice.org/license.html>
24*cdf0e10cSrcweir  * for a copy of the LGPLv3 License.
25*cdf0e10cSrcweir  *
26*cdf0e10cSrcweir  ************************************************************************/
27*cdf0e10cSrcweir 
28*cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
29*cdf0e10cSrcweir #include "precompiled_connectivity.hxx"
30*cdf0e10cSrcweir #include "hsqldb/HCatalog.hxx"
31*cdf0e10cSrcweir #include "hsqldb/HUsers.hxx"
32*cdf0e10cSrcweir #include "hsqldb/HTables.hxx"
33*cdf0e10cSrcweir #include "hsqldb/HViews.hxx"
34*cdf0e10cSrcweir #include <com/sun/star/sdbc/XRow.hpp>
35*cdf0e10cSrcweir #include <com/sun/star/sdbc/XResultSet.hpp>
36*cdf0e10cSrcweir #include <comphelper/types.hxx>
37*cdf0e10cSrcweir 
38*cdf0e10cSrcweir 
39*cdf0e10cSrcweir // -------------------------------------------------------------------------
40*cdf0e10cSrcweir using namespace connectivity;
41*cdf0e10cSrcweir using namespace connectivity::hsqldb;
42*cdf0e10cSrcweir //using namespace connectivity::sdbcx;
43*cdf0e10cSrcweir using namespace ::com::sun::star::uno;
44*cdf0e10cSrcweir using namespace ::com::sun::star::beans;
45*cdf0e10cSrcweir using namespace ::com::sun::star::sdbcx;
46*cdf0e10cSrcweir using namespace ::com::sun::star::sdbc;
47*cdf0e10cSrcweir using namespace ::com::sun::star::container;
48*cdf0e10cSrcweir using namespace ::com::sun::star::lang;
49*cdf0e10cSrcweir // -------------------------------------------------------------------------
50*cdf0e10cSrcweir OHCatalog::OHCatalog(const Reference< XConnection >& _xConnection) : sdbcx::OCatalog(_xConnection)
51*cdf0e10cSrcweir 				,m_xConnection(_xConnection)
52*cdf0e10cSrcweir {
53*cdf0e10cSrcweir }
54*cdf0e10cSrcweir // -----------------------------------------------------------------------------
55*cdf0e10cSrcweir void OHCatalog::refreshObjects(const Sequence< ::rtl::OUString >& _sKindOfObject,TStringVector& _rNames)
56*cdf0e10cSrcweir {
57*cdf0e10cSrcweir 	Reference< XResultSet > xResult = m_xMetaData->getTables(Any(),
58*cdf0e10cSrcweir 															::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("%")),
59*cdf0e10cSrcweir 															::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("%")),
60*cdf0e10cSrcweir 															_sKindOfObject);
61*cdf0e10cSrcweir 	fillNames(xResult,_rNames);
62*cdf0e10cSrcweir }
63*cdf0e10cSrcweir // -------------------------------------------------------------------------
64*cdf0e10cSrcweir void OHCatalog::refreshTables()
65*cdf0e10cSrcweir {
66*cdf0e10cSrcweir 	TStringVector aVector;
67*cdf0e10cSrcweir 	static const ::rtl::OUString s_sTableTypeView(RTL_CONSTASCII_USTRINGPARAM("VIEW"));
68*cdf0e10cSrcweir 	static const ::rtl::OUString s_sTableTypeTable(RTL_CONSTASCII_USTRINGPARAM("TABLE"));
69*cdf0e10cSrcweir 
70*cdf0e10cSrcweir 	Sequence< ::rtl::OUString > sTableTypes(2);
71*cdf0e10cSrcweir 	sTableTypes[0] = s_sTableTypeView;
72*cdf0e10cSrcweir 	sTableTypes[1] = s_sTableTypeTable;
73*cdf0e10cSrcweir 
74*cdf0e10cSrcweir 	refreshObjects(sTableTypes,aVector);
75*cdf0e10cSrcweir 
76*cdf0e10cSrcweir 	if ( m_pTables )
77*cdf0e10cSrcweir 		m_pTables->reFill(aVector);
78*cdf0e10cSrcweir 	else
79*cdf0e10cSrcweir 		m_pTables = new OTables(m_xMetaData,*this,m_aMutex,aVector);
80*cdf0e10cSrcweir }
81*cdf0e10cSrcweir // -------------------------------------------------------------------------
82*cdf0e10cSrcweir void OHCatalog::refreshViews()
83*cdf0e10cSrcweir {
84*cdf0e10cSrcweir 	Sequence< ::rtl::OUString > aTypes(1);
85*cdf0e10cSrcweir 	aTypes[0] = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("VIEW"));
86*cdf0e10cSrcweir 
87*cdf0e10cSrcweir 	sal_Bool bSupportsViews = sal_False;
88*cdf0e10cSrcweir 	try
89*cdf0e10cSrcweir 	{
90*cdf0e10cSrcweir 		Reference<XResultSet> xRes = m_xMetaData->getTableTypes();
91*cdf0e10cSrcweir 		Reference<XRow> xRow(xRes,UNO_QUERY);
92*cdf0e10cSrcweir 		while ( xRow.is() && xRes->next() )
93*cdf0e10cSrcweir 		{
94*cdf0e10cSrcweir 			if ( (bSupportsViews = xRow->getString(1).equalsIgnoreAsciiCase(aTypes[0])) )
95*cdf0e10cSrcweir 			{
96*cdf0e10cSrcweir 				break;
97*cdf0e10cSrcweir 			}
98*cdf0e10cSrcweir 		}
99*cdf0e10cSrcweir 	}
100*cdf0e10cSrcweir 	catch(const SQLException&)
101*cdf0e10cSrcweir 	{
102*cdf0e10cSrcweir 	}
103*cdf0e10cSrcweir 
104*cdf0e10cSrcweir 	TStringVector aVector;
105*cdf0e10cSrcweir 	if ( bSupportsViews )
106*cdf0e10cSrcweir 		refreshObjects(aTypes,aVector);
107*cdf0e10cSrcweir 
108*cdf0e10cSrcweir 	if ( m_pViews )
109*cdf0e10cSrcweir 		m_pViews->reFill(aVector);
110*cdf0e10cSrcweir 	else
111*cdf0e10cSrcweir 		m_pViews = new HViews( m_xConnection, *this, m_aMutex, aVector );
112*cdf0e10cSrcweir }
113*cdf0e10cSrcweir // -------------------------------------------------------------------------
114*cdf0e10cSrcweir void OHCatalog::refreshGroups()
115*cdf0e10cSrcweir {
116*cdf0e10cSrcweir }
117*cdf0e10cSrcweir // -------------------------------------------------------------------------
118*cdf0e10cSrcweir void OHCatalog::refreshUsers()
119*cdf0e10cSrcweir {
120*cdf0e10cSrcweir 	TStringVector aVector;
121*cdf0e10cSrcweir 	Reference< XStatement > xStmt = m_xConnection->createStatement(  );
122*cdf0e10cSrcweir 	Reference< XResultSet >  xResult = xStmt->executeQuery(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("select User from hsqldb.user group by User")));
123*cdf0e10cSrcweir 	if ( xResult.is() )
124*cdf0e10cSrcweir 	{
125*cdf0e10cSrcweir 		Reference< XRow > xRow(xResult,UNO_QUERY);
126*cdf0e10cSrcweir 		TString2IntMap aMap;
127*cdf0e10cSrcweir 		while( xResult->next() )
128*cdf0e10cSrcweir 			aVector.push_back(xRow->getString(1));
129*cdf0e10cSrcweir 		::comphelper::disposeComponent(xResult);
130*cdf0e10cSrcweir 	}
131*cdf0e10cSrcweir 	::comphelper::disposeComponent(xStmt);
132*cdf0e10cSrcweir 
133*cdf0e10cSrcweir 	if(m_pUsers)
134*cdf0e10cSrcweir 		m_pUsers->reFill(aVector);
135*cdf0e10cSrcweir 	else
136*cdf0e10cSrcweir 		m_pUsers = new OUsers(*this,m_aMutex,aVector,m_xConnection,this);
137*cdf0e10cSrcweir }
138*cdf0e10cSrcweir // -----------------------------------------------------------------------------
139*cdf0e10cSrcweir Any SAL_CALL OHCatalog::queryInterface( const Type & rType ) throw(RuntimeException)
140*cdf0e10cSrcweir {
141*cdf0e10cSrcweir 	if ( rType == ::getCppuType((const Reference<XGroupsSupplier>*)0) )
142*cdf0e10cSrcweir 		return Any();
143*cdf0e10cSrcweir 
144*cdf0e10cSrcweir 	return OCatalog::queryInterface(rType);
145*cdf0e10cSrcweir }
146*cdf0e10cSrcweir // -----------------------------------------------------------------------------
147*cdf0e10cSrcweir Sequence< Type > SAL_CALL OHCatalog::getTypes(  ) throw(RuntimeException)
148*cdf0e10cSrcweir {
149*cdf0e10cSrcweir 	Sequence< Type > aTypes = OCatalog::getTypes();
150*cdf0e10cSrcweir 	::std::vector<Type> aOwnTypes;
151*cdf0e10cSrcweir 	aOwnTypes.reserve(aTypes.getLength());
152*cdf0e10cSrcweir 	const Type* pBegin = aTypes.getConstArray();
153*cdf0e10cSrcweir 	const Type* pEnd = pBegin + aTypes.getLength();
154*cdf0e10cSrcweir 	for(;pBegin != pEnd;++pBegin)
155*cdf0e10cSrcweir 	{
156*cdf0e10cSrcweir 		if ( !(*pBegin == ::getCppuType((const Reference<XGroupsSupplier>*)0)))
157*cdf0e10cSrcweir 		{
158*cdf0e10cSrcweir 			aOwnTypes.push_back(*pBegin);
159*cdf0e10cSrcweir 		}
160*cdf0e10cSrcweir 	}
161*cdf0e10cSrcweir 	const Type* pTypes = aOwnTypes.empty() ? 0 : &aOwnTypes[0];
162*cdf0e10cSrcweir 	return Sequence< Type >(pTypes, aOwnTypes.size());
163*cdf0e10cSrcweir }
164*cdf0e10cSrcweir // -----------------------------------------------------------------------------
165*cdf0e10cSrcweir 
166*cdf0e10cSrcweir 
167