196de5490SAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
396de5490SAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
496de5490SAndrew Rist  * or more contributor license agreements.  See the NOTICE file
596de5490SAndrew Rist  * distributed with this work for additional information
696de5490SAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
796de5490SAndrew Rist  * to you under the Apache License, Version 2.0 (the
896de5490SAndrew Rist  * "License"); you may not use this file except in compliance
996de5490SAndrew Rist  * with the License.  You may obtain a copy of the License at
1096de5490SAndrew Rist  *
1196de5490SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
1296de5490SAndrew Rist  *
1396de5490SAndrew Rist  * Unless required by applicable law or agreed to in writing,
1496de5490SAndrew Rist  * software distributed under the License is distributed on an
1596de5490SAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
1696de5490SAndrew Rist  * KIND, either express or implied.  See the License for the
1796de5490SAndrew Rist  * specific language governing permissions and limitations
1896de5490SAndrew Rist  * under the License.
1996de5490SAndrew Rist  *
2096de5490SAndrew Rist  *************************************************************/
2196de5490SAndrew Rist 
2296de5490SAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25*b63233d8Sdamjan #include "precompiled_dbui.hxx"
26cdf0e10cSrcweir 
27cdf0e10cSrcweir #include "adminpages.hxx"
28cdf0e10cSrcweir #include "DbAdminImpl.hxx"
29cdf0e10cSrcweir #include "dbu_dlg.hrc"
30cdf0e10cSrcweir #include "DriverSettings.hxx"
31cdf0e10cSrcweir #include "dsitems.hxx"
32cdf0e10cSrcweir #include "propertysetitem.hxx"
33cdf0e10cSrcweir #include "UITools.hxx"
34cdf0e10cSrcweir #include "UserAdmin.hxx"
35cdf0e10cSrcweir #include "UserAdminDlg.hrc"
36cdf0e10cSrcweir #include "UserAdminDlg.hxx"
37cdf0e10cSrcweir 
38cdf0e10cSrcweir #include <comphelper/componentcontext.hxx>
39cdf0e10cSrcweir #include <connectivity/dbmetadata.hxx>
40cdf0e10cSrcweir #include <cppuhelper/exc_hlp.hxx>
41cdf0e10cSrcweir #include <svl/eitem.hxx>
42cdf0e10cSrcweir #include <svl/intitem.hxx>
43cdf0e10cSrcweir #include <svl/stritem.hxx>
44cdf0e10cSrcweir #include <tools/diagnose_ex.h>
45cdf0e10cSrcweir #include <vcl/msgbox.hxx>
46cdf0e10cSrcweir #include <vcl/stdtext.hxx>
47cdf0e10cSrcweir 
48cdf0e10cSrcweir //.........................................................................
49cdf0e10cSrcweir namespace dbaui
50cdf0e10cSrcweir {
51cdf0e10cSrcweir //.........................................................................
52cdf0e10cSrcweir 	using namespace ::com::sun::star::uno;
53cdf0e10cSrcweir 	using namespace ::com::sun::star::beans;
54cdf0e10cSrcweir 	using namespace ::com::sun::star::lang;
55cdf0e10cSrcweir 	using namespace ::com::sun::star::sdbc;
56cdf0e10cSrcweir 	using namespace ::com::sun::star::sdbcx;
57cdf0e10cSrcweir 
58cdf0e10cSrcweir 	//========================================================================
59cdf0e10cSrcweir 	//= OUserAdminDlg
DBG_NAME(OUserAdminDlg)60cdf0e10cSrcweir DBG_NAME(OUserAdminDlg)
61cdf0e10cSrcweir //========================================================================
62cdf0e10cSrcweir 	OUserAdminDlg::OUserAdminDlg(Window* _pParent
63cdf0e10cSrcweir 											, SfxItemSet* _pItems
64cdf0e10cSrcweir 											,const Reference< XMultiServiceFactory >& _rxORB
65cdf0e10cSrcweir 											,const ::com::sun::star::uno::Any& _aDataSourceName
66cdf0e10cSrcweir 											,const Reference< XConnection >& _xConnection)
67cdf0e10cSrcweir 		:SfxTabDialog(_pParent, ModuleRes(DLG_DATABASE_USERADMIN), _pItems)
68cdf0e10cSrcweir 		,m_pItemSet(_pItems)
69cdf0e10cSrcweir 		,m_xConnection(_xConnection)
70cdf0e10cSrcweir 		,m_bOwnConnection(!_xConnection.is())
71cdf0e10cSrcweir 	{
72cdf0e10cSrcweir         DBG_CTOR(OUserAdminDlg,NULL);
73cdf0e10cSrcweir 
74cdf0e10cSrcweir 		m_pImpl = ::std::auto_ptr<ODbDataSourceAdministrationHelper>(new ODbDataSourceAdministrationHelper(_rxORB,_pParent,this));
75cdf0e10cSrcweir 		m_pImpl->setDataSourceOrName(_aDataSourceName);
76cdf0e10cSrcweir 		Reference< XPropertySet > xDatasource = m_pImpl->getCurrentDataSource();
77cdf0e10cSrcweir 		m_pImpl->translateProperties(xDatasource, *_pItems);
78cdf0e10cSrcweir 		SetInputSet(_pItems);
79cdf0e10cSrcweir 		// propagate this set as our new input set and reset the example set
80cdf0e10cSrcweir 		delete pExampleSet;
81cdf0e10cSrcweir 		pExampleSet = new SfxItemSet(*GetInputSetImpl());
82cdf0e10cSrcweir 
83cdf0e10cSrcweir 		AddTabPage(TAB_PAGE_USERADMIN, String(ModuleRes(STR_PAGETITLE_USERADMIN)), OUserAdmin::Create,0, sal_False, 1);
84cdf0e10cSrcweir 
85cdf0e10cSrcweir 		// remove the reset button - it's meaning is much too ambiguous in this dialog
86cdf0e10cSrcweir 		RemoveResetButton();
87cdf0e10cSrcweir 		FreeResource();
88cdf0e10cSrcweir 	}
89cdf0e10cSrcweir 
90cdf0e10cSrcweir 	// -----------------------------------------------------------------------
~OUserAdminDlg()91cdf0e10cSrcweir 	OUserAdminDlg::~OUserAdminDlg()
92cdf0e10cSrcweir 	{
93cdf0e10cSrcweir 		if ( m_bOwnConnection )
94cdf0e10cSrcweir 			try
95cdf0e10cSrcweir 			{
96cdf0e10cSrcweir 				::comphelper::disposeComponent(m_xConnection);
97cdf0e10cSrcweir 			}
98cdf0e10cSrcweir 			catch(Exception){}
99cdf0e10cSrcweir 
100cdf0e10cSrcweir 		SetInputSet(NULL);
101cdf0e10cSrcweir 		DELETEZ(pExampleSet);
102cdf0e10cSrcweir 
103cdf0e10cSrcweir         DBG_DTOR(OUserAdminDlg,NULL);
104cdf0e10cSrcweir     }
105cdf0e10cSrcweir 	// -----------------------------------------------------------------------
Execute()106cdf0e10cSrcweir 	short OUserAdminDlg::Execute()
107cdf0e10cSrcweir 	{
108cdf0e10cSrcweir 		try
109cdf0e10cSrcweir 		{
110cdf0e10cSrcweir             ::dbtools::DatabaseMetaData aMetaData( createConnection().first );
111cdf0e10cSrcweir             if ( !aMetaData.supportsUserAdministration( ::comphelper::ComponentContext( getORB() ) ) )
112cdf0e10cSrcweir 			{
113cdf0e10cSrcweir 				String sError(ModuleRes(STR_USERADMIN_NOT_AVAILABLE));
114cdf0e10cSrcweir 				throw SQLException(sError,NULL,::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("S1000")) ,0,Any());
115cdf0e10cSrcweir 			}
116cdf0e10cSrcweir 		}
117cdf0e10cSrcweir 		catch(const SQLException& e)
118cdf0e10cSrcweir 		{
119cdf0e10cSrcweir             ::dbaui::showError( ::dbtools::SQLExceptionInfo( ::cppu::getCaughtException() ), GetParent(), getORB() );
120cdf0e10cSrcweir 			return RET_CANCEL;
121cdf0e10cSrcweir 		}
122cdf0e10cSrcweir         catch( const Exception& )
123cdf0e10cSrcweir         {
124cdf0e10cSrcweir             DBG_UNHANDLED_EXCEPTION();
125cdf0e10cSrcweir         }
126cdf0e10cSrcweir 		short nRet = SfxTabDialog::Execute();
127cdf0e10cSrcweir 		if ( nRet == RET_OK )
128cdf0e10cSrcweir 			m_pImpl->saveChanges(*GetOutputItemSet());
129cdf0e10cSrcweir 		return nRet;
130cdf0e10cSrcweir 	}
131cdf0e10cSrcweir 	//-------------------------------------------------------------------------
PageCreated(sal_uInt16 _nId,SfxTabPage & _rPage)132cdf0e10cSrcweir 	void OUserAdminDlg::PageCreated(sal_uInt16 _nId, SfxTabPage& _rPage)
133cdf0e10cSrcweir 	{
134cdf0e10cSrcweir 		// register ourself as modified listener
135cdf0e10cSrcweir 		static_cast<OGenericAdministrationPage&>(_rPage).SetServiceFactory(m_pImpl->getORB());
136cdf0e10cSrcweir 		static_cast<OGenericAdministrationPage&>(_rPage).SetAdminDialog(this,this);
137cdf0e10cSrcweir 
138cdf0e10cSrcweir 		AdjustLayout();
139cdf0e10cSrcweir 		Window *pWin = GetViewWindow();
140cdf0e10cSrcweir 		if(pWin)
141cdf0e10cSrcweir 			pWin->Invalidate();
142cdf0e10cSrcweir 
143cdf0e10cSrcweir 		SfxTabDialog::PageCreated(_nId, _rPage);
144cdf0e10cSrcweir 	}
145cdf0e10cSrcweir 	// -----------------------------------------------------------------------------
getOutputSet() const146cdf0e10cSrcweir 	const SfxItemSet* OUserAdminDlg::getOutputSet() const
147cdf0e10cSrcweir 	{
148cdf0e10cSrcweir 		return m_pItemSet;
149cdf0e10cSrcweir 	}
150cdf0e10cSrcweir 	// -----------------------------------------------------------------------------
getWriteOutputSet()151cdf0e10cSrcweir 	SfxItemSet* OUserAdminDlg::getWriteOutputSet()
152cdf0e10cSrcweir 	{
153cdf0e10cSrcweir 		return m_pItemSet;
154cdf0e10cSrcweir 	}
155cdf0e10cSrcweir 	// -----------------------------------------------------------------------------
createConnection()156cdf0e10cSrcweir 	::std::pair< Reference<XConnection>,sal_Bool> OUserAdminDlg::createConnection()
157cdf0e10cSrcweir 	{
158cdf0e10cSrcweir 		if ( !m_xConnection.is() )
159cdf0e10cSrcweir 		{
160cdf0e10cSrcweir 			m_xConnection = m_pImpl->createConnection().first;
161cdf0e10cSrcweir 			m_bOwnConnection = m_xConnection.is();
162cdf0e10cSrcweir 		}
163cdf0e10cSrcweir 		return ::std::pair< Reference<XConnection>,sal_Bool> (m_xConnection,sal_False);
164cdf0e10cSrcweir 	}
165cdf0e10cSrcweir 	// -----------------------------------------------------------------------------
getORB() const166cdf0e10cSrcweir 	Reference< XMultiServiceFactory > OUserAdminDlg::getORB() const
167cdf0e10cSrcweir 	{
168cdf0e10cSrcweir 		return m_pImpl->getORB();
169cdf0e10cSrcweir 	}
170cdf0e10cSrcweir 	// -----------------------------------------------------------------------------
getDriver()171cdf0e10cSrcweir 	Reference< XDriver > OUserAdminDlg::getDriver()
172cdf0e10cSrcweir 	{
173cdf0e10cSrcweir 		return m_pImpl->getDriver();
174cdf0e10cSrcweir 	}
175cdf0e10cSrcweir 	// -----------------------------------------------------------------------------
getDatasourceType(const SfxItemSet & _rSet) const176cdf0e10cSrcweir 	::rtl::OUString	OUserAdminDlg::getDatasourceType(const SfxItemSet& _rSet) const
177cdf0e10cSrcweir 	{
178cdf0e10cSrcweir 		return m_pImpl->getDatasourceType(_rSet);
179cdf0e10cSrcweir 	}
180cdf0e10cSrcweir 	// -----------------------------------------------------------------------------
clearPassword()181cdf0e10cSrcweir 	void OUserAdminDlg::clearPassword()
182cdf0e10cSrcweir 	{
183cdf0e10cSrcweir 		m_pImpl->clearPassword();
184cdf0e10cSrcweir 	}
185cdf0e10cSrcweir 	// -----------------------------------------------------------------------------
setTitle(const::rtl::OUString & _sTitle)186cdf0e10cSrcweir 	void OUserAdminDlg::setTitle(const ::rtl::OUString& _sTitle)
187cdf0e10cSrcweir 	{
188cdf0e10cSrcweir 		SetText(_sTitle);
189cdf0e10cSrcweir 	}
190cdf0e10cSrcweir     //-------------------------------------------------------------------------
enableConfirmSettings(bool _bEnable)191cdf0e10cSrcweir     void OUserAdminDlg::enableConfirmSettings( bool _bEnable )
192cdf0e10cSrcweir     {
193cdf0e10cSrcweir         (void)_bEnable;
194cdf0e10cSrcweir     }
195cdf0e10cSrcweir 	//-------------------------------------------------------------------------
saveDatasource()196cdf0e10cSrcweir 	sal_Bool OUserAdminDlg::saveDatasource()
197cdf0e10cSrcweir 	{
198cdf0e10cSrcweir 		return PrepareLeaveCurrentPage();
199cdf0e10cSrcweir 	}
200cdf0e10cSrcweir //.........................................................................
201cdf0e10cSrcweir }	// namespace dbaui
202cdf0e10cSrcweir //.........................................................................
203