1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 
28 // MARKER(update_precomp.py): autogen include statement, do not remove
29 #include "precompiled_connectivity.hxx"
30 #include "hsqldb/HUsers.hxx"
31 #include "hsqldb/HUser.hxx"
32 #include "hsqldb/HTable.hxx"
33 #include <com/sun/star/sdbc/XRow.hpp>
34 #include <com/sun/star/sdbc/XResultSet.hpp>
35 #include "connectivity/sdbcx/IRefreshable.hxx"
36 #include <comphelper/types.hxx>
37 #include "connectivity/dbexception.hxx"
38 #include "connectivity/dbtools.hxx"
39 #include "TConnection.hxx"
40 
41 using namespace ::comphelper;
42 using namespace connectivity;
43 using namespace connectivity::hsqldb;
44 using namespace ::com::sun::star::uno;
45 using namespace ::com::sun::star::beans;
46 //	using namespace ::com::sun::star::sdbcx;
47 using namespace ::com::sun::star::sdbc;
48 using namespace ::com::sun::star::container;
49 using namespace ::com::sun::star::lang;
50 typedef connectivity::sdbcx::OCollection OCollection_TYPE;
51 
52 OUsers::OUsers( ::cppu::OWeakObject& _rParent,
53 				::osl::Mutex& _rMutex,
54 				const TStringVector &_rVector,
55 				const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection >& _xConnection,
56 				connectivity::sdbcx::IRefreshableUsers* _pParent)
57 	: sdbcx::OCollection(_rParent,sal_True,_rMutex,_rVector)
58 	,m_xConnection(_xConnection)
59 	,m_pParent(_pParent)
60 {
61 }
62 // -----------------------------------------------------------------------------
63 
64 sdbcx::ObjectType OUsers::createObject(const ::rtl::OUString& _rName)
65 {
66 	return new OHSQLUser(m_xConnection,_rName);
67 }
68 // -------------------------------------------------------------------------
69 void OUsers::impl_refresh() throw(RuntimeException)
70 {
71 	m_pParent->refreshUsers();
72 }
73 // -------------------------------------------------------------------------
74 Reference< XPropertySet > OUsers::createDescriptor()
75 {
76 	OUserExtend* pNew = new OUserExtend(m_xConnection);
77 	return pNew;
78 }
79 // -------------------------------------------------------------------------
80 // XAppend
81 sdbcx::ObjectType OUsers::appendObject( const ::rtl::OUString& _rForName, const Reference< XPropertySet >& descriptor )
82 {
83 	::rtl::OUString aSql	= ::rtl::OUString::createFromAscii("GRANT USAGE ON * TO ");
84 	::rtl::OUString aQuote	= m_xConnection->getMetaData()->getIdentifierQuoteString(  );
85 	::rtl::OUString sUserName( _rForName );
86 	aSql += ::dbtools::quoteName(aQuote,sUserName)
87 				+ ::rtl::OUString::createFromAscii(" @\"%\" ");
88 	::rtl::OUString sPassword;
89 	descriptor->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_PASSWORD)) >>= sPassword;
90 	if ( sPassword.getLength() )
91 	{
92 		aSql += ::rtl::OUString::createFromAscii(" IDENTIFIED BY '");
93 		aSql += sPassword;
94 		aSql += ::rtl::OUString::createFromAscii("'");
95 	}
96 
97 	Reference< XStatement > xStmt = m_xConnection->createStatement(  );
98 	if(xStmt.is())
99 		xStmt->execute(aSql);
100 	::comphelper::disposeComponent(xStmt);
101 
102     return createObject( _rForName );
103 }
104 // -------------------------------------------------------------------------
105 // XDrop
106 void OUsers::dropObject(sal_Int32 /*nPos*/,const ::rtl::OUString _sElementName)
107 {
108 	{
109 		::rtl::OUString aSql	= ::rtl::OUString::createFromAscii("REVOKE ALL ON * FROM ");
110 		::rtl::OUString aQuote	= m_xConnection->getMetaData()->getIdentifierQuoteString(  );
111 		aSql += ::dbtools::quoteName(aQuote,_sElementName);
112 
113 		Reference< XStatement > xStmt = m_xConnection->createStatement(  );
114 		if(xStmt.is())
115 			xStmt->execute(aSql);
116 		::comphelper::disposeComponent(xStmt);
117 	}
118 }
119 
120 // -------------------------------------------------------------------------
121