1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 24 // MARKER(update_precomp.py): autogen include statement, do not remove 25 #include "precompiled_dbaccess.hxx" 26 #ifndef DBAUI_FIELDDESCRIPTIONS_HXX 27 #include "FieldDescriptions.hxx" 28 #endif 29 #ifndef _TOOLS_DEBUG_HXX 30 #include <tools/debug.hxx> 31 #endif 32 #ifndef TOOLS_DIAGNOSE_EX_H 33 #include <tools/diagnose_ex.h> 34 #endif 35 #ifndef _DBU_TBL_HRC_ 36 #include "dbu_tbl.hrc" 37 #endif 38 #ifndef _COM_SUN_STAR_SDBC_COLUMNVALUE_HPP_ 39 #include <com/sun/star/sdbc/ColumnValue.hpp> 40 #endif 41 #ifndef DBACCESS_SHARED_DBUSTRINGS_HRC 42 #include "dbustrings.hrc" 43 #endif 44 #ifndef _COMPHELPER_TYPES_HXX_ 45 #include <comphelper/types.hxx> 46 #endif 47 #ifndef _COMPHELPER_EXTRACT_HXX_ 48 #include <comphelper/extract.hxx> 49 #endif 50 #ifndef DBAUI_TOOLS_HXX 51 #include "UITools.hxx" 52 #endif 53 #ifndef _COM_SUN_STAR_UTIL_NUMBERFORMAT_HPP_ 54 #include <com/sun/star/util/NumberFormat.hpp> 55 #endif 56 57 #define DEFAULT_VARCHAR_PRECSION 50 58 #define DEFAULT_OTHER_PRECSION 16 59 #define DEFAULT_NUMERIC_PRECSION 5 60 #define DEFAULT_NUMERIC_SCALE 0 61 62 63 using namespace dbaui; 64 using namespace ::com::sun::star::sdbc; 65 using namespace ::com::sun::star::uno; 66 using namespace ::com::sun::star::beans; 67 using namespace ::com::sun::star::util; 68 69 //======================================================================== 70 // class OFieldDescription 71 //======================================================================== 72 DBG_NAME(OFieldDescription) 73 //------------------------------------------------------------------------------ 74 OFieldDescription::OFieldDescription() 75 :m_pType() 76 ,m_nType(DataType::VARCHAR) 77 ,m_nPrecision(0) 78 ,m_nScale(0) 79 ,m_nIsNullable(ColumnValue::NULLABLE) 80 ,m_nFormatKey(0) 81 ,m_eHorJustify(SVX_HOR_JUSTIFY_STANDARD) 82 ,m_bIsAutoIncrement(sal_False) 83 ,m_bIsPrimaryKey(sal_False) 84 ,m_bIsCurrency(sal_False) 85 ,m_bHidden(sal_False) 86 { 87 DBG_CTOR(OFieldDescription,NULL); 88 } 89 //------------------------------------------------------------------------------ 90 OFieldDescription::OFieldDescription( const OFieldDescription& rDescr ) 91 :m_aDefaultValue(rDescr.m_aDefaultValue) 92 ,m_aControlDefault(rDescr.m_aControlDefault) 93 ,m_aWidth(rDescr.m_aWidth) 94 ,m_aRelativePosition(rDescr.m_aRelativePosition) 95 ,m_pType(rDescr.m_pType) 96 ,m_xDest(rDescr.m_xDest) 97 ,m_xDestInfo(rDescr.m_xDestInfo) 98 ,m_sName(rDescr.m_sName) 99 ,m_sTypeName(rDescr.m_sTypeName) 100 ,m_sDescription(rDescr.m_sDescription) 101 ,m_sAutoIncrementValue(rDescr.m_sAutoIncrementValue) 102 ,m_nType(rDescr.m_nType) 103 ,m_nPrecision(rDescr.m_nPrecision) 104 ,m_nScale(rDescr.m_nScale) 105 ,m_nIsNullable(rDescr.m_nIsNullable) 106 ,m_nFormatKey(rDescr.m_nFormatKey) 107 ,m_eHorJustify(rDescr.m_eHorJustify) 108 ,m_bIsAutoIncrement(rDescr.m_bIsAutoIncrement) 109 ,m_bIsPrimaryKey(rDescr.m_bIsPrimaryKey) 110 ,m_bIsCurrency(rDescr.m_bIsCurrency) 111 ,m_bHidden(rDescr.m_bHidden) 112 { 113 DBG_CTOR(OFieldDescription,NULL); 114 } 115 116 //------------------------------------------------------------------------------ 117 OFieldDescription::~OFieldDescription() 118 { 119 DBG_DTOR(OFieldDescription,NULL); 120 } 121 //------------------------------------------------------------------------------ 122 OFieldDescription::OFieldDescription(const Reference< XPropertySet >& xAffectedCol,sal_Bool _bUseAsDest) 123 :m_pType() 124 ,m_nType(DataType::VARCHAR) 125 ,m_nPrecision(0) 126 ,m_nScale(0) 127 ,m_nIsNullable(ColumnValue::NULLABLE) 128 ,m_nFormatKey(0) 129 ,m_eHorJustify(SVX_HOR_JUSTIFY_STANDARD) 130 ,m_bIsAutoIncrement(sal_False) 131 ,m_bIsPrimaryKey(sal_False) 132 ,m_bIsCurrency(sal_False) 133 ,m_bHidden(sal_False) 134 { 135 DBG_CTOR(OFieldDescription,NULL); 136 OSL_ENSURE(xAffectedCol.is(),"PropetySet can notbe null!"); 137 if ( xAffectedCol.is() ) 138 { 139 if ( _bUseAsDest ) 140 { 141 m_xDest = xAffectedCol; 142 m_xDestInfo = xAffectedCol->getPropertySetInfo();; 143 } 144 else 145 { 146 try 147 { 148 Reference<XPropertySetInfo> xPropSetInfo = xAffectedCol->getPropertySetInfo(); 149 if(xPropSetInfo->hasPropertyByName(PROPERTY_NAME)) 150 SetName(::comphelper::getString(xAffectedCol->getPropertyValue(PROPERTY_NAME))); 151 if(xPropSetInfo->hasPropertyByName(PROPERTY_DESCRIPTION)) 152 SetDescription(::comphelper::getString(xAffectedCol->getPropertyValue(PROPERTY_DESCRIPTION))); 153 if(xPropSetInfo->hasPropertyByName(PROPERTY_HELPTEXT)) 154 { 155 ::rtl::OUString sHelpText; 156 xAffectedCol->getPropertyValue(PROPERTY_HELPTEXT) >>= sHelpText; 157 SetHelpText(sHelpText); 158 } 159 if(xPropSetInfo->hasPropertyByName(PROPERTY_DEFAULTVALUE)) 160 SetDefaultValue( xAffectedCol->getPropertyValue(PROPERTY_DEFAULTVALUE) ); 161 162 if(xPropSetInfo->hasPropertyByName(PROPERTY_CONTROLDEFAULT)) 163 SetControlDefault( xAffectedCol->getPropertyValue(PROPERTY_CONTROLDEFAULT) ); 164 165 if(xPropSetInfo->hasPropertyByName(PROPERTY_AUTOINCREMENTCREATION)) 166 SetAutoIncrementValue(::comphelper::getString(xAffectedCol->getPropertyValue(PROPERTY_AUTOINCREMENTCREATION))); 167 if(xPropSetInfo->hasPropertyByName(PROPERTY_TYPE)) 168 SetTypeValue(::comphelper::getINT32(xAffectedCol->getPropertyValue(PROPERTY_TYPE))); 169 if (xPropSetInfo->hasPropertyByName(PROPERTY_TYPENAME)) 170 SetTypeName(::comphelper::getString(xAffectedCol->getPropertyValue(PROPERTY_TYPENAME))); 171 if(xPropSetInfo->hasPropertyByName(PROPERTY_PRECISION)) 172 SetPrecision(::comphelper::getINT32(xAffectedCol->getPropertyValue(PROPERTY_PRECISION))); 173 if(xPropSetInfo->hasPropertyByName(PROPERTY_SCALE)) 174 SetScale(::comphelper::getINT32(xAffectedCol->getPropertyValue(PROPERTY_SCALE))); 175 if(xPropSetInfo->hasPropertyByName(PROPERTY_ISNULLABLE)) 176 SetIsNullable(::comphelper::getINT32(xAffectedCol->getPropertyValue(PROPERTY_ISNULLABLE))); 177 if(xPropSetInfo->hasPropertyByName(PROPERTY_FORMATKEY)) 178 { 179 const Any aValue = xAffectedCol->getPropertyValue(PROPERTY_FORMATKEY); 180 if ( aValue.hasValue() ) 181 SetFormatKey(::comphelper::getINT32(aValue)); 182 } 183 if(xPropSetInfo->hasPropertyByName(PROPERTY_RELATIVEPOSITION)) 184 m_aRelativePosition = xAffectedCol->getPropertyValue(PROPERTY_RELATIVEPOSITION); 185 if(xPropSetInfo->hasPropertyByName(PROPERTY_WIDTH)) 186 m_aWidth = xAffectedCol->getPropertyValue(PROPERTY_WIDTH); 187 if(xPropSetInfo->hasPropertyByName(PROPERTY_HIDDEN)) 188 xAffectedCol->getPropertyValue(PROPERTY_HIDDEN) >>= m_bHidden; 189 if(xPropSetInfo->hasPropertyByName(PROPERTY_ALIGN)) 190 { 191 const Any aValue = xAffectedCol->getPropertyValue(PROPERTY_ALIGN); 192 if ( aValue.hasValue() ) 193 SetHorJustify( ::dbaui::mapTextJustify(::comphelper::getINT32(aValue))); 194 } 195 if(xPropSetInfo->hasPropertyByName(PROPERTY_ISAUTOINCREMENT)) 196 SetAutoIncrement(::cppu::any2bool(xAffectedCol->getPropertyValue(PROPERTY_ISAUTOINCREMENT))); 197 } 198 catch(const Exception&) 199 { 200 DBG_UNHANDLED_EXCEPTION(); 201 } 202 } 203 } 204 } 205 // ----------------------------------------------------------------------------- 206 void OFieldDescription::FillFromTypeInfo(const TOTypeInfoSP& _pType,sal_Bool _bForce,sal_Bool _bReset) 207 { 208 TOTypeInfoSP pOldType = getTypeInfo(); 209 if ( _pType != pOldType ) 210 { 211 // reset type depending information 212 if ( _bReset ) 213 { 214 SetFormatKey(0); 215 SetControlDefault(Any()); 216 } 217 218 sal_Bool bForce = _bForce || pOldType.get() == NULL || pOldType->nType != _pType->nType; 219 switch ( _pType->nType ) 220 { 221 case DataType::CHAR: 222 case DataType::VARCHAR: 223 if ( bForce ) 224 { 225 sal_Int32 nPrec = DEFAULT_VARCHAR_PRECSION; 226 if ( GetPrecision() ) 227 nPrec = GetPrecision(); 228 SetPrecision(::std::min<sal_Int32>(nPrec,_pType->nPrecision)); 229 } 230 break; 231 case DataType::TIMESTAMP: 232 if ( bForce && _pType->nMaximumScale) 233 { 234 SetScale(::std::min<sal_Int32>(GetScale() ? GetScale() : DEFAULT_NUMERIC_SCALE,_pType->nMaximumScale)); 235 } 236 break; 237 default: 238 if ( bForce ) 239 { 240 sal_Int32 nPrec = DEFAULT_OTHER_PRECSION; 241 switch ( _pType->nType ) 242 { 243 case DataType::BIT: 244 case DataType::BLOB: 245 case DataType::CLOB: 246 nPrec = _pType->nPrecision; 247 break; 248 default: 249 if ( GetPrecision() ) 250 nPrec = GetPrecision(); 251 break; 252 } 253 254 if ( _pType->nPrecision ) 255 SetPrecision(::std::min<sal_Int32>(nPrec ? nPrec : DEFAULT_NUMERIC_PRECSION,_pType->nPrecision)); 256 if ( _pType->nMaximumScale ) 257 SetScale(::std::min<sal_Int32>(GetScale() ? GetScale() : DEFAULT_NUMERIC_SCALE,_pType->nMaximumScale)); 258 } 259 } 260 if ( !_pType->aCreateParams.getLength() ) 261 { 262 SetPrecision(_pType->nPrecision); 263 SetScale(_pType->nMinimumScale); 264 } 265 if ( !_pType->bNullable && IsNullable() ) 266 SetIsNullable(ColumnValue::NO_NULLS); 267 if ( !_pType->bAutoIncrement && IsAutoIncrement() ) 268 SetAutoIncrement(sal_False); 269 SetCurrency( _pType->bCurrency ); 270 SetType(_pType); 271 SetTypeName(_pType->aTypeName); 272 } 273 } 274 // ----------------------------------------------------------------------------- 275 void OFieldDescription::SetName(const ::rtl::OUString& _rName) 276 { 277 try 278 { 279 if ( m_xDest.is() && m_xDestInfo->hasPropertyByName(PROPERTY_NAME) ) 280 m_xDest->setPropertyValue(PROPERTY_NAME,makeAny(_rName)); 281 else 282 m_sName = _rName; 283 } 284 catch(const Exception& ) 285 { 286 DBG_UNHANDLED_EXCEPTION(); 287 } 288 } 289 // ----------------------------------------------------------------------------- 290 void OFieldDescription::SetHelpText(const ::rtl::OUString& _sHelpText) 291 { 292 try 293 { 294 if ( m_xDest.is() && m_xDestInfo->hasPropertyByName(PROPERTY_HELPTEXT) ) 295 m_xDest->setPropertyValue(PROPERTY_HELPTEXT,makeAny(_sHelpText)); 296 else 297 m_sHelpText = _sHelpText; 298 } 299 catch(const Exception& ) 300 { 301 DBG_UNHANDLED_EXCEPTION(); 302 } 303 } 304 // ----------------------------------------------------------------------------- 305 void OFieldDescription::SetDescription(const ::rtl::OUString& _rDescription) 306 { 307 try 308 { 309 if ( m_xDest.is() && m_xDestInfo->hasPropertyByName(PROPERTY_DESCRIPTION) ) 310 m_xDest->setPropertyValue(PROPERTY_DESCRIPTION,makeAny(_rDescription)); 311 else 312 m_sDescription = _rDescription; 313 } 314 catch(const Exception& ) 315 { 316 DBG_UNHANDLED_EXCEPTION(); 317 } 318 } 319 // ----------------------------------------------------------------------------- 320 void OFieldDescription::SetDefaultValue(const Any& _rDefaultValue) 321 { 322 try 323 { 324 if ( m_xDest.is() && m_xDestInfo->hasPropertyByName(PROPERTY_DEFAULTVALUE) ) 325 m_xDest->setPropertyValue(PROPERTY_DEFAULTVALUE,makeAny(_rDefaultValue)); 326 else 327 m_aDefaultValue = _rDefaultValue; 328 } 329 catch( const Exception& ) 330 { 331 DBG_UNHANDLED_EXCEPTION(); 332 } 333 } 334 // ----------------------------------------------------------------------------- 335 void OFieldDescription::SetControlDefault(const Any& _rControlDefault) 336 { 337 try 338 { 339 if ( m_xDest.is() && m_xDestInfo->hasPropertyByName(PROPERTY_CONTROLDEFAULT) ) 340 m_xDest->setPropertyValue(PROPERTY_CONTROLDEFAULT,makeAny(_rControlDefault)); 341 else 342 m_aControlDefault = _rControlDefault; 343 } 344 catch( const Exception& ) 345 { 346 DBG_UNHANDLED_EXCEPTION(); 347 } 348 } 349 // ----------------------------------------------------------------------------- 350 void OFieldDescription::SetAutoIncrementValue(const ::rtl::OUString& _sAutoIncValue) 351 { 352 try 353 { 354 if ( m_xDest.is() && m_xDestInfo->hasPropertyByName(PROPERTY_AUTOINCREMENTCREATION) ) 355 m_xDest->setPropertyValue(PROPERTY_AUTOINCREMENTCREATION,makeAny(_sAutoIncValue)); 356 else 357 m_sAutoIncrementValue = _sAutoIncValue; 358 } 359 catch( const Exception& ) 360 { 361 DBG_UNHANDLED_EXCEPTION(); 362 } 363 } 364 // ----------------------------------------------------------------------------- 365 void OFieldDescription::SetType(TOTypeInfoSP _pType) 366 { 367 m_pType = _pType; 368 if ( m_pType.get() ) 369 { 370 try 371 { 372 if ( m_xDest.is() && m_xDestInfo->hasPropertyByName(PROPERTY_TYPE) ) 373 m_xDest->setPropertyValue(PROPERTY_TYPE,makeAny(m_pType->nType)); 374 else 375 m_nType = m_pType->nType; 376 } 377 catch( const Exception& ) 378 { 379 DBG_UNHANDLED_EXCEPTION(); 380 } 381 } 382 } 383 // ----------------------------------------------------------------------------- 384 void OFieldDescription::SetTypeValue(sal_Int32 _nType) 385 { 386 try 387 { 388 if ( m_xDest.is() && m_xDestInfo->hasPropertyByName(PROPERTY_TYPE) ) 389 m_xDest->setPropertyValue(PROPERTY_TYPE,makeAny(_nType)); 390 else 391 { 392 m_nType = _nType; 393 OSL_ENSURE(!m_pType.get(),"Invalid call here!"); 394 } 395 } 396 catch( const Exception& ) 397 { 398 DBG_UNHANDLED_EXCEPTION(); 399 } 400 } 401 // ----------------------------------------------------------------------------- 402 void OFieldDescription::SetPrecision(const sal_Int32& _rPrecision) 403 { 404 try 405 { 406 if ( m_xDest.is() && m_xDestInfo->hasPropertyByName(PROPERTY_PRECISION) ) 407 m_xDest->setPropertyValue(PROPERTY_PRECISION,makeAny(_rPrecision)); 408 else 409 m_nPrecision = _rPrecision; 410 } 411 catch( const Exception& ) 412 { 413 DBG_UNHANDLED_EXCEPTION(); 414 } 415 } 416 // ----------------------------------------------------------------------------- 417 void OFieldDescription::SetScale(const sal_Int32& _rScale) 418 { 419 try 420 { 421 if ( m_xDest.is() && m_xDestInfo->hasPropertyByName(PROPERTY_SCALE) ) 422 m_xDest->setPropertyValue(PROPERTY_SCALE,makeAny(_rScale)); 423 else 424 m_nScale = _rScale; 425 } 426 catch( const Exception& ) 427 { 428 DBG_UNHANDLED_EXCEPTION(); 429 } 430 } 431 // ----------------------------------------------------------------------------- 432 void OFieldDescription::SetIsNullable(const sal_Int32& _rIsNullable) 433 { 434 try 435 { 436 if ( m_xDest.is() && m_xDestInfo->hasPropertyByName(PROPERTY_ISNULLABLE) ) 437 m_xDest->setPropertyValue(PROPERTY_ISNULLABLE,makeAny(_rIsNullable)); 438 else 439 m_nIsNullable = _rIsNullable; 440 } 441 catch( const Exception& ) 442 { 443 DBG_UNHANDLED_EXCEPTION(); 444 } 445 } 446 // ----------------------------------------------------------------------------- 447 void OFieldDescription::SetFormatKey(const sal_Int32& _rFormatKey) 448 { 449 try 450 { 451 if ( m_xDest.is() && m_xDestInfo->hasPropertyByName(PROPERTY_FORMATKEY) ) 452 m_xDest->setPropertyValue(PROPERTY_FORMATKEY,makeAny(_rFormatKey)); 453 else 454 m_nFormatKey = _rFormatKey; 455 } 456 catch( const Exception& ) 457 { 458 DBG_UNHANDLED_EXCEPTION(); 459 } 460 } 461 // ----------------------------------------------------------------------------- 462 void OFieldDescription::SetHorJustify(const SvxCellHorJustify& _rHorJustify) 463 { 464 try 465 { 466 if ( m_xDest.is() && m_xDestInfo->hasPropertyByName(PROPERTY_ALIGN) ) 467 m_xDest->setPropertyValue(PROPERTY_ALIGN,makeAny( dbaui::mapTextAllign(_rHorJustify))); 468 else 469 m_eHorJustify = _rHorJustify; 470 } 471 catch( const Exception& ) 472 { 473 DBG_UNHANDLED_EXCEPTION(); 474 } 475 } 476 // ----------------------------------------------------------------------------- 477 void OFieldDescription::SetAutoIncrement(sal_Bool _bAuto) 478 { 479 try 480 { 481 if ( m_xDest.is() && m_xDestInfo->hasPropertyByName(PROPERTY_ISAUTOINCREMENT) ) 482 m_xDest->setPropertyValue(PROPERTY_ISAUTOINCREMENT,makeAny(_bAuto)); 483 else 484 m_bIsAutoIncrement = _bAuto; 485 } 486 catch( const Exception& ) 487 { 488 DBG_UNHANDLED_EXCEPTION(); 489 } 490 } 491 // ----------------------------------------------------------------------------- 492 void OFieldDescription::SetPrimaryKey(sal_Bool _bPKey) 493 { 494 m_bIsPrimaryKey = _bPKey; 495 if ( _bPKey ) 496 SetIsNullable(::com::sun::star::sdbc::ColumnValue::NO_NULLS); 497 } 498 // ----------------------------------------------------------------------------- 499 void OFieldDescription::SetCurrency(sal_Bool _bIsCurrency) 500 { 501 m_bIsCurrency = _bIsCurrency; 502 } 503 // ----------------------------------------------------------------------------- 504 505 ::rtl::OUString OFieldDescription::GetName() const 506 { 507 if ( m_xDest.is() && m_xDestInfo->hasPropertyByName(PROPERTY_NAME) ) 508 return ::comphelper::getString(m_xDest->getPropertyValue(PROPERTY_NAME)); 509 else 510 return m_sName; 511 } 512 // ----------------------------------------------------------------------------- 513 ::rtl::OUString OFieldDescription::GetDescription() const 514 { 515 if ( m_xDest.is() && m_xDestInfo->hasPropertyByName(PROPERTY_DESCRIPTION) ) 516 return ::comphelper::getString(m_xDest->getPropertyValue(PROPERTY_DESCRIPTION)); 517 else 518 return m_sDescription; 519 } 520 // ----------------------------------------------------------------------------- 521 ::rtl::OUString OFieldDescription::GetHelpText() const 522 { 523 if ( m_xDest.is() && m_xDestInfo->hasPropertyByName(PROPERTY_HELPTEXT) ) 524 return ::comphelper::getString(m_xDest->getPropertyValue(PROPERTY_HELPTEXT)); 525 else 526 return m_sHelpText; 527 } 528 // ----------------------------------------------------------------------------- 529 ::com::sun::star::uno::Any OFieldDescription::GetControlDefault() const 530 { 531 if ( m_xDest.is() && m_xDestInfo->hasPropertyByName(PROPERTY_CONTROLDEFAULT) ) 532 return m_xDest->getPropertyValue(PROPERTY_CONTROLDEFAULT); 533 else 534 return m_aControlDefault; 535 } 536 // ----------------------------------------------------------------------------- 537 ::rtl::OUString OFieldDescription::GetAutoIncrementValue() const 538 { 539 if ( m_xDest.is() && m_xDestInfo->hasPropertyByName(PROPERTY_AUTOINCREMENTCREATION) ) 540 return ::comphelper::getString(m_xDest->getPropertyValue(PROPERTY_AUTOINCREMENTCREATION)); 541 else 542 return m_sAutoIncrementValue; 543 } 544 // ----------------------------------------------------------------------------- 545 sal_Int32 OFieldDescription::GetType() const 546 { 547 if ( m_xDest.is() && m_xDestInfo->hasPropertyByName(PROPERTY_TYPE) ) 548 return ::comphelper::getINT32(m_xDest->getPropertyValue(PROPERTY_TYPE)); 549 else 550 return m_pType.get() ? m_pType->nType : m_nType; 551 } 552 // ----------------------------------------------------------------------------- 553 ::rtl::OUString OFieldDescription::GetTypeName() const 554 { 555 if ( m_xDest.is() && m_xDestInfo->hasPropertyByName(PROPERTY_TYPENAME) ) 556 return ::comphelper::getString(m_xDest->getPropertyValue(PROPERTY_TYPENAME)); 557 else 558 return m_pType.get() ? m_pType->aTypeName : m_sTypeName; 559 } 560 // ----------------------------------------------------------------------------- 561 sal_Int32 OFieldDescription::GetPrecision() const 562 { 563 sal_Int32 nPrec = m_nPrecision; 564 if ( m_xDest.is() && m_xDestInfo->hasPropertyByName(PROPERTY_PRECISION) ) 565 nPrec = ::comphelper::getINT32(m_xDest->getPropertyValue(PROPERTY_PRECISION)); 566 567 TOTypeInfoSP pTypeInfo = getTypeInfo(); 568 if ( pTypeInfo ) 569 { 570 switch ( pTypeInfo->nType ) 571 { 572 case DataType::TINYINT: 573 case DataType::SMALLINT: 574 case DataType::INTEGER: 575 case DataType::BIGINT: 576 if ( !nPrec ) 577 nPrec = pTypeInfo->nPrecision; 578 break; 579 } // switch ( pTypeInfo->nType ) 580 } 581 582 return nPrec; 583 } 584 // ----------------------------------------------------------------------------- 585 sal_Int32 OFieldDescription::GetScale() const 586 { 587 if ( m_xDest.is() && m_xDestInfo->hasPropertyByName(PROPERTY_SCALE) ) 588 return ::comphelper::getINT32(m_xDest->getPropertyValue(PROPERTY_SCALE)); 589 else 590 return m_nScale; 591 } 592 // ----------------------------------------------------------------------------- 593 sal_Int32 OFieldDescription::GetIsNullable() const 594 { 595 if ( m_xDest.is() && m_xDestInfo->hasPropertyByName(PROPERTY_ISNULLABLE) ) 596 return ::comphelper::getINT32(m_xDest->getPropertyValue(PROPERTY_ISNULLABLE)); 597 else 598 return m_nIsNullable; 599 } 600 // ----------------------------------------------------------------------------- 601 sal_Int32 OFieldDescription::GetFormatKey() const 602 { 603 if ( m_xDest.is() && m_xDestInfo->hasPropertyByName(PROPERTY_FORMATKEY) ) 604 return ::comphelper::getINT32(m_xDest->getPropertyValue(PROPERTY_FORMATKEY)); 605 else 606 return m_nFormatKey; 607 } 608 // ----------------------------------------------------------------------------- 609 SvxCellHorJustify OFieldDescription::GetHorJustify() const 610 { 611 if ( m_xDest.is() && m_xDestInfo->hasPropertyByName(PROPERTY_ALIGN) ) 612 return ::dbaui::mapTextJustify(::comphelper::getINT32(m_xDest->getPropertyValue(PROPERTY_ALIGN))); 613 else 614 return m_eHorJustify; 615 } 616 // ----------------------------------------------------------------------------- 617 TOTypeInfoSP OFieldDescription::getTypeInfo() const 618 { 619 return m_pType; 620 } 621 // ----------------------------------------------------------------------------- 622 TOTypeInfoSP OFieldDescription::getSpecialTypeInfo() const 623 { 624 TOTypeInfoSP pSpecialType( new OTypeInfo() ); 625 *pSpecialType = *m_pType; 626 pSpecialType->nPrecision = GetPrecision(); 627 pSpecialType->nMaximumScale = static_cast<sal_Int16>(GetScale()); 628 pSpecialType->bAutoIncrement = IsAutoIncrement(); // http://dba.openoffice.org/issues/show_bug.cgi?id=115398 fixed by ludob 629 return pSpecialType; 630 } 631 // ----------------------------------------------------------------------------- 632 sal_Bool OFieldDescription::IsAutoIncrement() const 633 { 634 if ( m_xDest.is() && m_xDestInfo->hasPropertyByName(PROPERTY_ISAUTOINCREMENT) ) 635 return ::cppu::any2bool(m_xDest->getPropertyValue(PROPERTY_ISAUTOINCREMENT)); 636 else 637 return m_bIsAutoIncrement; 638 } 639 // ----------------------------------------------------------------------------- 640 sal_Bool OFieldDescription::IsPrimaryKey() const 641 { 642 return m_bIsPrimaryKey; 643 } 644 // ----------------------------------------------------------------------------- 645 sal_Bool OFieldDescription::IsCurrency() const 646 { 647 return m_bIsCurrency; 648 } 649 // ----------------------------------------------------------------------------- 650 sal_Bool OFieldDescription::IsNullable() const 651 { 652 if ( m_xDest.is() && m_xDestInfo->hasPropertyByName(PROPERTY_ISNULLABLE) ) 653 return ::comphelper::getINT32(m_xDest->getPropertyValue(PROPERTY_ISNULLABLE)) == ::com::sun::star::sdbc::ColumnValue::NULLABLE; 654 else 655 return m_nIsNullable == ::com::sun::star::sdbc::ColumnValue::NULLABLE; 656 } 657 // ----------------------------------------------------------------------------- 658 void OFieldDescription::SetTypeName(const ::rtl::OUString& _sTypeName) 659 { 660 try 661 { 662 if ( m_xDest.is() && m_xDestInfo->hasPropertyByName(PROPERTY_TYPENAME) ) 663 m_xDest->setPropertyValue(PROPERTY_TYPENAME,makeAny(_sTypeName)); 664 else 665 m_sTypeName = _sTypeName; 666 } 667 catch( const Exception& ) 668 { 669 DBG_UNHANDLED_EXCEPTION(); 670 } 671 } 672 // ----------------------------------------------------------------------------- 673 void OFieldDescription::copyColumnSettingsTo(const Reference< XPropertySet >& _rxColumn) 674 { 675 if ( _rxColumn.is() ) 676 { 677 Reference<XPropertySetInfo> xInfo = _rxColumn->getPropertySetInfo(); 678 679 if ( GetFormatKey() != NumberFormat::ALL && xInfo->hasPropertyByName(PROPERTY_FORMATKEY) ) 680 _rxColumn->setPropertyValue(PROPERTY_FORMATKEY,makeAny(GetFormatKey())); 681 if ( GetHorJustify() != SVX_HOR_JUSTIFY_STANDARD && xInfo->hasPropertyByName(PROPERTY_ALIGN) ) 682 _rxColumn->setPropertyValue(PROPERTY_ALIGN,makeAny(dbaui::mapTextAllign(GetHorJustify()))); 683 if ( GetHelpText().getLength() && xInfo->hasPropertyByName(PROPERTY_HELPTEXT) ) 684 _rxColumn->setPropertyValue(PROPERTY_HELPTEXT,makeAny(GetHelpText())); 685 if ( GetControlDefault().hasValue() && xInfo->hasPropertyByName(PROPERTY_CONTROLDEFAULT) ) 686 _rxColumn->setPropertyValue(PROPERTY_CONTROLDEFAULT,GetControlDefault()); 687 688 if(xInfo->hasPropertyByName(PROPERTY_RELATIVEPOSITION)) 689 _rxColumn->setPropertyValue(PROPERTY_RELATIVEPOSITION,m_aRelativePosition); 690 if(xInfo->hasPropertyByName(PROPERTY_WIDTH)) 691 _rxColumn->setPropertyValue(PROPERTY_WIDTH,m_aWidth); 692 if(xInfo->hasPropertyByName(PROPERTY_HIDDEN)) 693 _rxColumn->setPropertyValue(PROPERTY_HIDDEN,makeAny(m_bHidden)); 694 } 695 } 696 // ----------------------------------------------------------------------------- 697