User: rt      
Date: 06/05/04 01:44:14

Modified:
 /dba/dbaccess/source/ui/misc/
  DExport.cxx

Log:
 INTEGRATION: CWS dba203c (1.28.46); FILE MERGED
 2006/04/27 06:34:54 oj 1.28.46.3: conflict change
 2006/04/24 13:44:34 oj 1.28.46.2: RESYNC: (1.28-1.30); FILE MERGED
 2006/04/13 13:55:20 oj 1.28.46.1: #i62797# format regconition corrected

File Changes:

Directory: /dba/dbaccess/source/ui/misc/
========================================

File [changed]: DExport.cxx
Url: 
http://dba.openoffice.org/source/browse/dba/dbaccess/source/ui/misc/DExport.cxx?r1=1.30&r2=1.31
Delta lines:  +241 -159
-----------------------
--- DExport.cxx 19 Apr 2006 13:22:26 -0000      1.30
+++ DExport.cxx 4 May 2006 08:44:11 -0000       1.31
@@ -80,6 +80,12 @@
 #ifndef _DBHELPER_DBCONVERSION_HXX_
 #include <connectivity/dbconversion.hxx>
 #endif
+#ifndef _SFXHTML_HXX
+#include <sfx2/sfxhtml.hxx>
+#endif
+#ifndef _NUMUNO_HXX
+#include <svtools/numuno.hxx>
+#endif
 #ifndef _CONNECTIVITY_DBTOOLS_HXX_
 #include <connectivity/dbtools.hxx>
 #endif
@@ -173,8 +179,10 @@
                                                                 const 
Reference< XNumberFormatter >& _rxNumberF,
                                                                 const 
Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rM,
                                                                 const 
TColumnVector* pList,
-                                                                const 
OTypeInfoMap* _pInfoMap)
-       :m_pColumnList(pList)
+                                                                const 
OTypeInfoMap* _pInfoMap,
+                                 sal_Bool _bAutoIncrementEnabled)
+       :m_pFormatter(NULL)
+    ,m_pColumnList(pList)
        ,m_pInfoMap(_pInfoMap)
        ,m_nColumnPos(0)
        ,m_nRows(1)
@@ -184,7 +192,7 @@
        ,m_xFormatter(_rxNumberF)
        ,m_bHead(TRUE)
        ,m_bDontAskAgain(FALSE)
-       ,m_bIsAutoIncrement(FALSE)
+       ,m_bIsAutoIncrement(_bAutoIncrementEnabled)
        ,m_aDestColumns(sal_True)
        ,m_xFactory(_rM)
        ,m_pTypeInfo()
@@ -230,6 +238,7 @@
                                                                 const 
TColumnVector* pList,
                                                                 const 
OTypeInfoMap* _pInfoMap)
        :m_xConnection(_rxConnection)
+    ,m_pFormatter(NULL)
        ,m_pColumnList(NULL)
        ,m_pInfoMap(NULL)
        ,m_nColumnPos(0)
@@ -359,6 +368,7 @@
 ODatabaseExport::~ODatabaseExport()
 {
        DBG_DTOR(ODatabaseExport,NULL); 
+    m_pFormatter = NULL;
        ODatabaseExport::TColumns::iterator aIter = m_aDestColumns.begin();
        ODatabaseExport::TColumns::iterator aEnd  = m_aDestColumns.end();
 
@@ -376,8 +386,10 @@
                OFieldDescription* pField = m_vDestVector[m_nColumnPos]->second;
                if(pField)
                {
-                       OSL_ENSURE((m_bIsAutoIncrement ? m_nColumnPos+1 : 
m_nColumnPos) < static_cast<sal_Int32>(m_vColumns.size()),"Illegal index for 
vector");
-                       sal_Int32 nPos = m_vColumns[m_bIsAutoIncrement ? 
m_nColumnPos+1 : m_nColumnPos].first;
+            sal_Int32 nNewPos = m_bIsAutoIncrement ? m_nColumnPos+1 : 
m_nColumnPos;
+                       OSL_ENSURE((nNewPos) < 
static_cast<sal_Int32>(m_vColumns.size()),"Illegal index for vector");
+            
+                       sal_Int32 nPos = m_vColumns[nNewPos].first;
                        if(nPos != CONTAINER_ENTRY_NOTFOUND)
                        {
 //                                     if(m_nDefToken != LANGUAGE_DONTKNOW) // 
falls Sprache anders als Systemsprache
@@ -389,10 +401,25 @@
                                {
                                        sal_Int32 nNumberFormat = 0;
                                        double fOutNumber = 0.0;
-                                       OSL_ENSURE((m_bIsAutoIncrement ? 
m_nColumnPos+1 : m_nColumnPos) < 
static_cast<sal_Int32>(m_vColumnTypes.size()),"Illegal index for vector");
-                                       if (m_vColumnTypes[m_bIsAutoIncrement ? 
m_nColumnPos+1 : m_nColumnPos] != DataType::VARCHAR)
+                                       OSL_ENSURE((nNewPos) < 
static_cast<sal_Int32>(m_vColumnTypes.size()),"Illegal index for vector");
+                                       if (m_vColumnTypes[nNewPos] != 
DataType::VARCHAR)
+                                       {
+                        Reference< XNumberFormatsSupplier >  xSupplier = 
m_xFormatter->getNumberFormatsSupplier();
+                        Reference<XPropertySet> xNumberFormatSettings = 
xSupplier->getNumberFormatSettings();
+                        com::sun::star::util::Date aNullDate;
+                        
xNumberFormatSettings->getPropertyValue(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("NullDate")))
 >>= aNullDate;
+
+                        ensureFormatter();
+                           if ( m_pFormatter && m_sNumToken.Len() )
+                        {
+                            LanguageType eNumLang;
+                            sal_uInt32 nNumberFormat2;
+                            fOutNumber = 
SfxHTMLParser::GetTableDataOptionsValNum(nNumberFormat2,eNumLang,m_sTextToken,m_sNumToken,*m_pFormatter);
+                            nNumberFormat = 
static_cast<sal_Int32>(nNumberFormat2);
+                        }
+                        else
                                        {
-                                               Reference<XNumberFormatTypes> 
xNumType(m_xFormatter->getNumberFormatsSupplier()->getNumberFormats(),UNO_QUERY);
+                                                   
Reference<XNumberFormatTypes> xNumType(xSupplier->getNumberFormats(),UNO_QUERY);
 
                                                try
                                                {
@@ -422,10 +449,25 @@
                                                                }
                                                        }
                                                }
+                            fOutNumber = 
m_xFormatter->convertStringToNumber(nNumberFormat,m_sTextToken);
+                        }
                                                try
                                                {
-                                                       fOutNumber = 
m_xFormatter->convertStringToNumber(nNumberFormat,m_sTextToken);
-                                                       
m_pUpdateHelper->updateDouble(nPos,::dbtools::DBTypeConversion::toStandardDbDate(::dbtools::DBTypeConversion::getStandardDate(),fOutNumber));
+                            Reference< XNumberFormatsSupplier > xSupplier = 
m_xFormatter->getNumberFormatsSupplier();
+                            Reference< XNumberFormats >         xFormats = 
xSupplier->getNumberFormats();
+                            Reference<XPropertySet> xProp = 
xFormats->getByKey(nNumberFormat);
+                                   sal_Int16 nType = 0;
+                                   xProp->getPropertyValue(PROPERTY_TYPE) >>= 
nType;
+                            switch(nType)
+                                   {
+                                           case NumberFormat::DATE:
+                                case NumberFormat::DATETIME:
+                                    fOutNumber = 
::dbtools::DBTypeConversion::toStandardDbDate(aNullDate,fOutNumber);
+                                    break;
+                                default:
+                                    ;
+                            }
+                                                       
m_pUpdateHelper->updateDouble(nPos,fOutNumber);//::dbtools::DBTypeConversion::getStandardDate()
                                                }
                                                catch(Exception&)
                                                {
@@ -437,7 +479,7 @@
                                                
m_pUpdateHelper->updateString(nPos,m_sTextToken);
                                }
                        }
-                       m_sTextToken.Erase();
+            eraseTokens();
                }
        }
 }
@@ -451,18 +493,28 @@
 
        try
        {
-               Reference<XNumberFormats> xFormats = 
m_xFormatter->getNumberFormatsSupplier()->getNumberFormats();
+        Reference< XNumberFormatsSupplier > xSupplier = 
m_xFormatter->getNumberFormatsSupplier();
+        Reference< XNumberFormats >         xFormats = 
xSupplier->getNumberFormats();
+
+        ensureFormatter();
+           if ( m_pFormatter && m_sNumToken.Len() )
+        {
+            LanguageType eNumLang;
+            sal_uInt32 nNumberFormat2;
+            fOutNumber = 
SfxHTMLParser::GetTableDataOptionsValNum(nNumberFormat2,eNumLang,m_sTextToken,m_sNumToken,*m_pFormatter);
+            //double fOutNumber2 = 
SfxHTMLParser::GetTableDataOptionsValNum(nNumberFormat2,eNumLang,m_sValToken,m_sNumToken,*m_pFormatter);
+            nFormat = static_cast<sal_Int32>(nNumberFormat2);
+        }
+        else
+        {                      
                Reference<XNumberFormatTypes> xNumType(xFormats,UNO_QUERY);
                nFormat = 
m_xFormatter->detectNumberFormat(xNumType->getStandardFormat(NumberFormat::ALL,m_nLocale),aCheckToken);
+            fOutNumber = 
m_xFormatter->convertStringToNumber(nFormat,aCheckToken);
+
                Reference<XPropertySet> xProp = xFormats->getByKey(nFormat);
                sal_Int16 nType = 0;
                xProp->getPropertyValue(PROPERTY_TYPE) >>= nType;
-               fOutNumber = 
m_xFormatter->convertStringToNumber(nFormat,aCheckToken);
 
-               {
-                       OSL_ENSURE((m_nColumnPos) < 
static_cast<sal_Int32>(m_vColumns.size()),"Illegal index for vector");
-                       OSL_ENSURE(m_vColumns[m_nColumnPos].first < 
static_cast<sal_Int32>(m_vFormatKey.size()),"Illegal index for vector");
-                       m_vFormatKey[m_vColumns[m_nColumnPos].first] = nFormat; 
// wird sp"ater f"ur die Column gebraucht
                        switch(nType)
                        {
                                case NumberFormat::ALL:
@@ -563,8 +615,6 @@
        }
        catch(Exception&)
        {
-               OSL_ENSURE((m_nColumnPos) < 
static_cast<sal_Int32>(m_vColumns.size()),"Illegal index for vector");
-               m_vFormatKey[m_vColumns[m_nColumnPos].first] =  100;
                nFormat = NumberFormat::TEXT; // Text "uberschreibt alles
        }
 
@@ -576,12 +626,18 @@
        DBG_CHKTHIS(ODatabaseExport,NULL);
        if(_pList && _pInfoMap)
        {
+        Reference< XNumberFormatsSupplier > xSupplier = 
m_xFormatter->getNumberFormatsSupplier();
+        Reference< XNumberFormats >         xFormats = 
xSupplier->getNumberFormats();
                TColumnVector::const_iterator aIter = _pList->begin();
-               for(sal_Int32 i=0;aIter != _pList->end();++aIter,++i)
+        TColumnVector::const_iterator aEnd = _pList->end();
+        for(sal_Int32 i= 0;aIter != aEnd;++aIter,++i)
                {
                        sal_Int32 nDataType;
                        sal_Int32 nLength(0),nScale(0);
-                       switch(m_vFormatKey[i])
+            Reference<XPropertySet> xProp = 
xFormats->getByKey(m_vFormatKey[i]);
+                   sal_Int16 nType = 0;
+                   xProp->getPropertyValue(PROPERTY_TYPE) >>= nType;
+                       switch ( nType )
                        {
                                case NumberFormat::ALL:
                                        nDataType  = DataType::DOUBLE;
@@ -810,6 +866,39 @@
        } // if(!m_bDontAskAgain)
 }
 // 
-----------------------------------------------------------------------------
+void ODatabaseExport::adjustFormat()
+{
+    if ( m_sTextToken.Len() )
+       {
+               sal_Int32 nColPos = m_vColumns[m_bIsAutoIncrement ? 
m_nColumnPos+1 : m_nColumnPos].first;
+               if( nColPos != CONTAINER_ENTRY_NOTFOUND)
+               {
+            --nColPos;
+                       m_vFormatKey[nColPos] = 
CheckString(m_sTextToken,m_vFormatKey[nColPos]);
+                       m_vColumnSize[nColPos] = 
::std::max<sal_Int32>((sal_Int32)m_vColumnSize[nColPos],(sal_Int32)m_sTextToken.Len());
+               }
+               eraseTokens();
+       }
+}
+// 
-----------------------------------------------------------------------------
+void ODatabaseExport::eraseTokens()
+{
+    m_sTextToken.Erase();
+    m_sNumToken.Erase();
+    m_sValToken.Erase();
+}
+// 
-----------------------------------------------------------------------------
+void ODatabaseExport::ensureFormatter()
+{
+    if ( !m_pFormatter )
+    {
+        Reference< XNumberFormatsSupplier >  xSupplier = 
m_xFormatter->getNumberFormatsSupplier();
+           Reference< XUnoTunnel > xTunnel(xSupplier,UNO_QUERY);
+           SvNumberFormatsSupplierObj* pSupplierImpl = 
(SvNumberFormatsSupplierObj*)xTunnel->getSomething(SvNumberFormatsSupplierObj::getUnoTunnelId());
+           m_pFormatter = pSupplierImpl ? pSupplierImpl->GetNumberFormatter() 
: NULL;
+    }
+}
+// 
-----------------------------------------------------------------------------
 Reference< XPreparedStatement > ODatabaseExport::createPreparedStatment( const 
Reference<XDatabaseMetaData>& _xMetaData
                                                        ,const 
Reference<XPropertySet>& _xDestTable
                                                        ,const TPositions& 
_rvColumns)
@@ -871,12 +960,5 @@
        return Reference< XPreparedStatement 
>(_xMetaData->getConnection()->prepareStatement(aSql));
 }
 // 
-----------------------------------------------------------------------------
-
-
-
-
-
-
-
 
 




---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to