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 #ifndef _DBAUI_DSSELECT_HXX_
28cdf0e10cSrcweir #include "dsselect.hxx"
29cdf0e10cSrcweir #endif
30cdf0e10cSrcweir #ifndef _DBAUI_DSSELECT_HRC_
31cdf0e10cSrcweir #include "dsselect.hrc"
32cdf0e10cSrcweir #endif
33cdf0e10cSrcweir #ifndef _DBU_DLG_HRC_
34cdf0e10cSrcweir #include "dbu_dlg.hrc"
35cdf0e10cSrcweir #endif
36cdf0e10cSrcweir #ifndef _SV_MSGBOX_HXX
37cdf0e10cSrcweir #include <vcl/msgbox.hxx>
38cdf0e10cSrcweir #endif
39cdf0e10cSrcweir #ifndef _DBAUI_LOCALRESACCESS_HXX_
40cdf0e10cSrcweir #include "localresaccess.hxx"
41cdf0e10cSrcweir #endif
42cdf0e10cSrcweir #ifndef _TOOLS_RCID_H
43cdf0e10cSrcweir #include <tools/rcid.h>
44cdf0e10cSrcweir #endif
45cdf0e10cSrcweir
46cdf0e10cSrcweir #ifndef _COM_SUN_STAR_SDBCX_XCREATECATALOG_HPP_
47cdf0e10cSrcweir #include <com/sun/star/sdbcx/XCreateCatalog.hpp>
48cdf0e10cSrcweir #endif
49cdf0e10cSrcweir #ifndef _COM_SUN_STAR_BEANS_XPROPERTYSET_HPP_
50cdf0e10cSrcweir #include <com/sun/star/beans/XPropertySet.hpp>
51cdf0e10cSrcweir #endif
52cdf0e10cSrcweir #ifndef _COM_SUN_STAR_BEANS_XPROPERTYSETINFO_HPP_
53cdf0e10cSrcweir #include <com/sun/star/beans/XPropertySetInfo.hpp>
54cdf0e10cSrcweir #endif
55cdf0e10cSrcweir #ifndef _COM_SUN_STAR_UI_DIALOGS_XEXECUTABLEDIALOG_HPP_
56cdf0e10cSrcweir #include <com/sun/star/ui/dialogs/XExecutableDialog.hpp>
57cdf0e10cSrcweir #endif
58cdf0e10cSrcweir #ifndef _COM_SUN_STAR_AWT_XWINDOW_HPP_
59cdf0e10cSrcweir #include <com/sun/star/awt/XWindow.hpp>
60cdf0e10cSrcweir #endif
61cdf0e10cSrcweir #ifndef DBACCESS_SHARED_DBUSTRINGS_HRC
62cdf0e10cSrcweir #include "dbustrings.hrc"
63cdf0e10cSrcweir #endif
64cdf0e10cSrcweir #ifndef _TOOLKIT_HELPER_VCLUNOHELPER_HXX_
65cdf0e10cSrcweir #include <toolkit/helper/vclunohelper.hxx>
66cdf0e10cSrcweir #endif
67cdf0e10cSrcweir #ifndef _COMPHELPER_EXTRACT_HXX_
68cdf0e10cSrcweir #include <comphelper/extract.hxx>
69cdf0e10cSrcweir #endif
70cdf0e10cSrcweir #ifndef _COMPHELPER_TYPES_HXX_
71cdf0e10cSrcweir #include <comphelper/types.hxx>
72cdf0e10cSrcweir #endif
73cdf0e10cSrcweir #ifndef _COMPHELPER_PROCESSFACTORY_HXX_
74cdf0e10cSrcweir #include <comphelper/processfactory.hxx>
75cdf0e10cSrcweir #endif
76cdf0e10cSrcweir #ifndef _DBAUI_DATASOURCEITEMS_HXX_
77cdf0e10cSrcweir #include "dsitems.hxx"
78cdf0e10cSrcweir #endif
79cdf0e10cSrcweir #ifndef _SFXSTRITEM_HXX
80cdf0e10cSrcweir #include <svl/stritem.hxx>
81cdf0e10cSrcweir #endif
82cdf0e10cSrcweir #ifndef _SFXINTITEM_HXX
83cdf0e10cSrcweir #include <svl/intitem.hxx>
84cdf0e10cSrcweir #endif
85cdf0e10cSrcweir #ifndef _SFXENUMITEM_HXX
86cdf0e10cSrcweir #include <svl/eitem.hxx>
87cdf0e10cSrcweir #endif
88cdf0e10cSrcweir #ifndef _SFXITEMSET_HXX
89cdf0e10cSrcweir #include <svl/itemset.hxx>
90cdf0e10cSrcweir #endif
91cdf0e10cSrcweir
92cdf0e10cSrcweir //.........................................................................
93cdf0e10cSrcweir namespace dbaui
94cdf0e10cSrcweir {
95cdf0e10cSrcweir //.........................................................................
96cdf0e10cSrcweir using namespace ::com::sun::star::uno;
97cdf0e10cSrcweir using namespace ::com::sun::star::beans;
98cdf0e10cSrcweir using namespace ::com::sun::star::sdbc;
99cdf0e10cSrcweir using namespace ::com::sun::star::sdbcx;
100cdf0e10cSrcweir using namespace ::com::sun::star::ui::dialogs;
101cdf0e10cSrcweir using namespace ::comphelper;
102cdf0e10cSrcweir //==================================================================
ODatasourceSelectDialog(Window * _pParent,const StringBag & _rDatasources,bool _bAdabas,SfxItemSet * _pOutputSet)103cdf0e10cSrcweir ODatasourceSelectDialog::ODatasourceSelectDialog(Window* _pParent, const StringBag& _rDatasources, bool _bAdabas,SfxItemSet* _pOutputSet)
104cdf0e10cSrcweir :ModalDialog(_pParent, ModuleRes(DLG_DATASOURCE_SELECTION))
105cdf0e10cSrcweir ,m_aDescription (this, ModuleRes(FT_DESCRIPTION))
106cdf0e10cSrcweir ,m_aDatasource (this, ModuleRes(LB_DATASOURCE))
107cdf0e10cSrcweir ,m_aOk (this, ModuleRes(PB_OK))
108cdf0e10cSrcweir ,m_aCancel (this, ModuleRes(PB_CANCEL))
109cdf0e10cSrcweir ,m_aHelp (this, ModuleRes(PB_HELP))
110cdf0e10cSrcweir #ifdef HAVE_ODBC_ADMINISTRATION
111cdf0e10cSrcweir ,m_aManageDatasources (this, ModuleRes(PB_MANAGE))
112cdf0e10cSrcweir #endif
113cdf0e10cSrcweir ,m_aCreateAdabasDB (this, ModuleRes(PB_CREATE))
114cdf0e10cSrcweir ,m_pOutputSet(_pOutputSet)
115cdf0e10cSrcweir {
116cdf0e10cSrcweir if ( _bAdabas )
117cdf0e10cSrcweir { // set a new title (indicating that we're browsing local data sources only)
118cdf0e10cSrcweir SetText(ModuleRes(STR_LOCAL_DATASOURCES));
119cdf0e10cSrcweir m_aDescription.SetText(ModuleRes(STR_DESCRIPTION2));
120cdf0e10cSrcweir
121cdf0e10cSrcweir m_aCreateAdabasDB.Show();
122cdf0e10cSrcweir m_aCreateAdabasDB.SetClickHdl(LINK(this,ODatasourceSelectDialog,CreateDBClickHdl));
123cdf0e10cSrcweir
124cdf0e10cSrcweir // resize the dialog a little bit, 'cause Adabas data source names are usually somewhat shorter
125cdf0e10cSrcweir // than ODBC ones are
126cdf0e10cSrcweir
127cdf0e10cSrcweir // shrink the listbox
128cdf0e10cSrcweir Size aOldSize = m_aDatasource.GetSizePixel();
129cdf0e10cSrcweir Size aNewSize(3 * aOldSize.Width() / 4, aOldSize.Height());
130cdf0e10cSrcweir m_aDatasource.SetSizePixel(aNewSize);
131cdf0e10cSrcweir
132cdf0e10cSrcweir sal_Int32 nLostPixels = aOldSize.Width() - aNewSize.Width();
133cdf0e10cSrcweir
134cdf0e10cSrcweir // shrink the fixed text
135cdf0e10cSrcweir aOldSize = m_aDescription.GetSizePixel();
136cdf0e10cSrcweir m_aDescription.SetSizePixel(Size(aOldSize.Width() - nLostPixels, aOldSize.Height()));
137cdf0e10cSrcweir
138cdf0e10cSrcweir // move the buttons
139cdf0e10cSrcweir PushButton* pButtons[] = { &m_aOk, &m_aCancel, &m_aHelp ,&m_aCreateAdabasDB};
140cdf0e10cSrcweir for (size_t i=0; i<sizeof(pButtons)/sizeof(pButtons[0]); ++i)
141cdf0e10cSrcweir {
142cdf0e10cSrcweir Point aOldPos = pButtons[i]->GetPosPixel();
143cdf0e10cSrcweir pButtons[i]->SetPosPixel(Point(aOldPos.X() - nLostPixels, aOldPos.Y()));
144cdf0e10cSrcweir }
145cdf0e10cSrcweir
146cdf0e10cSrcweir // resize the dialog itself
147cdf0e10cSrcweir aOldSize = GetSizePixel();
148cdf0e10cSrcweir SetSizePixel(Size(aOldSize.Width() - nLostPixels, aOldSize.Height()));
149cdf0e10cSrcweir }
150cdf0e10cSrcweir
151cdf0e10cSrcweir fillListBox(_rDatasources);
152cdf0e10cSrcweir #ifdef HAVE_ODBC_ADMINISTRATION
153cdf0e10cSrcweir // allow ODBC datasource managenment
154cdf0e10cSrcweir if ( !_bAdabas )
155cdf0e10cSrcweir {
156cdf0e10cSrcweir m_aManageDatasources.Show();
157cdf0e10cSrcweir m_aManageDatasources.Enable();
158cdf0e10cSrcweir m_aManageDatasources.SetClickHdl(LINK(this,ODatasourceSelectDialog,ManageClickHdl));
159cdf0e10cSrcweir }
160cdf0e10cSrcweir #endif
161cdf0e10cSrcweir m_aDatasource.SetDoubleClickHdl(LINK(this,ODatasourceSelectDialog,ListDblClickHdl));
162cdf0e10cSrcweir FreeResource();
163cdf0e10cSrcweir }
164cdf0e10cSrcweir
165cdf0e10cSrcweir // -----------------------------------------------------------------------
~ODatasourceSelectDialog()166cdf0e10cSrcweir ODatasourceSelectDialog::~ODatasourceSelectDialog()
167cdf0e10cSrcweir {
168cdf0e10cSrcweir }
169cdf0e10cSrcweir
170cdf0e10cSrcweir // -----------------------------------------------------------------------
IMPL_LINK(ODatasourceSelectDialog,ListDblClickHdl,ListBox *,pListBox)171cdf0e10cSrcweir IMPL_LINK( ODatasourceSelectDialog, ListDblClickHdl, ListBox *, pListBox )
172cdf0e10cSrcweir {
173cdf0e10cSrcweir if (pListBox->GetSelectEntryCount())
174cdf0e10cSrcweir EndDialog(RET_OK);
175cdf0e10cSrcweir return 0;
176cdf0e10cSrcweir }
177cdf0e10cSrcweir // -----------------------------------------------------------------------
178cdf0e10cSrcweir IMPL_LINK( ODatasourceSelectDialog, CreateDBClickHdl, PushButton*, /*pButton*/ )
179cdf0e10cSrcweir {
180cdf0e10cSrcweir try
181cdf0e10cSrcweir {
182cdf0e10cSrcweir OSL_ENSURE(m_pOutputSet,"No itemset given!");
183cdf0e10cSrcweir Reference< ::com::sun::star::lang::XMultiServiceFactory > xORB = ::comphelper::getProcessServiceFactory();
184cdf0e10cSrcweir Reference<XCreateCatalog> xCatalog(xORB->createInstance(SERVICE_EXTENDED_ADABAS_DRIVER),UNO_QUERY);
185cdf0e10cSrcweir if ( xCatalog.is() && m_pOutputSet )
186cdf0e10cSrcweir {
187cdf0e10cSrcweir Sequence< Any > aArgs(2);
188cdf0e10cSrcweir aArgs[0] <<= PropertyValue(::rtl::OUString::createFromAscii("CreateCatalog"), 0,makeAny(xCatalog) , PropertyState_DIRECT_VALUE);
189cdf0e10cSrcweir aArgs[1] <<= PropertyValue(PROPERTY_PARENTWINDOW, 0, makeAny(VCLUnoHelper::GetInterface(this)), PropertyState_DIRECT_VALUE);
190cdf0e10cSrcweir
191cdf0e10cSrcweir Reference< XExecutableDialog > xDialog(
192cdf0e10cSrcweir xORB->createInstanceWithArguments(SERVICE_SDB_ADABASCREATIONDIALOG, aArgs), UNO_QUERY);
193cdf0e10cSrcweir if (!xDialog.is())
194cdf0e10cSrcweir {
195cdf0e10cSrcweir // ShowServiceNotAvailableError(this, String(SERVICE_SDB_ADABASCREATIONDIALOG), sal_True);
196cdf0e10cSrcweir return 0L;
197cdf0e10cSrcweir }
198cdf0e10cSrcweir
199cdf0e10cSrcweir if ( xDialog->execute() == RET_OK )
200cdf0e10cSrcweir {
201cdf0e10cSrcweir Reference<XPropertySet> xProp(xDialog,UNO_QUERY);
202cdf0e10cSrcweir if(xProp.is())
203cdf0e10cSrcweir {
204cdf0e10cSrcweir Reference<XPropertySetInfo> xPropInfo(xProp->getPropertySetInfo());
205cdf0e10cSrcweir if(xPropInfo->hasPropertyByName(PROPERTY_DATABASENAME))
206cdf0e10cSrcweir {
207cdf0e10cSrcweir String sDatabaseName;
208cdf0e10cSrcweir sDatabaseName = String(::comphelper::getString(xProp->getPropertyValue(PROPERTY_DATABASENAME)));
209cdf0e10cSrcweir m_aDatasource.SelectEntryPos(m_aDatasource.InsertEntry( sDatabaseName ));
210cdf0e10cSrcweir
211cdf0e10cSrcweir }
212cdf0e10cSrcweir if ( xPropInfo->hasPropertyByName(PROPERTY_CONTROLUSER) )
213cdf0e10cSrcweir m_pOutputSet->Put(SfxStringItem(DSID_CONN_CTRLUSER, ::comphelper::getString(xProp->getPropertyValue(PROPERTY_CONTROLUSER))));
214cdf0e10cSrcweir if ( xPropInfo->hasPropertyByName(PROPERTY_CONTROLPASSWORD) )
215cdf0e10cSrcweir m_pOutputSet->Put(SfxStringItem(DSID_CONN_CTRLPWD, ::comphelper::getString(xProp->getPropertyValue(PROPERTY_CONTROLPASSWORD))));
216cdf0e10cSrcweir if ( xPropInfo->hasPropertyByName(PROPERTY_USER) )
217cdf0e10cSrcweir m_pOutputSet->Put(SfxStringItem(DSID_USER, ::comphelper::getString(xProp->getPropertyValue(PROPERTY_USER))));
218cdf0e10cSrcweir if ( xPropInfo->hasPropertyByName(PROPERTY_PASSWORD) )
219cdf0e10cSrcweir {
220cdf0e10cSrcweir m_pOutputSet->Put(SfxStringItem(DSID_PASSWORD, ::comphelper::getString(xProp->getPropertyValue(PROPERTY_PASSWORD))));
221cdf0e10cSrcweir m_pOutputSet->Put(SfxBoolItem(DSID_PASSWORDREQUIRED, sal_True));
222cdf0e10cSrcweir }
223cdf0e10cSrcweir if ( xPropInfo->hasPropertyByName(PROPERTY_CACHESIZE) )
224cdf0e10cSrcweir m_pOutputSet->Put(SfxInt32Item(DSID_CONN_CACHESIZE, ::comphelper::getINT32(xProp->getPropertyValue(PROPERTY_CACHESIZE))));
225cdf0e10cSrcweir }
226cdf0e10cSrcweir }
227cdf0e10cSrcweir }
228cdf0e10cSrcweir }
229cdf0e10cSrcweir catch(Exception&)
230cdf0e10cSrcweir {
231cdf0e10cSrcweir }
232cdf0e10cSrcweir return 0L;
233cdf0e10cSrcweir }
234cdf0e10cSrcweir
235cdf0e10cSrcweir // -----------------------------------------------------------------------
Close()236cdf0e10cSrcweir sal_Bool ODatasourceSelectDialog::Close()
237cdf0e10cSrcweir {
238cdf0e10cSrcweir #ifdef HAVE_ODBC_ADMINISTRATION
239cdf0e10cSrcweir if ( m_pODBCManagement.get() && m_pODBCManagement->isRunning() )
240cdf0e10cSrcweir return sal_False;
241cdf0e10cSrcweir #endif
242cdf0e10cSrcweir
243cdf0e10cSrcweir return ModalDialog::Close();
244cdf0e10cSrcweir }
245cdf0e10cSrcweir
246cdf0e10cSrcweir // -----------------------------------------------------------------------
247cdf0e10cSrcweir #ifdef HAVE_ODBC_ADMINISTRATION
IMPL_LINK(ODatasourceSelectDialog,ManageClickHdl,PushButton *,EMPTYARG)248cdf0e10cSrcweir IMPL_LINK( ODatasourceSelectDialog, ManageClickHdl, PushButton*, EMPTYARG )
249cdf0e10cSrcweir {
250cdf0e10cSrcweir if ( !m_pODBCManagement.get() )
251cdf0e10cSrcweir m_pODBCManagement.reset( new OOdbcManagement( LINK( this, ODatasourceSelectDialog, ManageProcessFinished ) ) );
252cdf0e10cSrcweir
253cdf0e10cSrcweir if ( !m_pODBCManagement->manageDataSources_async() )
254cdf0e10cSrcweir {
255cdf0e10cSrcweir // TODO: error message
256cdf0e10cSrcweir m_aDatasource.GrabFocus();
257cdf0e10cSrcweir m_aManageDatasources.Disable();
258cdf0e10cSrcweir return 1L;
259cdf0e10cSrcweir }
260cdf0e10cSrcweir
261cdf0e10cSrcweir m_aDatasource.Disable();
262cdf0e10cSrcweir m_aOk.Disable();
263cdf0e10cSrcweir m_aCancel.Disable();
264cdf0e10cSrcweir m_aManageDatasources.Disable();
265cdf0e10cSrcweir
266cdf0e10cSrcweir OSL_POSTCOND( m_pODBCManagement->isRunning(), "ODatasourceSelectDialog::ManageClickHdl: success, but not running - you were *fast*!" );
267cdf0e10cSrcweir return 0L;
268cdf0e10cSrcweir }
269cdf0e10cSrcweir
270cdf0e10cSrcweir IMPL_LINK( ODatasourceSelectDialog, ManageProcessFinished, void*, /**/ )
271cdf0e10cSrcweir {
272cdf0e10cSrcweir StringBag aOdbcDatasources;
273cdf0e10cSrcweir OOdbcEnumeration aEnumeration;
274cdf0e10cSrcweir aEnumeration.getDatasourceNames( aOdbcDatasources );
275cdf0e10cSrcweir fillListBox( aOdbcDatasources );
276cdf0e10cSrcweir
277cdf0e10cSrcweir m_aDatasource.Enable();
278cdf0e10cSrcweir m_aOk.Enable();
279cdf0e10cSrcweir m_aCancel.Enable();
280cdf0e10cSrcweir m_aManageDatasources.Enable();
281cdf0e10cSrcweir
282cdf0e10cSrcweir return 0L;
283cdf0e10cSrcweir }
284cdf0e10cSrcweir
285cdf0e10cSrcweir #endif
286cdf0e10cSrcweir // -----------------------------------------------------------------------------
fillListBox(const StringBag & _rDatasources)287cdf0e10cSrcweir void ODatasourceSelectDialog::fillListBox(const StringBag& _rDatasources)
288cdf0e10cSrcweir {
289cdf0e10cSrcweir ::rtl::OUString sSelected;
290cdf0e10cSrcweir if (m_aDatasource.GetEntryCount())
291cdf0e10cSrcweir sSelected = m_aDatasource.GetSelectEntry();
292cdf0e10cSrcweir m_aDatasource.Clear();
293cdf0e10cSrcweir // fill the list
294cdf0e10cSrcweir for ( ConstStringBagIterator aDS = _rDatasources.begin();
295cdf0e10cSrcweir aDS != _rDatasources.end();
296cdf0e10cSrcweir ++aDS
297cdf0e10cSrcweir )
298cdf0e10cSrcweir {
299cdf0e10cSrcweir m_aDatasource.InsertEntry( *aDS );
300cdf0e10cSrcweir }
301cdf0e10cSrcweir
302cdf0e10cSrcweir if (m_aDatasource.GetEntryCount())
303cdf0e10cSrcweir {
304cdf0e10cSrcweir if (sSelected.getLength())
305cdf0e10cSrcweir m_aDatasource.SelectEntry(sSelected);
306cdf0e10cSrcweir else // select the first entry
307cdf0e10cSrcweir m_aDatasource.SelectEntryPos(0);
308cdf0e10cSrcweir }
309cdf0e10cSrcweir }
310cdf0e10cSrcweir
311cdf0e10cSrcweir //.........................................................................
312cdf0e10cSrcweir } // namespace dbaui
313cdf0e10cSrcweir //.........................................................................
314cdf0e10cSrcweir
315