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 #ifndef adabasui_ADABAS_CREATEDB_HXX 29 #include "AdabasNewDb.hxx" 30 #endif 31 #ifndef adabasui_ADABASNEWDB_HRC 32 #include "AdabasNewDb.hrc" 33 #endif 34 35 #ifndef _VOS_PROCESS_HXX_ 36 #include <vos/process.hxx> 37 #endif 38 #ifndef _OSL_PROCESS_H_ 39 #include <osl/process.h> 40 #endif 41 #ifndef _MSGBOX_HXX //autogen 42 #include <vcl/msgbox.hxx> 43 #endif 44 #ifndef _PASSWD_HXX //autogen 45 #include <sfx2/passwd.hxx> 46 #endif 47 #ifndef _URLOBJ_HXX 48 #include <tools/urlobj.hxx> 49 #endif 50 #ifndef _STREAM_HXX 51 #include <tools/stream.hxx> 52 #endif 53 #ifndef _BIGINT_HXX 54 #include <tools/bigint.hxx> 55 #endif 56 #ifndef _TOOLS_DEBUG_HXX 57 #include <tools/debug.hxx> 58 #endif 59 #ifndef _EXTENSIONS_COMPONENT_MODULE_HXX_ 60 #include "Acomponentmodule.hxx" 61 #endif 62 #ifndef _UNOTOOLS_TEMPFILE_HXX 63 #include <unotools/tempfile.hxx> 64 #endif 65 #ifndef _ADABASUI_RESOURCE_HRC_ 66 #include "adabasui_resource.hrc" 67 #endif 68 #ifndef _UCBHELPER_CONTENT_HXX 69 #include <ucbhelper/content.hxx> 70 #endif 71 #ifndef _SV_WAITOBJ_HXX 72 #include <vcl/waitobj.hxx> 73 #endif 74 #ifndef INCLUDED_SVTOOLS_PATHOPTIONS_HXX 75 #include <unotools/pathoptions.hxx> 76 #endif 77 #ifndef _TOOLKIT_HELPER_VCLUNOHELPER_HXX_ 78 #include <toolkit/unohlp.hxx> 79 #endif 80 #ifndef _COM_SUN_STAR_BEANS_PROPERTYVALUE_HPP_ 81 #include <com/sun/star/beans/PropertyValue.hpp> 82 #endif 83 #ifndef _COMPHELPER_EXTRACT_HXX_ 84 #include <comphelper/extract.hxx> 85 #endif 86 #ifndef _UNOTOOLS_TEMPFILE_HXX 87 #include <unotools/tempfile.hxx> 88 #endif 89 #ifndef _UNOTOOLS_LOCALFILEHELPER_HXX 90 #include <unotools/localfilehelper.hxx> 91 #endif 92 #ifndef _COM_SUN_STAR_SDBC_SQLEXCEPTION_HPP_ 93 #include <com/sun/star/sdbc/SQLException.hpp> 94 #endif 95 #ifndef _UNOTOOLS_UCBHELPER_HXX 96 #include <unotools/ucbhelper.hxx> 97 #endif 98 #ifndef _CONNECTIVITY_DBTOOLS_HXX_ 99 #include <connectivity/dbtools.hxx> 100 #endif 101 #ifndef _DBHELPER_DBEXCEPTION_HXX_ 102 #include <connectivity/dbexception.hxx> 103 #endif 104 #include "adabasuistrings.hrc" 105 #ifndef _THREAD_HXX_ 106 #include <osl/thread.hxx> 107 #endif 108 #ifndef _OSL_FILE_HXX_ 109 #include <osl/file.hxx> 110 #endif 111 112 113 using namespace adabasui; 114 using namespace ucbhelper; 115 using namespace utl; 116 using namespace vos; 117 using namespace ::com::sun::star::uno; 118 using namespace ::com::sun::star::beans; 119 using namespace ::com::sun::star::sdbcx; 120 using namespace ::com::sun::star::sdbc; 121 using namespace ::com::sun::star::ucb; 122 using namespace ::com::sun::star::lang; 123 namespace adabasui 124 { 125 class ODatabaseCreator : public ::osl::Thread 126 { 127 Link m_aTerminateHandler; 128 Sequence< PropertyValue> m_aValues; 129 Reference<XCreateCatalog> m_xCreateCatalog; 130 Reference< XMultiServiceFactory > m_xORB; 131 Window* m_pErrorWindow; 132 public: 133 ODatabaseCreator(const Reference<XCreateCatalog>& _rxCreateCatalog 134 ,Window* _pErrorWindow 135 ,const Reference< XMultiServiceFactory >& _xORB 136 ,const Sequence< PropertyValue>& _rValues) 137 : m_aValues(_rValues) 138 , m_xCreateCatalog(_rxCreateCatalog) 139 , m_xORB(_xORB) 140 , m_pErrorWindow(_pErrorWindow) 141 {} 142 143 void setTerminateHandler(const Link& _aTerminateHandler) { m_aTerminateHandler = _aTerminateHandler; } 144 145 protected: 146 147 /// Working method which should be overridden. 148 virtual void SAL_CALL run(); 149 virtual void SAL_CALL onTerminated(); 150 }; 151 152 void SAL_CALL ODatabaseCreator::run() 153 { 154 try 155 { 156 m_xCreateCatalog->createCatalog(m_aValues); 157 } 158 catch(SQLException& e) 159 { 160 ::dbtools::showError(::dbtools::SQLExceptionInfo(e),VCLUnoHelper::GetInterface(m_pErrorWindow),m_xORB); 161 } 162 catch(Exception&) 163 { 164 OSL_ASSERT(0); 165 // showError(::dbtools::SQLExceptionInfo(e),this,); 166 } 167 } 168 void SAL_CALL ODatabaseCreator::onTerminated() 169 { 170 if ( m_aTerminateHandler.IsSet() ) 171 m_aTerminateHandler.Call(NULL); 172 } 173 } 174 DBG_NAME( OAdabasNewDbDlg ) 175 //======================================================================== 176 OAdabasNewDbDlg::OAdabasNewDbDlg( Window* pParent, 177 const Reference<XCreateCatalog>& _rxCreateCatalog, 178 const Reference< XMultiServiceFactory >& _rxORB, 179 sal_Bool _bRestore) 180 :ModalDialog( pParent, ModuleRes( DLG_ADABAS_NEWDB )) 181 ,m_FT_DATABASENAME( this, ModuleRes( FT_DATABASENAME ) ) 182 ,m_ET_DATABASENAME( this, ModuleRes( ET_DATABASENAME ) ) 183 ,m_FL_USER( this, ModuleRes( FL_USER ) ) 184 ,m_FT_SYSUSR( this, ModuleRes( FT_SYSUSR ) ) 185 ,m_FT_CONUSR( this, ModuleRes( FT_CONUSR ) ) 186 ,m_FT_DOMAIN_USR( this, ModuleRes( FT_DOMAIN_USR ) ) 187 ,m_ET_SYSUSR( this, ModuleRes( ET_SYSUSR ) ) 188 ,m_PB_SYSPWD( this, ModuleRes( PB_SYSPWD ) ) 189 ,m_ET_CONUSR( this, ModuleRes( ET_CONUSR ) ) 190 ,m_PB_CONPWD( this, ModuleRes( PB_CONPWD ) ) 191 ,m_ET_DOMAIN_USR( this, ModuleRes( ET_DOMAIN_USR ) ) 192 ,m_PB_DOMAINPWD( this, ModuleRes( PB_DOMAINPWD ) ) 193 ,m_BMP_CON( this, ModuleRes( BMP_CON ) ) 194 ,m_BMP_SYS( this, ModuleRes( BMP_SYS ) ) 195 ,m_BMP_DOMAIN( this, ModuleRes( BMP_DOMAIN ) ) 196 ,m_FT_RESTORE( this, ModuleRes( FT_RESTORE ) ) 197 ,m_ET_RESTORE( this, ModuleRes( ET_RESTORE ) ) 198 ,m_PB_RESTORE( this, ModuleRes( PB_RESTORE ) ) 199 ,m_FL_DBSETTINGS( this, ModuleRes( FL_DBSETTINGS ) ) 200 ,m_FT_SYSDEVSPACE( this, ModuleRes( FT_SYSDEVSPACE ) ) 201 ,m_FT_TRANSACTIONLOG( this, ModuleRes( FT_TRANSACTIONLOG ) ) 202 ,m_FT_DATADEVSPACE( this, ModuleRes( FT_DATADEVSPACE ) ) 203 ,m_ET_SYSDEVSPACE( this, ModuleRes( ET_SYSDEVSPACE ) ) 204 ,m_PB_SYSDEVSPACE( this, ModuleRes( PB_SYSDEVSPACE ) ) 205 ,m_ET_TRANSACTIONLOG( this, ModuleRes( ET_TRANSACTIONLOG ) ) 206 ,m_PB_TRANSACTIONLOG( this, ModuleRes( PB_TRANSACTIONLOG ) ) 207 ,m_ET_DATADEVSPACE( this, ModuleRes( ET_DATADEVSPACE ) ) 208 ,m_PB_DATADEVSPACE( this, ModuleRes( PB_DATADEVSPACE ) ) 209 ,m_FT_TRANSACTIONLOG_SIZE( this, ModuleRes( FT_TRANSACTIONLOG_SIZE ) ) 210 ,m_NF_TRANSACTIONLOG_SIZE( this, ModuleRes( NF_TRANSACTIONLOG_SIZE ) ) 211 ,m_FT_DATADEVSPACE_SIZE( this, ModuleRes( FT_DATADEVSPACE_SIZE ) ) 212 ,m_NF_DATADEVSPACE_SIZE( this, ModuleRes( NF_DATADEVSPACE_SIZE ) ) 213 ,m_FT_CACHE_SIZE( this, ModuleRes( FT_CACHE_SIZE ) ) 214 ,m_NF_CACHE_SIZE( this, ModuleRes( NF_CACHE_SIZE ) ) 215 ,m_FL_END( this, ModuleRes( FL_END ) ) 216 ,m_PB_OK( this, ModuleRes( PB_OK ) ) 217 ,m_PB_CANCEL( this, ModuleRes( PB_CANCEL ) ) 218 ,m_xCreateCatalog(_rxCreateCatalog) 219 ,m_xORB(_rxORB) 220 ,m_bRestore(_bRestore) 221 ,m_nSetBitmap(0) 222 { 223 DBG_CTOR( OAdabasNewDbDlg, NULL ); 224 FreeResource(); 225 if(m_bRestore) 226 { 227 m_FL_DBSETTINGS.SetPosPixel(m_FL_DBSETTINGS.GetPosPixel()-LogicToPixel( Point(0,14), MAP_APPFONT )); 228 m_FT_SYSDEVSPACE.SetPosPixel(m_FT_SYSDEVSPACE.GetPosPixel()-LogicToPixel( Point(0,14), MAP_APPFONT )); 229 m_FT_TRANSACTIONLOG.SetPosPixel(m_FT_TRANSACTIONLOG.GetPosPixel()-LogicToPixel( Point(0,14), MAP_APPFONT )); 230 m_FT_DATADEVSPACE.SetPosPixel(m_FT_DATADEVSPACE.GetPosPixel()-LogicToPixel( Point(0,14), MAP_APPFONT )); 231 m_ET_SYSDEVSPACE.SetPosPixel(m_ET_SYSDEVSPACE.GetPosPixel()-LogicToPixel( Point(0,14), MAP_APPFONT )); 232 m_PB_SYSDEVSPACE.SetPosPixel(m_PB_SYSDEVSPACE.GetPosPixel()-LogicToPixel( Point(0,14), MAP_APPFONT )); 233 m_ET_TRANSACTIONLOG.SetPosPixel(m_ET_TRANSACTIONLOG.GetPosPixel()-LogicToPixel( Point(0,14), MAP_APPFONT )); 234 m_PB_TRANSACTIONLOG.SetPosPixel(m_PB_TRANSACTIONLOG.GetPosPixel()-LogicToPixel( Point(0,14), MAP_APPFONT )); 235 m_ET_DATADEVSPACE.SetPosPixel(m_ET_DATADEVSPACE.GetPosPixel()-LogicToPixel( Point(0,14), MAP_APPFONT )); 236 m_PB_DATADEVSPACE.SetPosPixel(m_PB_DATADEVSPACE.GetPosPixel()-LogicToPixel( Point(0,14), MAP_APPFONT )); 237 m_FT_TRANSACTIONLOG_SIZE.SetPosPixel(m_FT_TRANSACTIONLOG_SIZE.GetPosPixel()-LogicToPixel( Point(0,14), MAP_APPFONT )); 238 m_NF_TRANSACTIONLOG_SIZE.SetPosPixel(m_NF_TRANSACTIONLOG_SIZE.GetPosPixel()-LogicToPixel( Point(0,14), MAP_APPFONT )); 239 m_FT_DATADEVSPACE_SIZE.SetPosPixel(m_FT_DATADEVSPACE_SIZE.GetPosPixel()-LogicToPixel( Point(0,14), MAP_APPFONT )); 240 m_NF_DATADEVSPACE_SIZE.SetPosPixel(m_NF_DATADEVSPACE_SIZE.GetPosPixel()-LogicToPixel( Point(0,14), MAP_APPFONT )); 241 m_FT_CACHE_SIZE.SetPosPixel(m_FT_CACHE_SIZE.GetPosPixel()-LogicToPixel( Point(0,14), MAP_APPFONT )); 242 m_NF_CACHE_SIZE.SetPosPixel(m_NF_CACHE_SIZE.GetPosPixel()-LogicToPixel( Point(0,14), MAP_APPFONT )); 243 m_PB_OK.SetPosPixel(m_PB_OK.GetPosPixel()-LogicToPixel( Point(0,14), MAP_APPFONT )); 244 m_PB_CANCEL.SetPosPixel(m_PB_CANCEL.GetPosPixel()-LogicToPixel( Point(0,14), MAP_APPFONT )); 245 246 Size aSize(GetSizePixel().Width(),GetSizePixel().Height()-LogicToPixel( Size(0,14), MAP_APPFONT ).Height()); 247 SetSizePixel(aSize); 248 249 m_FT_SYSUSR.Hide(); 250 m_FT_DOMAIN_USR.Hide(); 251 m_FL_USER.SetText(ModuleRes(STR_BACKUPFILE_LOAD)); 252 m_PB_SYSPWD.Hide(); 253 m_PB_DOMAINPWD.Hide(); 254 m_ET_SYSUSR.Hide(); 255 m_ET_DOMAIN_USR.Hide(); 256 257 m_ET_SYSUSR.SetText(String::CreateFromAscii("DUMMY")); 258 m_BMP_SYS.Hide(); 259 m_BMP_DOMAIN.Hide(); 260 m_ET_RESTORE.SetModifyHdl( LINK(this,OAdabasNewDbDlg,LoseFocusHdl)); 261 m_ET_RESTORE.SetLoseFocusHdl( LINK(this,OAdabasNewDbDlg,LoseFocusHdl)); 262 m_ET_RESTORE.SetMaxTextLen(40); 263 } 264 else 265 { 266 m_FT_RESTORE.Hide(); 267 m_ET_RESTORE.Hide(); 268 m_PB_RESTORE.Hide(); 269 270 m_ET_SYSUSR.SetModifyHdl( LINK(this,OAdabasNewDbDlg,LoseFocusHdl)); 271 m_ET_CONUSR.SetModifyHdl( LINK(this,OAdabasNewDbDlg,LoseFocusHdl)); 272 m_ET_DOMAIN_USR.Enable(sal_False); 273 274 // m_ET_SYSUSR.setUpperCase(); 275 // m_ET_CONUSR.setUpperCase(); 276 } 277 278 279 m_ET_SYSDEVSPACE.SetLoseFocusHdl( LINK(this,OAdabasNewDbDlg,LoseFocusHdl)); 280 m_ET_TRANSACTIONLOG.SetLoseFocusHdl( LINK(this,OAdabasNewDbDlg,LoseFocusHdl)); 281 m_ET_DATADEVSPACE.SetLoseFocusHdl( LINK(this,OAdabasNewDbDlg,LoseFocusHdl)); 282 283 m_ET_SYSDEVSPACE.SetMaxTextLen(40); 284 m_ET_TRANSACTIONLOG.SetMaxTextLen(40); 285 m_ET_DATADEVSPACE.SetMaxTextLen(40); 286 287 m_NF_TRANSACTIONLOG_SIZE.SetModifyHdl( LINK(this,OAdabasNewDbDlg,LoseFocusHdl)); 288 m_NF_DATADEVSPACE_SIZE.SetModifyHdl( LINK(this,OAdabasNewDbDlg,LoseFocusHdl)); 289 m_NF_CACHE_SIZE.SetModifyHdl( LINK(this,OAdabasNewDbDlg,LoseFocusHdl)); 290 291 m_NF_TRANSACTIONLOG_SIZE.SetMin(10); 292 m_NF_DATADEVSPACE_SIZE.SetMin(10); 293 m_NF_CACHE_SIZE.SetMin(4); 294 295 m_NF_TRANSACTIONLOG_SIZE.SetMax(LONG_MAX); 296 m_NF_DATADEVSPACE_SIZE.SetMax(LONG_MAX); 297 m_NF_CACHE_SIZE.SetMax(LONG_MAX); 298 299 m_NF_TRANSACTIONLOG_SIZE.SetValue(20); 300 m_NF_DATADEVSPACE_SIZE.SetValue(20); 301 m_NF_CACHE_SIZE.SetValue(4); 302 303 m_NF_TRANSACTIONLOG_SIZE.SetDecimalDigits(0); 304 m_NF_DATADEVSPACE_SIZE.SetDecimalDigits(0); 305 m_NF_CACHE_SIZE.SetDecimalDigits(0); 306 307 m_ET_DATABASENAME.SetMaxTextLen( 8 ); //98292 308 309 m_PB_CONPWD.SetClickHdl( LINK(this,OAdabasNewDbDlg,PwdClickHdl)); 310 m_PB_SYSPWD.SetClickHdl( LINK(this,OAdabasNewDbDlg,PwdClickHdl)); 311 m_PB_DOMAINPWD.SetClickHdl( LINK(this,OAdabasNewDbDlg,PwdClickHdl)); 312 313 m_PB_RESTORE.SetClickHdl( LINK(this,OAdabasNewDbDlg,LoadButtonClickHdl)); 314 315 m_PB_SYSDEVSPACE.SetClickHdl( LINK(this,OAdabasNewDbDlg,ButtonClickHdl)); 316 m_PB_TRANSACTIONLOG.SetClickHdl( LINK(this,OAdabasNewDbDlg,ButtonClickHdl)); 317 m_PB_DATADEVSPACE.SetClickHdl( LINK(this,OAdabasNewDbDlg,ButtonClickHdl)); 318 319 m_BMP_CON.SetImage( ModuleRes(UNCHECK_RED) ); 320 m_BMP_SYS.SetImage( ModuleRes(UNCHECK_RED) ); 321 m_BMP_DOMAIN.SetImage( ModuleRes(UNCHECK_RED) ); 322 323 static String s_sRoot(RTL_CONSTASCII_USTRINGPARAM("DBROOT")); 324 static String s_sConfig(RTL_CONSTASCII_USTRINGPARAM("DBCONFIG")); 325 static String s_sWork(RTL_CONSTASCII_USTRINGPARAM("DBWORK")); 326 327 sal_Bool bError = fillEnvironmentVariable(s_sWork,m_sDbWork); 328 if ( bError || !m_sDbWork.Len() ) 329 bError = fillEnvironmentVariable(s_sRoot,m_sDbWork); 330 331 bError = fillEnvironmentVariable(s_sConfig,m_sDbConfig); 332 if ( bError || !m_sDbConfig.Len() ) 333 bError = fillEnvironmentVariable(s_sRoot,m_sDbConfig); 334 335 if ( m_sDbConfig.Len() && m_sDbWork.Len() ) 336 { 337 m_sDbConfig.AppendAscii("/"); 338 m_sDbWork.AppendAscii("/"); 339 340 String sDefaultName,sExt; 341 sDefaultName.AssignAscii("MYDB"); 342 String sConfig = m_sDbConfig; 343 sConfig.AppendAscii("config"); 344 TempFile aDefaultDatabase(sDefaultName,&sExt,&sConfig); 345 aDefaultDatabase.EnableKillingFile(); 346 INetURLObject aURL(aDefaultDatabase.GetURL()); 347 348 m_ET_DATABASENAME.SetText(aURL.GetName()); 349 m_DBName = m_ET_DATABASENAME.GetText(); 350 351 // create temp names for my files 352 // here we need only a name the creation is done by the driver 353 // so we delete the files after we get a valid name 354 // with this we avoiding to mention anything when the user presses cancel 355 356 String aSysExt; 357 sal_Bool bValid = sal_True; 358 { 359 aSysExt.AssignAscii(".sys"); 360 ::utl::TempFile aTmpFile(m_ET_DATABASENAME.GetText(),&aSysExt,&m_sDbWork); 361 aTmpFile.EnableKillingFile(); 362 bValid = aTmpFile.IsValid(); 363 if(bValid) 364 LocalFileHelper::ConvertURLToPhysicalName(aTmpFile.GetURL(),m_SYSDEV_File); 365 } 366 { 367 aSysExt.AssignAscii(".trs"); 368 ::utl::TempFile aTmpFile(m_ET_DATABASENAME.GetText(),&aSysExt,&m_sDbWork); 369 aTmpFile.EnableKillingFile(); 370 bValid = !bValid || aTmpFile.IsValid(); 371 if(aTmpFile.IsValid()) 372 LocalFileHelper::ConvertURLToPhysicalName(aTmpFile.GetURL(),m_TRANSDEV_File); 373 } 374 { 375 aSysExt.AssignAscii(".dat"); 376 ::utl::TempFile aTmpFile(m_ET_DATABASENAME.GetText(),&aSysExt,&m_sDbWork); 377 aTmpFile.EnableKillingFile(); 378 bValid = !bValid || aTmpFile.IsValid(); 379 if(aTmpFile.IsValid()) 380 LocalFileHelper::ConvertURLToPhysicalName(aTmpFile.GetURL(),m_DATADEV_File); 381 } 382 if(!bValid) // we found a file which isn't valid so we report an error message 383 PostUserEvent(LINK(this, OAdabasNewDbDlg, OnNoAccessRights)); 384 385 } 386 387 if(m_SYSDEV_File.Len() < 41 && m_TRANSDEV_File.Len() < 41 && m_DATADEV_File.Len() < 41) 388 { 389 m_ET_SYSDEVSPACE.SetText(m_SYSDEV_File ); 390 m_ET_TRANSACTIONLOG.SetText(m_TRANSDEV_File); 391 m_ET_DATADEVSPACE.SetText(m_DATADEV_File); 392 } 393 else 394 { 395 m_SYSDEV_File = m_TRANSDEV_File = m_DATADEV_File = String(); 396 PostUserEvent(LINK(this, OAdabasNewDbDlg, OnNoDefaultPath)); 397 } 398 399 m_ET_CONUSR.SetText(String::CreateFromAscii("CONTROL")); 400 401 m_PB_OK.SetClickHdl(LINK(this,OAdabasNewDbDlg,ImplOKHdl)); 402 m_PB_OK.Enable(sal_False); 403 404 m_ET_DATABASENAME.SetModifyHdl( LINK(this,OAdabasNewDbDlg,LoseFocusHdl)); 405 406 } 407 // ----------------------------------------------------------------------- 408 OAdabasNewDbDlg::~OAdabasNewDbDlg() 409 { 410 DBG_DTOR( OAdabasNewDbDlg, NULL ); 411 } 412 //------------------------------------------------------------------ 413 IMPL_LINK(OAdabasNewDbDlg, OnError, void*, /*_pArg*/) 414 { 415 String sErrorMsg(ModuleRes(STR_ERROR_IN_ADABAS_INSTALLATION)); 416 ErrorBox(this, WB_OK, sErrorMsg).Execute(); 417 EndDialog(RET_CANCEL); 418 return 0L; 419 } 420 //------------------------------------------------------------------ 421 IMPL_LINK(OAdabasNewDbDlg, OnNoDefaultPath, void*, /*_pArg*/) 422 { 423 String sErrorMsg(ModuleRes(STR_ADABAS_NO_DEFAULTNAME)); 424 ErrorBox(this, WB_OK, sErrorMsg).Execute(); 425 return 0L; 426 } 427 //------------------------------------------------------------------ 428 IMPL_LINK(OAdabasNewDbDlg, OnNoAccessRights, void*, /*_pArg*/) 429 { 430 String sErrorMsg(ModuleRes(STR_ADABAS_NO_ACCESSRIGHTS)); 431 ErrorBox(this, WB_OK, sErrorMsg).Execute(); 432 return 0L; 433 } 434 435 // ----------------------------------------------------------------------- 436 IMPL_LINK( OAdabasNewDbDlg, ImplOKHdl, OKButton*, /*EMPTYARG*/ ) 437 { 438 m_SYSDEV_File = m_ET_SYSDEVSPACE.GetText(); 439 m_TRANSDEV_File = m_ET_TRANSACTIONLOG.GetText(); 440 m_DATADEV_File = m_ET_DATADEVSPACE.GetText(); 441 442 m_Backup_File = m_ET_RESTORE.GetText(); 443 if(m_bRestore) 444 { 445 INetURLObject aURL; 446 aURL.SetSmartProtocol(INET_PROT_FILE); 447 aURL.SetURL(m_Backup_File); 448 Content aContent(aURL.GetURLNoPass(),Reference<XCommandEnvironment>()); 449 try 450 { 451 if(!aContent.isDocument()) 452 { 453 String aString1 = String(ModuleRes(STR_ADABAS_NO_BACKUP_FILE)); 454 String aString2 = String(ModuleRes(STR_STAT_WARNING)); 455 SQLException aSql(aString1,NULL,aString2,1000,Any()); 456 return 0; 457 } 458 459 } 460 catch(Exception&) 461 { 462 String aString1 = String(ModuleRes(STR_ADABAS_NO_BACKUP_FILE)); 463 String aString2 = String(ModuleRes(STR_STAT_WARNING)); 464 SQLException aSql(aString1,NULL,aString2,1000,Any()); 465 throw aSql; 466 } 467 if(m_Backup_File.Len() > 40) 468 { 469 InfoBox aInfo(this,ModuleRes(INFO_STR_MAX_FILE_LENGTH)); 470 String aMsg(aInfo.GetMessText()); 471 aMsg.SearchAndReplace(String::CreateFromAscii("\'#\'"),String::CreateFromAscii("40")); 472 aInfo.SetMessText(aMsg); 473 aInfo.Execute(); 474 return 0; 475 } 476 } 477 else if(m_SYSDEV_File.Len() > 40 || m_TRANSDEV_File.Len() > 40 || m_DATADEV_File.Len() > 40) 478 { 479 InfoBox aInfo(this,ModuleRes(INFO_STR_MAX_FILE_LENGTH)); 480 String aMsg(aInfo.GetMessText()); 481 aMsg.SearchAndReplace(String::CreateFromAscii("\'#\'"),String::CreateFromAscii("40")); 482 aInfo.SetMessText(aMsg); 483 aInfo.Execute(); 484 return 0; 485 } 486 487 488 sal_Bool bOk = sal_False; 489 490 { 491 // we need url 492 String sTemp; 493 bOk = LocalFileHelper::ConvertPhysicalNameToURL(m_DATADEV_File,sTemp); 494 m_DATADEV_File = sTemp; 495 sTemp = String(); 496 bOk = LocalFileHelper::ConvertPhysicalNameToURL(m_SYSDEV_File,sTemp); 497 m_SYSDEV_File = sTemp; 498 sTemp = String(); 499 bOk = LocalFileHelper::ConvertPhysicalNameToURL(m_TRANSDEV_File,sTemp); 500 m_TRANSDEV_File = sTemp; 501 } 502 String aErrorMessage = String(ModuleRes(STR_DEVSPACE_NO_FILE)); 503 if(!m_SYSDEV_File.Len()) 504 aErrorMessage.SearchAndReplace(String::CreateFromAscii("$name$"),String::CreateFromAscii("SYSDEVSPACE")); 505 else if(!m_TRANSDEV_File.Len()) 506 aErrorMessage.SearchAndReplace(String::CreateFromAscii("$name$"),String::CreateFromAscii("TRANSACTIONLOG")); 507 else if(!m_DATADEV_File.Len()) 508 aErrorMessage.SearchAndReplace(String::CreateFromAscii("$name$"),String::CreateFromAscii("DATDEVSPACE")); 509 else if(m_ET_SYSUSR.GetText() == m_ET_CONUSR.GetText()) 510 aErrorMessage = String(ModuleRes(STR_NO_SAME_USER)); 511 else 512 bOk = sal_True; 513 514 515 if (!bOk) 516 { 517 ErrorBox(this, WB_OK, aErrorMessage).Execute(); 518 return sal_False; 519 } 520 521 sal_Int32 nPos = 0; 522 Sequence< PropertyValue> aCreateArgs(m_bRestore ? 14 : 12); 523 aCreateArgs[nPos].Name = PROPERTY_CONTROL_USER; 524 aCreateArgs[nPos++].Value <<= ::rtl::OUString(m_ET_CONUSR.GetText().ToUpperAscii()); 525 aCreateArgs[nPos].Name = PROPERTY_CONTROL_PASSWORD; 526 aCreateArgs[nPos++].Value <<= ::rtl::OUString(m_ConPwd); 527 aCreateArgs[nPos].Name = PROPERTY_USER; 528 aCreateArgs[nPos++].Value <<= ::rtl::OUString(m_ET_SYSUSR.GetText().ToUpperAscii()); 529 aCreateArgs[nPos].Name = PROPERTY_PASSWORD; 530 aCreateArgs[nPos++].Value <<= ::rtl::OUString(m_SysPwd); 531 aCreateArgs[nPos].Name = PROPERTY_DOMAINPASSWORD; 532 aCreateArgs[nPos++].Value <<= ::rtl::OUString(m_DomainPwd); 533 aCreateArgs[nPos].Name = PROPERTY_CACHESIZE; 534 aCreateArgs[nPos++].Value <<= ::rtl::OUString::valueOf(sal_Int32(m_NF_CACHE_SIZE.GetValue()*256)); 535 aCreateArgs[nPos].Name = PROPERTY_DATABASENAME; 536 aCreateArgs[nPos++].Value <<= ::rtl::OUString(m_ET_DATABASENAME.GetText().ToUpperAscii()); 537 aCreateArgs[nPos].Name = PROPERTY_DATADEVSPACE; 538 aCreateArgs[nPos++].Value <<= ::rtl::OUString(m_DATADEV_File); 539 aCreateArgs[nPos].Name = PROPERTY_SYSDEVSPACE; 540 aCreateArgs[nPos++].Value <<= ::rtl::OUString(m_SYSDEV_File); 541 aCreateArgs[nPos].Name = PROPERTY_TRANSACTION_LOG; 542 aCreateArgs[nPos++].Value <<= ::rtl::OUString(m_TRANSDEV_File); 543 aCreateArgs[nPos].Name = PROPERTY_DATADEVSIZE; 544 aCreateArgs[nPos++].Value <<= sal_Int32(m_NF_DATADEVSPACE_SIZE.GetValue()*256); 545 aCreateArgs[nPos].Name = PROPERTY_LOGDEVSIZE; 546 aCreateArgs[nPos++].Value <<= sal_Int32(m_NF_TRANSACTIONLOG_SIZE.GetValue()*256); 547 548 if(m_bRestore) 549 { 550 aCreateArgs[nPos].Name = PROPERTY_RESTOREDATABASE; 551 aCreateArgs[nPos++].Value <<= ::cppu::bool2any(sal_True); 552 aCreateArgs[nPos].Name = PROPERTY_BACKUPNAME; 553 aCreateArgs[nPos++].Value <<= ::rtl::OUString(m_Backup_File); 554 } 555 556 Disable(); 557 558 m_aCreatorWait = ::std::auto_ptr<WaitObject>(new WaitObject(this)); 559 m_aCreatorThread = ::std::auto_ptr<ODatabaseCreator>(new ODatabaseCreator(m_xCreateCatalog,this,m_xORB,aCreateArgs)); 560 m_aCreatorThread->setTerminateHandler(LINK(this,OAdabasNewDbDlg,TerminateHdl)); 561 m_aCreatorThread->create(); 562 563 return sal_True; 564 } 565 //------------------------------------------------------------------------- 566 IMPL_LINK( OAdabasNewDbDlg, TerminateHdl, void*, /*NOTUSABLE*/ ) 567 { 568 EndDialog(RET_OK); 569 return 0; 570 } 571 //------------------------------------------------------------------------ 572 IMPL_LINK( OAdabasNewDbDlg, LoseFocusHdl, Edit *, pEdit ) 573 { 574 if(&m_ET_SYSDEVSPACE == pEdit) 575 m_SYSDEV_File = pEdit->GetText(); 576 else if(&m_ET_TRANSACTIONLOG == pEdit) 577 m_TRANSDEV_File = pEdit->GetText(); 578 else if(&m_ET_DATADEVSPACE == pEdit) 579 m_DATADEV_File = pEdit->GetText(); 580 else if(&m_ET_RESTORE == pEdit) 581 m_Backup_File = pEdit->GetText(); 582 else if(&m_ET_DATABASENAME == pEdit) 583 {// check if the new dbname already exists 584 String sNewDbName = pEdit->GetText(); 585 String sConfig = m_sDbConfig; 586 sConfig.AppendAscii("config/"); 587 sConfig += sNewDbName; 588 if(UCBContentHelper::IsDocument(sConfig)) 589 { 590 String sErrorMessage = String(ModuleRes(STR_ADABAS_DB_EXISTS)); 591 ErrorBox(this, WB_OK, sErrorMessage).Execute(); 592 m_DBName.Erase(); 593 } 594 else if ( m_DBName.SearchAscii(" ") != STRING_NOTFOUND ) 595 { 596 String sErrorMessage = String(ModuleRes(STR_ADABAS_DB_EXISTS)); 597 ErrorBox(this, WB_OK, sErrorMessage).Execute(); 598 m_DBName = m_DBName.GetToken(0,' '); 599 } 600 else 601 m_DBName = sNewDbName; 602 } 603 604 CheckBitmaps(); 605 return 0; 606 } 607 //------------------------------------------------------------------------ 608 IMPL_LINK( OAdabasNewDbDlg, LoadButtonClickHdl, Button *, /*pButton*/ ) 609 { 610 ::sfx2::FileDialogHelper aLoad(WB_3DLOOK | WB_STDMODAL | WB_OPEN); 611 if(!m_Backup_File.Len()) 612 aLoad.SetDisplayDirectory(SvtPathOptions().GetWorkPath()); 613 else 614 aLoad.SetDisplayDirectory(m_Backup_File); 615 if (aLoad.Execute()) 616 { 617 INetURLObject aUrl(aLoad.GetPath()); 618 m_Backup_File = aUrl.PathToFileName(); 619 if(m_Backup_File.Len() > 40) 620 { 621 InfoBox aInfo(this,ModuleRes(INFO_STR_MAX_FILE_LENGTH)); 622 String aMsg(aInfo.GetMessText()); 623 aMsg.SearchAndReplace(String::CreateFromAscii("\'#\'"),String::CreateFromAscii("40")); 624 aInfo.SetMessText(aMsg); 625 } 626 m_ET_RESTORE.SetText(m_Backup_File); 627 } 628 CheckBitmaps(); 629 return 0; 630 } 631 //------------------------------------------------------------------------ 632 IMPL_LINK( OAdabasNewDbDlg, ButtonClickHdl, Button *, pButton ) 633 { 634 WinBits nBits(WB_3DLOOK|WB_STDMODAL|WB_SAVEAS); 635 ::sfx2::FileDialogHelper aFileDlg( static_cast<sal_uInt32>(nBits) ); // new FileDialog( this, nBits ); 636 637 String aPath; 638 if(pButton == &m_PB_SYSDEVSPACE) 639 aPath = m_SYSDEV_File; 640 else if(pButton == &m_PB_TRANSACTIONLOG) 641 aPath = m_TRANSDEV_File; 642 else if(pButton == &m_PB_DATADEVSPACE) 643 aPath = m_DATADEV_File; 644 645 String sUrl; 646 ::utl::LocalFileHelper::ConvertPhysicalNameToURL(aPath,sUrl); 647 aFileDlg.SetDisplayDirectory(sUrl); 648 649 650 651 if (aFileDlg.Execute() == ERRCODE_NONE) 652 { 653 INetURLObject aUrl(aFileDlg.GetPath()); 654 if(pButton == &m_PB_SYSDEVSPACE) 655 { 656 m_SYSDEV_File = aUrl.PathToFileName(); 657 if(m_SYSDEV_File.Len() > 40) 658 { 659 InfoBox aInfo(this,ModuleRes(INFO_STR_MAX_FILE_LENGTH)); 660 String aMsg(aInfo.GetMessText()); 661 aMsg.SearchAndReplace(String::CreateFromAscii("\'#\'"),String::CreateFromAscii("40")); 662 aInfo.SetMessText(aMsg); 663 aInfo.Execute(); 664 return 0; 665 } 666 m_ET_SYSDEVSPACE.SetText(aUrl.PathToFileName()); 667 } 668 else if(pButton == &m_PB_TRANSACTIONLOG) 669 { 670 m_TRANSDEV_File = aUrl.PathToFileName(); 671 if(m_TRANSDEV_File.Len() > 40) 672 { 673 InfoBox aInfo(this,ModuleRes(INFO_STR_MAX_FILE_LENGTH)); 674 String aMsg(aInfo.GetMessText()); 675 aMsg.SearchAndReplace(String::CreateFromAscii("\'#\'"),String::CreateFromAscii("40")); 676 aInfo.SetMessText(aMsg); 677 aInfo.Execute(); 678 return 0; 679 } 680 m_ET_TRANSACTIONLOG.SetText(aUrl.PathToFileName()); 681 } 682 else if(pButton == &m_PB_DATADEVSPACE) 683 { 684 m_DATADEV_File = aUrl.PathToFileName(); 685 if(m_DATADEV_File.Len() > 40) 686 { 687 InfoBox aInfo(this,ModuleRes(INFO_STR_MAX_FILE_LENGTH)); 688 String aMsg(aInfo.GetMessText()); 689 aMsg.SearchAndReplace(String::CreateFromAscii("\'#\'"),String::CreateFromAscii("40")); 690 aInfo.SetMessText(aMsg); 691 aInfo.Execute(); 692 return 0; 693 } 694 m_ET_DATADEVSPACE.SetText(aUrl.PathToFileName()); 695 } 696 } 697 698 CheckBitmaps(); 699 return 0; 700 } 701 //------------------------------------------------------------------------ 702 IMPL_LINK( OAdabasNewDbDlg, PwdClickHdl, Button *, pButton ) 703 { 704 SfxPasswordDialog aDlg(this); 705 aDlg.ShowExtras(SHOWEXTRAS_CONFIRM); 706 if(aDlg.Execute()) 707 { 708 String sPwd = aDlg.GetPassword().ToUpperAscii(); 709 // no space in password allowed 710 if ( sPwd.GetTokenCount(' ') == 1 ) 711 { 712 if(pButton == &m_PB_CONPWD) 713 { 714 m_ConPwd = sPwd; 715 m_nSetBitmap &=~2; 716 } 717 else if(pButton == &m_PB_SYSPWD) 718 { 719 m_SysPwd = sPwd; 720 if(!m_DomainPwd.Len()) 721 { 722 m_nSetBitmap = 1; 723 m_DomainPwd = m_SysPwd; 724 } 725 if(!m_ConPwd.Len()) 726 { 727 m_nSetBitmap |= 2; 728 m_ConPwd = m_SysPwd; 729 } 730 731 } 732 else if(pButton == &m_PB_DOMAINPWD) 733 { 734 m_DomainPwd = sPwd; 735 m_nSetBitmap &=~1; 736 } 737 } 738 else 739 { 740 String sErrorMsg(ModuleRes(STR_ADABAS_PASSWORD_ILLEGAL)); 741 ErrorBox(this, WB_OK, sErrorMsg).Execute(); 742 } 743 } 744 CheckBitmaps(); 745 return 0; 746 } 747 //------------------------------------------------------------------------ 748 void OAdabasNewDbDlg::CheckBitmaps() 749 { 750 sal_Int16 i=0; 751 if(m_ConPwd.Len() && m_ET_CONUSR.GetText().Len()) 752 i++,m_BMP_CON.SetImage(ModuleRes(((m_nSetBitmap & 2) == 2) ? DEFAULT_BLUE : CHECK_GREEN)); 753 else 754 m_BMP_CON.SetImage(ModuleRes(UNCHECK_RED)); 755 756 if(!m_bRestore) 757 { 758 if(m_SysPwd.Len() && m_ET_SYSUSR.GetText().Len()) 759 i++,m_BMP_SYS.SetImage(ModuleRes(CHECK_GREEN)); 760 else 761 m_BMP_SYS.SetImage(ModuleRes(UNCHECK_RED)); 762 763 if(m_DomainPwd.Len() ) 764 i++,m_BMP_DOMAIN.SetImage(ModuleRes(((m_nSetBitmap & 1) == 1) ? DEFAULT_BLUE : CHECK_GREEN)); 765 else 766 m_BMP_DOMAIN.SetImage(ModuleRes(UNCHECK_RED)); 767 } 768 else if(m_Backup_File.Len()) 769 i+=2; 770 771 if(m_ET_SYSDEVSPACE.GetText().Len() && m_ET_TRANSACTIONLOG.GetText().Len() && m_ET_DATADEVSPACE.GetText().Len() && 772 m_ET_SYSDEVSPACE.GetText() != m_ET_TRANSACTIONLOG.GetText() && m_ET_SYSDEVSPACE.GetText() != m_ET_DATADEVSPACE.GetText() && 773 m_ET_DATADEVSPACE.GetText() != m_ET_TRANSACTIONLOG.GetText()) 774 i++; 775 776 if(m_DBName.Len()) 777 i++; 778 779 m_PB_OK.Enable(i == 5); 780 } 781 // ----------------------------------------------------------------------------- 782 sal_Bool OAdabasNewDbDlg::fillEnvironmentVariable(const ::rtl::OUString& _sVariableName,String& _rsValue) 783 { 784 rtl_uString* pDbVar = NULL; 785 sal_Bool bError = sal_False; 786 if(osl_getEnvironment(_sVariableName.pData,&pDbVar) == osl_Process_E_None && pDbVar) 787 { 788 _rsValue = pDbVar; 789 String sTemp; 790 LocalFileHelper::ConvertPhysicalNameToURL(_rsValue,sTemp); 791 _rsValue = sTemp; 792 rtl_uString_release(pDbVar); 793 pDbVar = NULL; 794 795 // ensure dir exists 796 osl::FileBase::RC rc = osl::Directory::createPath(_rsValue); 797 if(rc != osl::FileBase::E_None && rc != osl::FileBase::E_EXIST) 798 { 799 bError = sal_True; 800 PostUserEvent(LINK(this, OAdabasNewDbDlg, OnError)); 801 } 802 } 803 return bError; 804 } 805 // ----------------------------------------------------------------------------- 806