LCOV - code coverage report
Current view: top level - sc/source/filter/xml - xmldrani.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 112 472 23.7 %
Date: 2012-08-25 Functions: 12 52 23.1 %
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 79 586 13.5 %

           Branch data     Line data    Source code
       1                 :            : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
       2                 :            : /*************************************************************************
       3                 :            :  *
       4                 :            :  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
       5                 :            :  *
       6                 :            :  * Copyright 2000, 2010 Oracle and/or its affiliates.
       7                 :            :  *
       8                 :            :  * OpenOffice.org - a multi-platform office productivity suite
       9                 :            :  *
      10                 :            :  * This file is part of OpenOffice.org.
      11                 :            :  *
      12                 :            :  * OpenOffice.org is free software: you can redistribute it and/or modify
      13                 :            :  * it under the terms of the GNU Lesser General Public License version 3
      14                 :            :  * only, as published by the Free Software Foundation.
      15                 :            :  *
      16                 :            :  * OpenOffice.org is distributed in the hope that it will be useful,
      17                 :            :  * but WITHOUT ANY WARRANTY; without even the implied warranty of
      18                 :            :  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      19                 :            :  * GNU Lesser General Public License version 3 for more details
      20                 :            :  * (a copy is included in the LICENSE file that accompanied this code).
      21                 :            :  *
      22                 :            :  * You should have received a copy of the GNU Lesser General Public License
      23                 :            :  * version 3 along with OpenOffice.org.  If not, see
      24                 :            :  * <http://www.openoffice.org/license.html>
      25                 :            :  * for a copy of the LGPLv3 License.
      26                 :            :  *
      27                 :            :  ************************************************************************/
      28                 :            : 
      29                 :            : #include "xmldrani.hxx"
      30                 :            : #include "xmlimprt.hxx"
      31                 :            : #include "xmlfilti.hxx"
      32                 :            : #include "xmlsorti.hxx"
      33                 :            : #include "document.hxx"
      34                 :            : #include "globstr.hrc"
      35                 :            : #include "globalnames.hxx"
      36                 :            : #include "docuno.hxx"
      37                 :            : #include "dbdata.hxx"
      38                 :            : #include "datauno.hxx"
      39                 :            : #include "attrib.hxx"
      40                 :            : #include "unonames.hxx"
      41                 :            : #include "convuno.hxx"
      42                 :            : #include "XMLConverter.hxx"
      43                 :            : #include "rangeutl.hxx"
      44                 :            : #include "queryentry.hxx"
      45                 :            : 
      46                 :            : #include <xmloff/xmltkmap.hxx>
      47                 :            : #include <xmloff/nmspmap.hxx>
      48                 :            : #include <xmloff/xmltoken.hxx>
      49                 :            : #include <xmloff/xmlnmspe.hxx>
      50                 :            : #include <xmloff/xmlerror.hxx>
      51                 :            : 
      52                 :            : #include <sax/tools/converter.hxx>
      53                 :            : 
      54                 :            : #include <com/sun/star/sheet/DataImportMode.hpp>
      55                 :            : #include <com/sun/star/sheet/XSpreadsheetDocument.hpp>
      56                 :            : #include <com/sun/star/sheet/XDatabaseRanges.hpp>
      57                 :            : #include <com/sun/star/sheet/XDatabaseRange.hpp>
      58                 :            : #include <com/sun/star/table/CellRangeAddress.hpp>
      59                 :            : #include <comphelper/extract.hxx>
      60                 :            : #include <com/sun/star/uno/RuntimeException.hpp>
      61                 :            : #include <com/sun/star/xml/sax/XLocator.hpp>
      62                 :            : 
      63                 :            : #include <memory>
      64                 :            : 
      65                 :            : #define SC_USERLIST             "UserList"
      66                 :            : 
      67                 :            : using namespace com::sun::star;
      68                 :            : using namespace xmloff::token;
      69                 :            : using ::rtl::OUString;
      70                 :            : 
      71                 :            : //------------------------------------------------------------------
      72                 :            : 
      73                 :          8 : ScXMLDatabaseRangesContext::ScXMLDatabaseRangesContext( ScXMLImport& rImport,
      74                 :            :                                       sal_uInt16 nPrfx,
      75                 :            :                                       const ::rtl::OUString& rLName,
      76                 :            :                                       const ::com::sun::star::uno::Reference<
      77                 :            :                                       ::com::sun::star::xml::sax::XAttributeList>& /* xAttrList */ ) :
      78                 :          8 :     SvXMLImportContext( rImport, nPrfx, rLName )
      79                 :            : {
      80                 :            :     // has no attributes
      81         [ +  - ]:          8 :     rImport.LockSolarMutex();
      82                 :          8 : }
      83                 :            : 
      84                 :          8 : ScXMLDatabaseRangesContext::~ScXMLDatabaseRangesContext()
      85                 :            : {
      86         [ +  - ]:          8 :     GetScImport().UnlockSolarMutex();
      87         [ -  + ]:         16 : }
      88                 :            : 
      89                 :         26 : SvXMLImportContext *ScXMLDatabaseRangesContext::CreateChildContext( sal_uInt16 nPrefix,
      90                 :            :                                             const ::rtl::OUString& rLName,
      91                 :            :                                             const ::com::sun::star::uno::Reference<
      92                 :            :                                           ::com::sun::star::xml::sax::XAttributeList>& xAttrList )
      93                 :            : {
      94                 :         26 :     SvXMLImportContext *pContext = 0;
      95                 :            : 
      96                 :         26 :     const SvXMLTokenMap& rTokenMap = GetScImport().GetDatabaseRangesElemTokenMap();
      97         [ +  - ]:         26 :     switch( rTokenMap.Get( nPrefix, rLName ) )
      98                 :            :     {
      99                 :            :         case XML_TOK_DATABASE_RANGE :
     100                 :            :         {
     101                 :            :             pContext = new ScXMLDatabaseRangeContext( GetScImport(), nPrefix,
     102         [ +  - ]:         26 :                                                           rLName, xAttrList);
     103                 :            :         }
     104                 :         26 :         break;
     105                 :            :     }
     106                 :            : 
     107         [ -  + ]:         26 :     if( !pContext )
     108         [ #  # ]:          0 :         pContext = new SvXMLImportContext( GetImport(), nPrefix, rLName );
     109                 :            : 
     110                 :         26 :     return pContext;
     111                 :            : }
     112                 :            : 
     113                 :          8 : void ScXMLDatabaseRangesContext::EndElement()
     114                 :            : {
     115                 :          8 : }
     116                 :            : 
     117                 :         26 : ScXMLDatabaseRangeContext::ScXMLDatabaseRangeContext( ScXMLImport& rImport,
     118                 :            :                                       sal_uInt16 nPrfx,
     119                 :            :                                       const ::rtl::OUString& rLName,
     120                 :            :                                       const ::com::sun::star::uno::Reference<
     121                 :            :                                       ::com::sun::star::xml::sax::XAttributeList>& xAttrList) :
     122                 :            :     SvXMLImportContext( rImport, nPrfx, rLName ),
     123         [ +  - ]:         26 :     mpQueryParam(new ScQueryParam),
     124                 :            :     sDatabaseRangeName(RTL_CONSTASCII_USTRINGPARAM(STR_DB_LOCAL_NONAME)),
     125                 :            :     aSortSequence(),
     126                 :            :     nRefresh(0),
     127                 :            :     nSubTotalsUserListIndex(0),
     128                 :            :     mbValidRange(true),
     129                 :            :     bContainsSort(false),
     130                 :            :     bContainsSubTotal(false),
     131                 :            :     bNative(true),
     132                 :            :     bIsSelection(false),
     133                 :            :     bKeepFormats(false),
     134                 :            :     bMoveCells(false),
     135                 :            :     bStripData(false),
     136                 :            :     bAutoFilter(false),
     137                 :            :     bSubTotalsBindFormatsToContent(false),
     138                 :            :     bSubTotalsIsCaseSensitive(false),
     139                 :            :     bSubTotalsInsertPageBreaks(false),
     140                 :            :     bSubTotalsSortGroups(false),
     141                 :            :     bSubTotalsEnabledUserList(false),
     142                 :            :     bSubTotalsAscending(true),
     143                 :            :     bFilterConditionSourceRange(false),
     144                 :            :     bHasHeader(true),
     145                 :            :     bByRow(false),
     146 [ +  - ][ +  - ]:         52 :     meRangeType(ScDBCollection::GlobalNamed)
         [ +  - ][ +  - ]
     147                 :            : {
     148                 :         26 :     nSourceType = sheet::DataImportMode_NONE;
     149 [ +  - ][ +  - ]:         26 :     sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
                 [ +  - ]
     150         [ +  - ]:         26 :     const SvXMLTokenMap& rAttrTokenMap = GetScImport().GetDatabaseRangeAttrTokenMap();
     151         [ +  + ]:         90 :     for( sal_Int16 i=0; i < nAttrCount; ++i )
     152                 :            :     {
     153 [ +  - ][ +  - ]:         64 :         const rtl::OUString& sAttrName(xAttrList->getNameByIndex( i ));
     154                 :         64 :         rtl::OUString aLocalName;
     155                 :         64 :         sal_uInt16 nPrefix = GetScImport().GetNamespaceMap().GetKeyByAttrName(
     156         [ +  - ]:         64 :                                             sAttrName, &aLocalName );
     157 [ +  - ][ +  - ]:         64 :         const rtl::OUString& sValue(xAttrList->getValueByIndex( i ));
     158                 :            : 
     159 [ +  - ][ +  -  :         64 :         switch( rAttrTokenMap.Get( nPrefix, aLocalName ) )
          -  -  -  -  +  
             +  +  -  - ]
     160                 :            :         {
     161                 :            :             case XML_TOK_DATABASE_RANGE_ATTR_NAME :
     162                 :            :             {
     163                 :         26 :                 sDatabaseRangeName = sValue;
     164                 :            :             }
     165                 :         26 :             break;
     166                 :            :             case XML_TOK_DATABASE_RANGE_ATTR_IS_SELECTION :
     167                 :            :             {
     168         [ #  # ]:          0 :                 bIsSelection = IsXMLToken(sValue, XML_TRUE);
     169                 :            :             }
     170                 :          0 :             break;
     171                 :            :             case XML_TOK_DATABASE_RANGE_ATTR_ON_UPDATE_KEEP_STYLES :
     172                 :            :             {
     173         [ #  # ]:          0 :                 bKeepFormats = IsXMLToken(sValue, XML_TRUE);
     174                 :            :             }
     175                 :          0 :             break;
     176                 :            :             case XML_TOK_DATABASE_RANGE_ATTR_ON_UPDATE_KEEP_SIZE :
     177                 :            :             {
     178         [ #  # ]:          0 :                 bMoveCells = !IsXMLToken(sValue, XML_TRUE);
     179                 :            :             }
     180                 :          0 :             break;
     181                 :            :             case XML_TOK_DATABASE_RANGE_ATTR_HAS_PERSISTENT_DATA :
     182                 :            :             {
     183         [ #  # ]:          0 :                 bStripData = !IsXMLToken(sValue, XML_TRUE);
     184                 :            :             }
     185                 :          0 :             break;
     186                 :            :             case XML_TOK_DATABASE_RANGE_ATTR_ORIENTATION :
     187                 :            :             {
     188         [ #  # ]:          0 :                 bByRow = !IsXMLToken(sValue, XML_COLUMN);
     189                 :          0 :                 mpQueryParam->bByRow = bByRow;
     190                 :            :             }
     191                 :          0 :             break;
     192                 :            :             case XML_TOK_DATABASE_RANGE_ATTR_CONTAINS_HEADER :
     193                 :            :             {
     194         [ +  - ]:          3 :                 bHasHeader = IsXMLToken(sValue, XML_TRUE);
     195                 :          3 :                 mpQueryParam->bHasHeader = bHasHeader;
     196                 :            :             }
     197                 :          3 :             break;
     198                 :            :             case XML_TOK_DATABASE_RANGE_ATTR_DISPLAY_FILTER_BUTTONS :
     199                 :            :             {
     200         [ +  - ]:          9 :                 bAutoFilter = IsXMLToken(sValue, XML_TRUE);
     201                 :            :             }
     202                 :          9 :             break;
     203                 :            :             case XML_TOK_DATABASE_RANGE_ATTR_TARGET_RANGE_ADDRESS :
     204                 :            :             {
     205                 :         26 :                 ScDocument* pDoc = GetScImport().GetDocument();
     206                 :         26 :                 sal_Int32 nOffset = 0;
     207         [ -  + ]:         26 :                 if (!ScRangeStringConverter::GetRangeFromString(
     208         [ +  - ]:         26 :                     maRange, sValue, pDoc, ::formula::FormulaGrammar::CONV_OOO, nOffset))
     209                 :          0 :                     mbValidRange = false;
     210                 :            :             }
     211                 :         26 :             break;
     212                 :            :             case XML_TOK_DATABASE_RANGE_ATTR_REFRESH_DELAY :
     213                 :            :             {
     214                 :            :                 double fTime;
     215 [ #  # ][ #  # ]:          0 :                 if (::sax::Converter::convertDuration( fTime, sValue ))
     216                 :          0 :                     nRefresh = Max( (sal_Int32)(fTime * 86400.0), (sal_Int32)0 );
     217                 :            :             }
     218                 :          0 :             break;
     219                 :            :         }
     220                 :         64 :     }
     221                 :            : 
     222                 :         26 :     mpQueryParam->nTab = maRange.aStart.Tab();
     223                 :         26 :     mpQueryParam->nCol1 = maRange.aStart.Col();
     224                 :         26 :     mpQueryParam->nRow1 = maRange.aStart.Row();
     225                 :         26 :     mpQueryParam->nCol2 = maRange.aEnd.Col();
     226                 :         26 :     mpQueryParam->nRow2 = maRange.aEnd.Row();
     227                 :            : 
     228         [ +  + ]:         26 :     if (sDatabaseRangeName.matchAsciiL(STR_DB_LOCAL_NONAME, strlen(STR_DB_LOCAL_NONAME)))
     229                 :          3 :         meRangeType = ScDBCollection::SheetAnonymous;
     230         [ -  + ]:         23 :     else if (sDatabaseRangeName.matchAsciiL(STR_DB_GLOBAL_NONAME, strlen(STR_DB_GLOBAL_NONAME)))
     231                 :          0 :         meRangeType = ScDBCollection::GlobalAnonymous;
     232                 :         26 : }
     233                 :            : 
     234 [ +  - ][ +  - ]:         26 : ScXMLDatabaseRangeContext::~ScXMLDatabaseRangeContext()
     235                 :            : {
     236         [ -  + ]:         52 : }
     237                 :            : 
     238                 :          9 : SvXMLImportContext *ScXMLDatabaseRangeContext::CreateChildContext( sal_uInt16 nPrefix,
     239                 :            :                                             const ::rtl::OUString& rLName,
     240                 :            :                                             const ::com::sun::star::uno::Reference<
     241                 :            :                                           ::com::sun::star::xml::sax::XAttributeList>& xAttrList )
     242                 :            : {
     243                 :          9 :     SvXMLImportContext *pContext = 0;
     244                 :            : 
     245                 :          9 :     const SvXMLTokenMap& rTokenMap = GetScImport().GetDatabaseRangeElemTokenMap();
     246   [ -  -  -  +  :          9 :     switch( rTokenMap.Get( nPrefix, rLName ) )
                -  -  - ]
     247                 :            :     {
     248                 :            :         case XML_TOK_DATABASE_RANGE_SOURCE_SQL :
     249                 :            :         {
     250                 :            :             pContext = new ScXMLSourceSQLContext( GetScImport(), nPrefix,
     251         [ #  # ]:          0 :                                                           rLName, xAttrList, this);
     252                 :            :         }
     253                 :          0 :         break;
     254                 :            :         case XML_TOK_DATABASE_RANGE_SOURCE_TABLE :
     255                 :            :         {
     256                 :            :             pContext = new ScXMLSourceTableContext( GetScImport(), nPrefix,
     257         [ #  # ]:          0 :                                                           rLName, xAttrList, this);
     258                 :            :         }
     259                 :          0 :         break;
     260                 :            :         case XML_TOK_DATABASE_RANGE_SOURCE_QUERY :
     261                 :            :         {
     262                 :            :             pContext = new ScXMLSourceQueryContext( GetScImport(), nPrefix,
     263         [ #  # ]:          0 :                                                           rLName, xAttrList, this);
     264                 :            :         }
     265                 :          0 :         break;
     266                 :            :         case XML_TOK_FILTER :
     267                 :            :         {
     268                 :            :             pContext = new ScXMLFilterContext(
     269         [ +  - ]:          9 :                 GetScImport(), nPrefix, rLName, xAttrList, *mpQueryParam, this);
     270                 :            :         }
     271                 :          9 :         break;
     272                 :            :         case XML_TOK_SORT :
     273                 :            :         {
     274                 :          0 :             bContainsSort = true;
     275                 :            :             pContext = new ScXMLSortContext( GetScImport(), nPrefix,
     276         [ #  # ]:          0 :                                                           rLName, xAttrList, this);
     277                 :            :         }
     278                 :          0 :         break;
     279                 :            :         case XML_TOK_DATABASE_RANGE_SUBTOTAL_RULES :
     280                 :            :         {
     281                 :          0 :             bContainsSubTotal = true;
     282                 :            :             pContext = new ScXMLSubTotalRulesContext( GetScImport(), nPrefix,
     283         [ #  # ]:          0 :                                                           rLName, xAttrList, this);
     284                 :            :         }
     285                 :          0 :         break;
     286                 :            :     }
     287                 :            : 
     288         [ -  + ]:          9 :     if( !pContext )
     289         [ #  # ]:          0 :         pContext = new SvXMLImportContext( GetImport(), nPrefix, rLName );
     290                 :            : 
     291                 :          9 :     return pContext;
     292                 :            : }
     293                 :            : 
     294                 :         26 : ScDBData* ScXMLDatabaseRangeContext::ConvertToDBData(const OUString& rName)
     295                 :            : {
     296         [ -  + ]:         26 :     if (!mbValidRange)
     297                 :          0 :         return NULL;
     298                 :            : 
     299                 :         26 :     ScDocument* pDoc = GetScImport().GetDocument();
     300                 :            : 
     301                 :            :     SAL_WNODEPRECATED_DECLARATIONS_PUSH
     302                 :            :     ::std::auto_ptr<ScDBData> pData(
     303 [ +  - ][ +  - ]:         26 :         new ScDBData(rName, maRange.aStart.Tab(), maRange.aStart.Col(), maRange.aStart.Row(), maRange.aEnd.Col(), maRange.aEnd.Row(), bByRow, bHasHeader));
     304                 :            :     SAL_WNODEPRECATED_DECLARATIONS_POP
     305                 :            : 
     306                 :         26 :     pData->SetAutoFilter(bAutoFilter);
     307                 :         26 :     pData->SetKeepFmt(bKeepFormats);
     308                 :         26 :     pData->SetDoSize(bMoveCells);
     309                 :         26 :     pData->SetStripData(bStripData);
     310                 :            : 
     311         [ +  - ]:         26 :     pData->SetQueryParam(*mpQueryParam);
     312                 :            : 
     313         [ -  + ]:         26 :     if (bFilterConditionSourceRange)
     314                 :            :     {
     315                 :          0 :         ScRange aAdvSource;
     316                 :          0 :         ScUnoConversion::FillScRange(aAdvSource, aFilterConditionSourceRangeAddress);
     317         [ #  # ]:          0 :         pData->SetAdvancedQuerySource(&aAdvSource);
     318                 :            :     }
     319                 :            : 
     320                 :            :     {
     321         [ +  - ]:         26 :         ScImportParam aParam;
     322                 :         26 :         aParam.bNative = bNative;
     323         [ +  - ]:         26 :         aParam.aDBName = sDatabaseName.isEmpty() ? sConnectionResource : sDatabaseName;
     324                 :         26 :         aParam.aStatement = sSourceObject;
     325                 :         26 :         sheet::DataImportMode eMode = static_cast<sheet::DataImportMode>(nSourceType);
     326   [ +  -  -  -  :         26 :         switch (eMode)
                      - ]
     327                 :            :         {
     328                 :            :             case sheet::DataImportMode_NONE:
     329                 :         26 :                 aParam.bImport = false;
     330                 :         26 :                 break;
     331                 :            :             case sheet::DataImportMode_SQL:
     332                 :          0 :                 aParam.bImport = true;
     333                 :          0 :                 aParam.bSql    = true;
     334                 :          0 :                 break;
     335                 :            :             case sheet::DataImportMode_TABLE:
     336                 :          0 :                 aParam.bImport = true;
     337                 :          0 :                 aParam.bSql    = false;
     338                 :          0 :                 aParam.nType   = ScDbTable;
     339                 :          0 :                 break;
     340                 :            :             case sheet::DataImportMode_QUERY:
     341                 :          0 :                 aParam.bImport = true;
     342                 :          0 :                 aParam.bSql    = false;
     343                 :          0 :                 aParam.nType   = ScDbQuery;
     344                 :          0 :                 break;
     345                 :            :             default:
     346                 :            :                 OSL_FAIL("Unknown data import mode");
     347                 :          0 :                 aParam.bImport = false;
     348                 :            :         }
     349 [ +  - ][ +  - ]:         26 :         pData->SetImportParam(aParam);
     350                 :            :     }
     351                 :            : 
     352         [ -  + ]:         26 :     if (bContainsSort)
     353                 :            :     {
     354                 :          0 :         size_t nOldSize = aSortSequence.getLength();
     355         [ #  # ]:          0 :         aSortSequence.realloc(nOldSize + 1);
     356                 :          0 :         beans::PropertyValue aProperty;
     357         [ #  # ]:          0 :         aProperty.Name = OUString(RTL_CONSTASCII_USTRINGPARAM(SC_UNONAME_ORIENT));
     358                 :          0 :         table::TableOrientation eOrient = mpQueryParam->bByRow ?
     359         [ #  # ]:          0 :             table::TableOrientation_ROWS : table::TableOrientation_COLUMNS;
     360         [ #  # ]:          0 :         aProperty.Value <<= eOrient;
     361         [ #  # ]:          0 :         aSortSequence[nOldSize] = aProperty;
     362         [ #  # ]:          0 :         ScSortParam aParam;
     363         [ #  # ]:          0 :         ScSortDescriptor::FillSortParam(aParam, aSortSequence);
     364                 :            : 
     365         [ #  # ]:          0 :         SCCOLROW nStartPos = aParam.bByRow ? maRange.aStart.Col() : maRange.aStart.Row();
     366         [ #  # ]:          0 :         for (size_t i = 0; i < aParam.GetSortKeyCount(); ++i)
     367                 :            :         {
     368         [ #  # ]:          0 :             if (!aParam.maKeyState[i].bDoSort)
     369                 :          0 :                 break;
     370                 :          0 :             aParam.maKeyState[i].nField += nStartPos;
     371                 :            :         }
     372                 :            : 
     373 [ #  # ][ #  # ]:          0 :         pData->SetSortParam(aParam);
     374                 :            :     }
     375                 :            : 
     376         [ -  + ]:         26 :     if (bContainsSubTotal)
     377                 :            :     {
     378         [ #  # ]:          0 :         ScSubTotalParam aParam;
     379                 :          0 :         aParam.bIncludePattern = bSubTotalsBindFormatsToContent;
     380                 :          0 :         aParam.bUserDef = bSubTotalsEnabledUserList;
     381                 :          0 :         aParam.nUserIndex = nSubTotalsUserListIndex;
     382                 :          0 :         aParam.bPagebreak = bSubTotalsInsertPageBreaks;
     383                 :          0 :         aParam.bCaseSens = bSubTotalsIsCaseSensitive;
     384                 :          0 :         aParam.bDoSort = bSubTotalsSortGroups;
     385                 :          0 :         aParam.bAscending = bSubTotalsAscending;
     386                 :          0 :         aParam.bUserDef = bSubTotalsEnabledUserList;
     387                 :          0 :         aParam.nUserIndex = nSubTotalsUserListIndex;
     388                 :          0 :         std::vector <ScSubTotalRule>::iterator itr = aSubTotalRules.begin(), itrEnd = aSubTotalRules.end();
     389 [ #  # ][ #  # ]:          0 :         for (size_t nPos = 0; itr != itrEnd; ++itr, ++nPos)
     390                 :            :         {
     391         [ #  # ]:          0 :             if (nPos >= MAXSUBTOTAL)
     392                 :          0 :                 break;
     393                 :            : 
     394                 :          0 :             const uno::Sequence<sheet::SubTotalColumn>& rColumns = itr->aSubTotalColumns;
     395                 :          0 :             sal_Int32 nColCount = rColumns.getLength();
     396                 :          0 :             sal_Int16 nGroupColumn = itr->nSubTotalRuleGroupFieldNumber;
     397                 :          0 :             aParam.bGroupActive[nPos] = true;
     398                 :          0 :             aParam.nField[nPos] = static_cast<SCCOL>(nGroupColumn);
     399                 :            : 
     400                 :          0 :             SCCOL nCount = static_cast<SCCOL>(nColCount);
     401                 :          0 :             aParam.nSubTotals[nPos] = nCount;
     402         [ #  # ]:          0 :             if (nCount != 0)
     403                 :            :             {
     404         [ #  # ]:          0 :                 aParam.pSubTotals[nPos] = new SCCOL[nCount];
     405         [ #  # ]:          0 :                 aParam.pFunctions[nPos] = new ScSubTotalFunc[nCount];
     406                 :            : 
     407                 :          0 :                 const sheet::SubTotalColumn* pAry = rColumns.getConstArray();
     408         [ #  # ]:          0 :                 for (SCCOL i = 0; i < nCount; ++i)
     409                 :            :                 {
     410                 :          0 :                     aParam.pSubTotals[nPos][i] = static_cast<SCCOL>(pAry[i].Column);
     411                 :          0 :                     aParam.pFunctions[nPos][i] =
     412         [ #  # ]:          0 :                         ScDataUnoConversion::GeneralToSubTotal( pAry[i].Function );
     413                 :            :                 }
     414                 :            :             }
     415                 :            :             else
     416                 :            :             {
     417                 :          0 :                 aParam.pSubTotals[nPos] = NULL;
     418                 :          0 :                 aParam.pFunctions[nPos] = NULL;
     419                 :            :             }
     420                 :            :         }
     421                 :            : 
     422         [ #  # ]:          0 :         pData->SetSubTotalParam(aParam);
     423                 :            :     }
     424                 :            : 
     425 [ +  - ][ -  + ]:         26 :     if (pData->HasImportParam() && !pData->HasImportSelection())
         [ #  # ][ -  + ]
     426                 :            :     {
     427         [ #  # ]:          0 :         pData->SetRefreshDelay(nRefresh);
     428         [ #  # ]:          0 :         pData->SetRefreshHandler(pDoc->GetDBCollection()->GetRefreshHandler());
     429                 :          0 :         pData->SetRefreshControl(pDoc->GetRefreshTimerControlAddress());
     430                 :            :     }
     431                 :            : 
     432         [ +  - ]:         26 :     return pData.release();
     433                 :            : }
     434                 :            : 
     435                 :            : namespace {
     436                 :            : 
     437                 :         26 : bool setAutoFilterFlags(ScDocument& rDoc, const ScDBData& rData)
     438                 :            : {
     439         [ +  + ]:         26 :     if (!rData.HasAutoFilter())
     440                 :         17 :         return false;
     441                 :            : 
     442                 :            :     // Set autofilter flags so that the buttons get displayed.
     443                 :          9 :     ScRange aRange;
     444         [ +  - ]:          9 :     rData.GetArea(aRange);
     445                 :            :     rDoc.ApplyFlagsTab(
     446                 :         18 :         aRange.aStart.Col(), aRange.aStart.Row(), aRange.aEnd.Col(), aRange.aStart.Row(),
     447         [ +  - ]:         27 :         aRange.aStart.Tab(), SC_MF_AUTO);
     448                 :         26 :     return false;
     449                 :            : }
     450                 :            : 
     451                 :            : }
     452                 :            : 
     453                 :         26 : void ScXMLDatabaseRangeContext::EndElement()
     454                 :            : {
     455                 :         26 :     ScDocument* pDoc = GetScImport().GetDocument();
     456         [ -  + ]:         26 :     if (!pDoc)
     457                 :          0 :         return;
     458                 :            : 
     459         [ +  + ]:         26 :     if (meRangeType == ScDBCollection::SheetAnonymous)
     460                 :            :     {
     461         [ +  - ]:          3 :         OUString aName(RTL_CONSTASCII_USTRINGPARAM(STR_DB_LOCAL_NONAME));
     462                 :            :         SAL_WNODEPRECATED_DECLARATIONS_PUSH
     463         [ +  - ]:          3 :         ::std::auto_ptr<ScDBData> pData(ConvertToDBData(aName));
     464                 :            :         SAL_WNODEPRECATED_DECLARATIONS_POP
     465                 :            : 
     466         [ +  - ]:          3 :         if (pData.get())
     467                 :            :         {
     468                 :          3 :             ScRange aRange;
     469         [ +  - ]:          3 :             pData->GetArea(aRange);
     470                 :            : 
     471         [ +  - ]:          3 :             setAutoFilterFlags(*pDoc, *pData);
     472         [ +  - ]:          3 :             pDoc->SetAnonymousDBData(aRange.aStart.Tab(), pData.release());
     473                 :            :         }
     474         [ +  - ]:          3 :         return;
     475                 :            :     }
     476         [ -  + ]:         23 :     else if (meRangeType == ScDBCollection::GlobalAnonymous)
     477                 :            :     {
     478         [ #  # ]:          0 :         OUString aName(RTL_CONSTASCII_USTRINGPARAM(STR_DB_GLOBAL_NONAME));
     479                 :            :         SAL_WNODEPRECATED_DECLARATIONS_PUSH
     480         [ #  # ]:          0 :         ::std::auto_ptr<ScDBData> pData(ConvertToDBData(aName));
     481                 :            :         SAL_WNODEPRECATED_DECLARATIONS_POP
     482                 :            : 
     483         [ #  # ]:          0 :         if (pData.get())
     484                 :            :         {
     485                 :          0 :             ScRange aRange;
     486         [ #  # ]:          0 :             pData->GetArea(aRange);
     487                 :            : 
     488 [ #  # ][ #  # ]:          0 :             if (setAutoFilterFlags(*pDoc, *pData))
     489         [ #  # ]:          0 :                 pDoc->SetAnonymousDBData(aRange.aStart.Tab(), pData.release());
     490                 :            :             else
     491 [ #  # ][ #  # ]:          0 :                 pDoc->GetDBCollection()->getAnonDBs().insert(pData.release());
                 [ #  # ]
     492                 :            :         }
     493         [ #  # ]:          0 :         return;
     494                 :            :     }
     495         [ +  - ]:         23 :     else if (meRangeType == ScDBCollection::GlobalNamed)
     496                 :            :     {
     497                 :            :         SAL_WNODEPRECATED_DECLARATIONS_PUSH
     498         [ +  - ]:         23 :         ::std::auto_ptr<ScDBData> pData(ConvertToDBData(sDatabaseRangeName));
     499                 :            :         SAL_WNODEPRECATED_DECLARATIONS_POP
     500                 :            : 
     501         [ +  - ]:         23 :         if (pData.get())
     502                 :            :         {
     503         [ +  - ]:         23 :             setAutoFilterFlags(*pDoc, *pData);
     504 [ +  - ][ +  - ]:         23 :             pDoc->GetDBCollection()->getNamedDBs().insert(pData.release());
                 [ +  - ]
     505         [ +  - ]:         26 :         }
     506                 :            :     }
     507                 :            : }
     508                 :            : 
     509                 :          0 : ScXMLSourceSQLContext::ScXMLSourceSQLContext( ScXMLImport& rImport,
     510                 :            :                                       sal_uInt16 nPrfx,
     511                 :            :                                       const ::rtl::OUString& rLName,
     512                 :            :                                       const ::com::sun::star::uno::Reference<
     513                 :            :                                       ::com::sun::star::xml::sax::XAttributeList>& xAttrList,
     514                 :            :                                         ScXMLDatabaseRangeContext* pTempDatabaseRangeContext) :
     515                 :            :     SvXMLImportContext( rImport, nPrfx, rLName ),
     516                 :          0 :     pDatabaseRangeContext(pTempDatabaseRangeContext)
     517                 :            : {
     518 [ #  # ][ #  # ]:          0 :     sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
                 [ #  # ]
     519         [ #  # ]:          0 :     const SvXMLTokenMap& rAttrTokenMap = GetScImport().GetDatabaseRangeSourceSQLAttrTokenMap();
     520         [ #  # ]:          0 :     for( sal_Int16 i=0; i < nAttrCount; ++i )
     521                 :            :     {
     522 [ #  # ][ #  # ]:          0 :         const rtl::OUString& sAttrName(xAttrList->getNameByIndex( i ));
     523                 :          0 :         rtl::OUString aLocalName;
     524                 :          0 :         sal_uInt16 nPrefix = GetScImport().GetNamespaceMap().GetKeyByAttrName(
     525         [ #  # ]:          0 :                                             sAttrName, &aLocalName );
     526 [ #  # ][ #  # ]:          0 :         const rtl::OUString& sValue(xAttrList->getValueByIndex( i ));
     527                 :            : 
     528         [ #  # ]:          0 :         switch( rAttrTokenMap.Get( nPrefix, aLocalName ) )
           [ #  #  #  # ]
     529                 :            :         {
     530                 :            :             case XML_TOK_SOURCE_SQL_ATTR_DATABASE_NAME :
     531                 :            :             {
     532                 :          0 :                 sDBName = sValue;
     533                 :            :             }
     534                 :          0 :             break;
     535                 :            :             case XML_TOK_SOURCE_SQL_ATTR_SQL_STATEMENT :
     536                 :            :             {
     537                 :          0 :                 pDatabaseRangeContext->SetSourceObject(sValue);
     538                 :            :             }
     539                 :          0 :             break;
     540                 :            :             case XML_TOK_SOURCE_SQL_ATTR_PARSE_SQL_STATEMENT :
     541                 :            :             {
     542         [ #  # ]:          0 :                 pDatabaseRangeContext->SetNative(IsXMLToken(sValue, XML_TRUE));
     543                 :            :             }
     544                 :          0 :             break;
     545                 :            :         }
     546                 :          0 :     }
     547                 :          0 :     pDatabaseRangeContext->SetSourceType(sheet::DataImportMode_SQL);
     548                 :          0 : }
     549                 :            : 
     550                 :          0 : ScXMLSourceSQLContext::~ScXMLSourceSQLContext()
     551                 :            : {
     552         [ #  # ]:          0 : }
     553                 :            : 
     554                 :          0 : SvXMLImportContext *ScXMLSourceSQLContext::CreateChildContext( sal_uInt16 nPrefix,
     555                 :            :                                             const ::rtl::OUString& rLName,
     556                 :            :                                             const ::com::sun::star::uno::Reference<
     557                 :            :                                           ::com::sun::star::xml::sax::XAttributeList>& xAttrList )
     558                 :            : {
     559                 :          0 :     SvXMLImportContext *pContext = 0;
     560                 :            : 
     561         [ #  # ]:          0 :     if ( nPrefix == XML_NAMESPACE_FORM )
     562                 :            :     {
     563 [ #  # ][ #  # ]:          0 :         if (IsXMLToken(rLName, XML_CONNECTION_RESOURCE) && sDBName.isEmpty())
                 [ #  # ]
     564                 :            :         {
     565                 :            :             pContext = new ScXMLConResContext( GetScImport(), nPrefix,
     566         [ #  # ]:          0 :                                                           rLName, xAttrList, pDatabaseRangeContext);
     567                 :            :         }
     568                 :            :     }
     569                 :            : 
     570         [ #  # ]:          0 :     if( !pContext )
     571         [ #  # ]:          0 :         pContext = new SvXMLImportContext( GetImport(), nPrefix, rLName );
     572                 :            : 
     573                 :          0 :     return pContext;
     574                 :            : }
     575                 :            : 
     576                 :          0 : void ScXMLSourceSQLContext::EndElement()
     577                 :            : {
     578         [ #  # ]:          0 :     if (!sDBName.isEmpty())
     579                 :          0 :         pDatabaseRangeContext->SetDatabaseName(sDBName);
     580                 :          0 : }
     581                 :            : 
     582                 :          0 : ScXMLSourceTableContext::ScXMLSourceTableContext( ScXMLImport& rImport,
     583                 :            :                                       sal_uInt16 nPrfx,
     584                 :            :                                       const ::rtl::OUString& rLName,
     585                 :            :                                       const ::com::sun::star::uno::Reference<
     586                 :            :                                       ::com::sun::star::xml::sax::XAttributeList>& xAttrList,
     587                 :            :                                         ScXMLDatabaseRangeContext* pTempDatabaseRangeContext) :
     588                 :            :     SvXMLImportContext( rImport, nPrfx, rLName ),
     589                 :          0 :     pDatabaseRangeContext(pTempDatabaseRangeContext)
     590                 :            : {
     591 [ #  # ][ #  # ]:          0 :     sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
                 [ #  # ]
     592         [ #  # ]:          0 :     const SvXMLTokenMap& rAttrTokenMap = GetScImport().GetDatabaseRangeSourceTableAttrTokenMap();
     593         [ #  # ]:          0 :     for( sal_Int16 i=0; i < nAttrCount; ++i )
     594                 :            :     {
     595 [ #  # ][ #  # ]:          0 :         const rtl::OUString& sAttrName(xAttrList->getNameByIndex( i ));
     596                 :          0 :         rtl::OUString aLocalName;
     597                 :          0 :         sal_uInt16 nPrefix = GetScImport().GetNamespaceMap().GetKeyByAttrName(
     598         [ #  # ]:          0 :                                             sAttrName, &aLocalName );
     599 [ #  # ][ #  # ]:          0 :         const rtl::OUString& sValue(xAttrList->getValueByIndex( i ));
     600                 :            : 
     601         [ #  # ]:          0 :         switch( rAttrTokenMap.Get( nPrefix, aLocalName ) )
              [ #  #  # ]
     602                 :            :         {
     603                 :            :             case XML_TOK_SOURCE_TABLE_ATTR_DATABASE_NAME :
     604                 :            :             {
     605                 :          0 :                 sDBName = sValue;
     606                 :            :             }
     607                 :          0 :             break;
     608                 :            :             case XML_TOK_SOURCE_TABLE_ATTR_TABLE_NAME :
     609                 :            :             {
     610                 :          0 :                 pDatabaseRangeContext->SetSourceObject(sValue);
     611                 :            :             }
     612                 :          0 :             break;
     613                 :            :         }
     614                 :          0 :     }
     615                 :          0 :     pDatabaseRangeContext->SetSourceType(sheet::DataImportMode_TABLE);
     616                 :          0 : }
     617                 :            : 
     618                 :          0 : ScXMLSourceTableContext::~ScXMLSourceTableContext()
     619                 :            : {
     620         [ #  # ]:          0 : }
     621                 :            : 
     622                 :          0 : SvXMLImportContext *ScXMLSourceTableContext::CreateChildContext( sal_uInt16 nPrefix,
     623                 :            :                                             const ::rtl::OUString& rLName,
     624                 :            :                                             const ::com::sun::star::uno::Reference<
     625                 :            :                                           ::com::sun::star::xml::sax::XAttributeList>& xAttrList )
     626                 :            : {
     627                 :          0 :     SvXMLImportContext *pContext = 0;
     628                 :            : 
     629         [ #  # ]:          0 :     if ( nPrefix == XML_NAMESPACE_FORM )
     630                 :            :     {
     631 [ #  # ][ #  # ]:          0 :         if (IsXMLToken(rLName, XML_CONNECTION_RESOURCE) && sDBName.isEmpty())
                 [ #  # ]
     632                 :            :         {
     633                 :            :             pContext = new ScXMLConResContext( GetScImport(), nPrefix,
     634         [ #  # ]:          0 :                                                           rLName, xAttrList, pDatabaseRangeContext);
     635                 :            :         }
     636                 :            :     }
     637                 :            : 
     638         [ #  # ]:          0 :     if( !pContext )
     639         [ #  # ]:          0 :         pContext = new SvXMLImportContext( GetImport(), nPrefix, rLName );
     640                 :            : 
     641                 :          0 :     return pContext;
     642                 :            : }
     643                 :            : 
     644                 :          0 : void ScXMLSourceTableContext::EndElement()
     645                 :            : {
     646         [ #  # ]:          0 :     if (!sDBName.isEmpty())
     647                 :          0 :         pDatabaseRangeContext->SetDatabaseName(sDBName);
     648                 :          0 : }
     649                 :            : 
     650                 :          0 : ScXMLSourceQueryContext::ScXMLSourceQueryContext( ScXMLImport& rImport,
     651                 :            :                                       sal_uInt16 nPrfx,
     652                 :            :                                       const ::rtl::OUString& rLName,
     653                 :            :                                       const ::com::sun::star::uno::Reference<
     654                 :            :                                       ::com::sun::star::xml::sax::XAttributeList>& xAttrList,
     655                 :            :                                         ScXMLDatabaseRangeContext* pTempDatabaseRangeContext) :
     656                 :            :     SvXMLImportContext( rImport, nPrfx, rLName ),
     657                 :          0 :     pDatabaseRangeContext(pTempDatabaseRangeContext)
     658                 :            : {
     659 [ #  # ][ #  # ]:          0 :     sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
                 [ #  # ]
     660         [ #  # ]:          0 :     const SvXMLTokenMap& rAttrTokenMap = GetScImport().GetDatabaseRangeSourceQueryAttrTokenMap();
     661         [ #  # ]:          0 :     for( sal_Int16 i=0; i < nAttrCount; ++i )
     662                 :            :     {
     663 [ #  # ][ #  # ]:          0 :         const rtl::OUString& sAttrName(xAttrList->getNameByIndex( i ));
     664                 :          0 :         rtl::OUString aLocalName;
     665                 :          0 :         sal_uInt16 nPrefix = GetScImport().GetNamespaceMap().GetKeyByAttrName(
     666         [ #  # ]:          0 :                                             sAttrName, &aLocalName );
     667 [ #  # ][ #  # ]:          0 :         const rtl::OUString& sValue(xAttrList->getValueByIndex( i ));
     668                 :            : 
     669         [ #  # ]:          0 :         switch( rAttrTokenMap.Get( nPrefix, aLocalName ) )
              [ #  #  # ]
     670                 :            :         {
     671                 :            :             case XML_TOK_SOURCE_QUERY_ATTR_DATABASE_NAME :
     672                 :            :             {
     673                 :          0 :                 sDBName = sValue;
     674                 :            :             }
     675                 :          0 :             break;
     676                 :            :             case XML_TOK_SOURCE_QUERY_ATTR_QUERY_NAME :
     677                 :            :             {
     678                 :          0 :                 pDatabaseRangeContext->SetSourceObject(sValue);
     679                 :            :             }
     680                 :          0 :             break;
     681                 :            :         }
     682                 :          0 :     }
     683                 :          0 :     pDatabaseRangeContext->SetSourceType(sheet::DataImportMode_QUERY);
     684                 :          0 : }
     685                 :            : 
     686                 :          0 : ScXMLSourceQueryContext::~ScXMLSourceQueryContext()
     687                 :            : {
     688         [ #  # ]:          0 : }
     689                 :            : 
     690                 :          0 : SvXMLImportContext *ScXMLSourceQueryContext::CreateChildContext( sal_uInt16 nPrefix,
     691                 :            :                                             const ::rtl::OUString& rLName,
     692                 :            :                                             const ::com::sun::star::uno::Reference<
     693                 :            :                                           ::com::sun::star::xml::sax::XAttributeList>& xAttrList )
     694                 :            : {
     695                 :          0 :     SvXMLImportContext *pContext = 0;
     696                 :            : 
     697         [ #  # ]:          0 :     if ( nPrefix == XML_NAMESPACE_FORM )
     698                 :            :     {
     699 [ #  # ][ #  # ]:          0 :         if (IsXMLToken(rLName, XML_CONNECTION_RESOURCE) && sDBName.isEmpty())
                 [ #  # ]
     700                 :            :         {
     701                 :            :             pContext = new ScXMLConResContext( GetScImport(), nPrefix,
     702         [ #  # ]:          0 :                                                           rLName, xAttrList, pDatabaseRangeContext);
     703                 :            :         }
     704                 :            :     }
     705                 :            : 
     706         [ #  # ]:          0 :     if( !pContext )
     707         [ #  # ]:          0 :         pContext = new SvXMLImportContext( GetImport(), nPrefix, rLName );
     708                 :            : 
     709                 :          0 :     return pContext;
     710                 :            : }
     711                 :            : 
     712                 :          0 : void ScXMLSourceQueryContext::EndElement()
     713                 :            : {
     714         [ #  # ]:          0 :     if (!sDBName.isEmpty())
     715                 :          0 :         pDatabaseRangeContext->SetDatabaseName(sDBName);
     716                 :          0 : }
     717                 :            : 
     718                 :          0 : ScXMLConResContext::ScXMLConResContext( ScXMLImport& rImport,
     719                 :            :                                       sal_uInt16 nPrfx,
     720                 :            :                                       const ::rtl::OUString& rLName,
     721                 :            :                                       const ::com::sun::star::uno::Reference<
     722                 :            :                                       ::com::sun::star::xml::sax::XAttributeList>& xAttrList,
     723                 :            :                                         ScXMLDatabaseRangeContext* pTempDatabaseRangeContext) :
     724                 :            :     SvXMLImportContext( rImport, nPrfx, rLName ),
     725                 :          0 :     pDatabaseRangeContext( pTempDatabaseRangeContext )
     726                 :            : {
     727                 :          0 :     rtl::OUString sConRes;
     728 [ #  # ][ #  # ]:          0 :     sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
                 [ #  # ]
     729         [ #  # ]:          0 :     for( sal_Int16 i=0; i < nAttrCount; i++ )
     730                 :            :     {
     731 [ #  # ][ #  # ]:          0 :         rtl::OUString sAttrName = xAttrList->getNameByIndex( i );
     732                 :          0 :         rtl::OUString aLocalName;
     733                 :          0 :         sal_uInt16 nPrefix = GetScImport().GetNamespaceMap().GetKeyByAttrName(
     734         [ #  # ]:          0 :                                             sAttrName, &aLocalName );
     735 [ #  # ][ #  # ]:          0 :         rtl::OUString sValue = xAttrList->getValueByIndex( i );
     736                 :            : 
     737         [ #  # ]:          0 :         if (nPrefix == XML_NAMESPACE_XLINK)
     738                 :            :         {
     739 [ #  # ][ #  # ]:          0 :             if (IsXMLToken(aLocalName, XML_HREF))
     740                 :          0 :                 sConRes = sValue;
     741                 :            :         }
     742                 :          0 :     }
     743         [ #  # ]:          0 :     if (!sConRes.isEmpty())
     744                 :          0 :         pDatabaseRangeContext->SetConnectionResource(sConRes);
     745                 :          0 : }
     746                 :            : 
     747                 :          0 : ScXMLConResContext::~ScXMLConResContext()
     748                 :            : {
     749         [ #  # ]:          0 : }
     750                 :            : 
     751                 :          0 : SvXMLImportContext *ScXMLConResContext::CreateChildContext( sal_uInt16 nPrefix,
     752                 :            :                                             const ::rtl::OUString& rLName,
     753                 :            :                                             const ::com::sun::star::uno::Reference<
     754                 :            :                                         ::com::sun::star::xml::sax::XAttributeList>& /* xAttrList */ )
     755                 :            : {
     756                 :          0 :     SvXMLImportContext *pContext = 0;
     757                 :            : 
     758         [ #  # ]:          0 :     if( !pContext )
     759         [ #  # ]:          0 :         pContext = new SvXMLImportContext( GetImport(), nPrefix, rLName );
     760                 :            : 
     761                 :          0 :     return pContext;
     762                 :            : }
     763                 :            : 
     764                 :          0 : void ScXMLConResContext::EndElement()
     765                 :            : {
     766                 :          0 : }
     767                 :            : 
     768                 :          0 : ScXMLSubTotalRulesContext::ScXMLSubTotalRulesContext( ScXMLImport& rImport,
     769                 :            :                                       sal_uInt16 nPrfx,
     770                 :            :                                       const ::rtl::OUString& rLName,
     771                 :            :                                       const ::com::sun::star::uno::Reference<
     772                 :            :                                       ::com::sun::star::xml::sax::XAttributeList>& xAttrList,
     773                 :            :                                         ScXMLDatabaseRangeContext* pTempDatabaseRangeContext) :
     774                 :            :     SvXMLImportContext( rImport, nPrfx, rLName ),
     775                 :          0 :     pDatabaseRangeContext(pTempDatabaseRangeContext)
     776                 :            : {
     777 [ #  # ][ #  # ]:          0 :     sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
                 [ #  # ]
     778         [ #  # ]:          0 :     const SvXMLTokenMap& rAttrTokenMap = GetScImport().GetDatabaseRangeSubTotalRulesAttrTokenMap();
     779         [ #  # ]:          0 :     for( sal_Int16 i=0; i < nAttrCount; ++i )
     780                 :            :     {
     781 [ #  # ][ #  # ]:          0 :         const rtl::OUString& sAttrName(xAttrList->getNameByIndex( i ));
     782                 :          0 :         rtl::OUString aLocalName;
     783                 :          0 :         sal_uInt16 nPrefix = GetScImport().GetNamespaceMap().GetKeyByAttrName(
     784         [ #  # ]:          0 :                                             sAttrName, &aLocalName );
     785 [ #  # ][ #  # ]:          0 :         const rtl::OUString& sValue(xAttrList->getValueByIndex( i ));
     786                 :            : 
     787         [ #  # ]:          0 :         switch( rAttrTokenMap.Get( nPrefix, aLocalName ) )
           [ #  #  #  # ]
     788                 :            :         {
     789                 :            :             case XML_TOK_SUBTOTAL_RULES_ATTR_BIND_STYLES_TO_CONTENT :
     790                 :            :             {
     791         [ #  # ]:          0 :                 pDatabaseRangeContext->SetSubTotalsBindFormatsToContent(IsXMLToken(sValue, XML_TRUE));
     792                 :            :             }
     793                 :          0 :             break;
     794                 :            :             case XML_TOK_SUBTOTAL_RULES_ATTR_CASE_SENSITIVE :
     795                 :            :             {
     796         [ #  # ]:          0 :                 pDatabaseRangeContext->SetSubTotalsIsCaseSensitive(IsXMLToken(sValue, XML_TRUE));
     797                 :            :             }
     798                 :          0 :             break;
     799                 :            :             case XML_TOK_SUBTOTAL_RULES_ATTR_PAGE_BREAKS_ON_GROUP_CHANGE :
     800                 :            :             {
     801         [ #  # ]:          0 :                 pDatabaseRangeContext->SetSubTotalsInsertPageBreaks(IsXMLToken(sValue, XML_TRUE));
     802                 :            :             }
     803                 :          0 :             break;
     804                 :            :         }
     805                 :          0 :     }
     806                 :          0 : }
     807                 :            : 
     808                 :          0 : ScXMLSubTotalRulesContext::~ScXMLSubTotalRulesContext()
     809                 :            : {
     810         [ #  # ]:          0 : }
     811                 :            : 
     812                 :          0 : SvXMLImportContext *ScXMLSubTotalRulesContext::CreateChildContext( sal_uInt16 nPrefix,
     813                 :            :                                             const ::rtl::OUString& rLName,
     814                 :            :                                             const ::com::sun::star::uno::Reference<
     815                 :            :                                           ::com::sun::star::xml::sax::XAttributeList>& xAttrList )
     816                 :            : {
     817                 :          0 :     SvXMLImportContext *pContext = 0;
     818                 :            : 
     819                 :          0 :     const SvXMLTokenMap& rTokenMap = GetScImport().GetDatabaseRangeSubTotalRulesElemTokenMap();
     820      [ #  #  # ]:          0 :     switch( rTokenMap.Get( nPrefix, rLName ) )
     821                 :            :     {
     822                 :            :         case XML_TOK_SUBTOTAL_RULES_SORT_GROUPS :
     823                 :            :         {
     824                 :            :             pContext = new ScXMLSortGroupsContext( GetScImport(), nPrefix,
     825         [ #  # ]:          0 :                                                           rLName, xAttrList, pDatabaseRangeContext);
     826                 :            :         }
     827                 :          0 :         break;
     828                 :            :         case XML_TOK_SUBTOTAL_RULES_SUBTOTAL_RULE :
     829                 :            :         {
     830                 :            :             pContext = new ScXMLSubTotalRuleContext( GetScImport(), nPrefix,
     831         [ #  # ]:          0 :                                                           rLName, xAttrList, pDatabaseRangeContext);
     832                 :            :         }
     833                 :          0 :         break;
     834                 :            :     }
     835                 :            : 
     836         [ #  # ]:          0 :     if( !pContext )
     837         [ #  # ]:          0 :         pContext = new SvXMLImportContext( GetImport(), nPrefix, rLName );
     838                 :            : 
     839                 :          0 :     return pContext;
     840                 :            : }
     841                 :            : 
     842                 :          0 : void ScXMLSubTotalRulesContext::EndElement()
     843                 :            : {
     844                 :          0 : }
     845                 :            : 
     846                 :          0 : ScXMLSortGroupsContext::ScXMLSortGroupsContext( ScXMLImport& rImport,
     847                 :            :                                       sal_uInt16 nPrfx,
     848                 :            :                                       const ::rtl::OUString& rLName,
     849                 :            :                                       const ::com::sun::star::uno::Reference<
     850                 :            :                                       ::com::sun::star::xml::sax::XAttributeList>& xAttrList,
     851                 :            :                                         ScXMLDatabaseRangeContext* pTempDatabaseRangeContext) :
     852                 :            :     SvXMLImportContext( rImport, nPrfx, rLName ),
     853                 :          0 :     pDatabaseRangeContext(pTempDatabaseRangeContext)
     854                 :            : {
     855                 :          0 :     pDatabaseRangeContext->SetSubTotalsSortGroups(true);
     856 [ #  # ][ #  # ]:          0 :     sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
                 [ #  # ]
     857         [ #  # ]:          0 :     const SvXMLTokenMap& rAttrTokenMap = GetScImport().GetSubTotalRulesSortGroupsAttrTokenMap();
     858         [ #  # ]:          0 :     for( sal_Int16 i=0; i < nAttrCount; ++i )
     859                 :            :     {
     860 [ #  # ][ #  # ]:          0 :         const rtl::OUString& sAttrName(xAttrList->getNameByIndex( i ));
     861                 :          0 :         rtl::OUString aLocalName;
     862                 :          0 :         sal_uInt16 nPrefix = GetScImport().GetNamespaceMap().GetKeyByAttrName(
     863         [ #  # ]:          0 :                                             sAttrName, &aLocalName );
     864 [ #  # ][ #  # ]:          0 :         const rtl::OUString& sValue(xAttrList->getValueByIndex( i ));
     865                 :            : 
     866         [ #  # ]:          0 :         switch( rAttrTokenMap.Get( nPrefix, aLocalName ) )
              [ #  #  # ]
     867                 :            :         {
     868                 :            :             case XML_TOK_SORT_GROUPS_ATTR_DATA_TYPE :
     869                 :            :             {
     870         [ #  # ]:          0 :                 if (sValue.getLength() > 8)
     871                 :            :                 {
     872                 :          0 :                     rtl::OUString sTemp = sValue.copy(0, 8);
     873         [ #  # ]:          0 :                     if (sTemp.compareToAscii(SC_USERLIST) == 0)
     874                 :            :                     {
     875                 :          0 :                         pDatabaseRangeContext->SetSubTotalsEnabledUserList(true);
     876                 :          0 :                         sTemp = sValue.copy(8);
     877                 :          0 :                         pDatabaseRangeContext->SetSubTotalsUserListIndex(static_cast<sal_Int16>(sTemp.toInt32()));
     878                 :            :                     }
     879                 :            :                     else
     880                 :            :                     {
     881                 :            :                         //if (IsXMLToken(sValue, XML_AUTOMATIC))
     882                 :            :                             //aSortField.FieldType = util::SortFieldType_AUTOMATIC;
     883                 :            :                             // is not supported by StarOffice
     884                 :          0 :                     }
     885                 :            :                 }
     886                 :            :                 else
     887                 :            :                 {
     888                 :            :                     //if (IsXMLToken(sValue, XML_TEXT))
     889                 :            :                         //aSortField.FieldType = util::SortFieldType_ALPHANUMERIC;
     890                 :            :                         // is not supported by StarOffice
     891                 :            :                     //else if (IsXMLToken(sValue, XML_NUMBER))
     892                 :            :                         //aSortField.FieldType = util::SortFieldType_NUMERIC;
     893                 :            :                         // is not supported by StarOffice
     894                 :            :                 }
     895                 :            :             }
     896                 :          0 :             break;
     897                 :            :             case XML_TOK_SORT_GROUPS_ATTR_ORDER :
     898                 :            :             {
     899 [ #  # ][ #  # ]:          0 :                 if (IsXMLToken(sValue, XML_ASCENDING))
     900                 :          0 :                     pDatabaseRangeContext->SetSubTotalsAscending(true);
     901                 :            :                 else
     902                 :          0 :                     pDatabaseRangeContext->SetSubTotalsAscending(false);
     903                 :            :             }
     904                 :          0 :             break;
     905                 :            :         }
     906                 :          0 :     }
     907                 :          0 : }
     908                 :            : 
     909                 :          0 : ScXMLSortGroupsContext::~ScXMLSortGroupsContext()
     910                 :            : {
     911         [ #  # ]:          0 : }
     912                 :            : 
     913                 :          0 : SvXMLImportContext *ScXMLSortGroupsContext::CreateChildContext( sal_uInt16 nPrefix,
     914                 :            :                                             const ::rtl::OUString& rLName,
     915                 :            :                                             const ::com::sun::star::uno::Reference<
     916                 :            :                                         ::com::sun::star::xml::sax::XAttributeList>& /* xAttrList */ )
     917                 :            : {
     918                 :          0 :     SvXMLImportContext *pContext = 0;
     919                 :            : 
     920         [ #  # ]:          0 :     if( !pContext )
     921         [ #  # ]:          0 :         pContext = new SvXMLImportContext( GetImport(), nPrefix, rLName );
     922                 :            : 
     923                 :          0 :     return pContext;
     924                 :            : }
     925                 :            : 
     926                 :          0 : void ScXMLSortGroupsContext::EndElement()
     927                 :            : {
     928                 :          0 : }
     929                 :            : 
     930                 :          0 : ScXMLSubTotalRuleContext::ScXMLSubTotalRuleContext( ScXMLImport& rImport,
     931                 :            :                                       sal_uInt16 nPrfx,
     932                 :            :                                       const ::rtl::OUString& rLName,
     933                 :            :                                       const ::com::sun::star::uno::Reference<
     934                 :            :                                       ::com::sun::star::xml::sax::XAttributeList>& xAttrList,
     935                 :            :                                         ScXMLDatabaseRangeContext* pTempDatabaseRangeContext) :
     936                 :            :     SvXMLImportContext( rImport, nPrfx, rLName ),
     937         [ #  # ]:          0 :     pDatabaseRangeContext(pTempDatabaseRangeContext)
     938                 :            : {
     939 [ #  # ][ #  # ]:          0 :     sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
                 [ #  # ]
     940         [ #  # ]:          0 :     const SvXMLTokenMap& rAttrTokenMap = GetScImport().GetSubTotalRulesSubTotalRuleAttrTokenMap();
     941         [ #  # ]:          0 :     for( sal_Int16 i=0; i < nAttrCount; ++i )
     942                 :            :     {
     943 [ #  # ][ #  # ]:          0 :         const rtl::OUString& sAttrName(xAttrList->getNameByIndex( i ));
     944                 :          0 :         rtl::OUString aLocalName;
     945                 :          0 :         sal_uInt16 nPrefix = GetScImport().GetNamespaceMap().GetKeyByAttrName(
     946         [ #  # ]:          0 :                                             sAttrName, &aLocalName );
     947 [ #  # ][ #  # ]:          0 :         const rtl::OUString& sValue(xAttrList->getValueByIndex( i ));
     948                 :            : 
     949 [ #  # ][ #  # ]:          0 :         switch( rAttrTokenMap.Get( nPrefix, aLocalName ) )
     950                 :            :         {
     951                 :            :             case XML_TOK_SUBTOTAL_RULE_ATTR_GROUP_BY_FIELD_NUMBER :
     952                 :            :             {
     953                 :          0 :                 aSubTotalRule.nSubTotalRuleGroupFieldNumber = static_cast<sal_Int16>(sValue.toInt32());
     954                 :            :             }
     955                 :          0 :             break;
     956                 :            :         }
     957                 :          0 :     }
     958                 :          0 : }
     959                 :            : 
     960         [ #  # ]:          0 : ScXMLSubTotalRuleContext::~ScXMLSubTotalRuleContext()
     961                 :            : {
     962         [ #  # ]:          0 : }
     963                 :            : 
     964                 :          0 : SvXMLImportContext *ScXMLSubTotalRuleContext::CreateChildContext( sal_uInt16 nPrefix,
     965                 :            :                                             const ::rtl::OUString& rLName,
     966                 :            :                                             const ::com::sun::star::uno::Reference<
     967                 :            :                                           ::com::sun::star::xml::sax::XAttributeList>& xAttrList )
     968                 :            : {
     969                 :          0 :     SvXMLImportContext *pContext = 0;
     970                 :            : 
     971                 :          0 :     const SvXMLTokenMap& rTokenMap = GetScImport().GetSubTotalRulesSubTotalRuleElemTokenMap();
     972         [ #  # ]:          0 :     switch( rTokenMap.Get( nPrefix, rLName ) )
     973                 :            :     {
     974                 :            :         case XML_TOK_SUBTOTAL_RULE_SUBTOTAL_FIELD :
     975                 :            :         {
     976                 :            :             pContext = new ScXMLSubTotalFieldContext( GetScImport(), nPrefix,
     977         [ #  # ]:          0 :                                                           rLName, xAttrList, this);
     978                 :            :         }
     979                 :          0 :         break;
     980                 :            :     }
     981                 :            : 
     982         [ #  # ]:          0 :     if( !pContext )
     983         [ #  # ]:          0 :         pContext = new SvXMLImportContext( GetImport(), nPrefix, rLName );
     984                 :            : 
     985                 :          0 :     return pContext;
     986                 :            : }
     987                 :            : 
     988                 :          0 : void ScXMLSubTotalRuleContext::EndElement()
     989                 :            : {
     990         [ #  # ]:          0 :     if (pDatabaseRangeContext)
     991                 :          0 :         pDatabaseRangeContext->AddSubTotalRule(aSubTotalRule);
     992                 :          0 : }
     993                 :            : 
     994                 :          0 : ScXMLSubTotalFieldContext::ScXMLSubTotalFieldContext( ScXMLImport& rImport,
     995                 :            :                                       sal_uInt16 nPrfx,
     996                 :            :                                       const ::rtl::OUString& rLName,
     997                 :            :                                       const ::com::sun::star::uno::Reference<
     998                 :            :                                       ::com::sun::star::xml::sax::XAttributeList>& xAttrList,
     999                 :            :                                         ScXMLSubTotalRuleContext* pTempSubTotalRuleContext) :
    1000                 :            :     SvXMLImportContext( rImport, nPrfx, rLName ),
    1001                 :          0 :     pSubTotalRuleContext(pTempSubTotalRuleContext)
    1002                 :            : {
    1003 [ #  # ][ #  # ]:          0 :     sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
                 [ #  # ]
    1004         [ #  # ]:          0 :     const SvXMLTokenMap& rAttrTokenMap = GetScImport().GetSubTotalRuleSubTotalFieldAttrTokenMap();
    1005         [ #  # ]:          0 :     for( sal_Int16 i=0; i < nAttrCount; ++i )
    1006                 :            :     {
    1007 [ #  # ][ #  # ]:          0 :         const rtl::OUString& sAttrName(xAttrList->getNameByIndex( i ));
    1008                 :          0 :         rtl::OUString aLocalName;
    1009                 :          0 :         sal_uInt16 nPrefix = GetScImport().GetNamespaceMap().GetKeyByAttrName(
    1010         [ #  # ]:          0 :                                             sAttrName, &aLocalName );
    1011 [ #  # ][ #  # ]:          0 :         const rtl::OUString& sValue(xAttrList->getValueByIndex( i ));
    1012                 :            : 
    1013         [ #  # ]:          0 :         switch( rAttrTokenMap.Get( nPrefix, aLocalName ) )
              [ #  #  # ]
    1014                 :            :         {
    1015                 :            :             case XML_TOK_SUBTOTAL_FIELD_ATTR_FIELD_NUMBER :
    1016                 :            :             {
    1017                 :          0 :                 sFieldNumber = sValue;
    1018                 :            :             }
    1019                 :          0 :             break;
    1020                 :            :             case XML_TOK_SUBTOTAL_FIELD_ATTR_FUNCTION :
    1021                 :            :             {
    1022                 :          0 :                 sFunction = sValue;
    1023                 :            :             }
    1024                 :          0 :             break;
    1025                 :            :         }
    1026                 :          0 :     }
    1027                 :          0 : }
    1028                 :            : 
    1029                 :          0 : ScXMLSubTotalFieldContext::~ScXMLSubTotalFieldContext()
    1030                 :            : {
    1031         [ #  # ]:          0 : }
    1032                 :            : 
    1033                 :          0 : SvXMLImportContext *ScXMLSubTotalFieldContext::CreateChildContext( sal_uInt16 nPrefix,
    1034                 :            :                                             const ::rtl::OUString& rLName,
    1035                 :            :                                             const ::com::sun::star::uno::Reference<
    1036                 :            :                                         ::com::sun::star::xml::sax::XAttributeList>& /* xAttrList */ )
    1037                 :            : {
    1038                 :          0 :     SvXMLImportContext *pContext = 0;
    1039                 :            : 
    1040         [ #  # ]:          0 :     if( !pContext )
    1041         [ #  # ]:          0 :         pContext = new SvXMLImportContext( GetImport(), nPrefix, rLName );
    1042                 :            : 
    1043                 :          0 :     return pContext;
    1044                 :            : }
    1045                 :            : 
    1046                 :          0 : void ScXMLSubTotalFieldContext::EndElement()
    1047                 :            : {
    1048                 :          0 :     sheet::SubTotalColumn aSubTotalColumn;
    1049                 :          0 :     aSubTotalColumn.Column = sFieldNumber.toInt32();
    1050         [ #  # ]:          0 :     aSubTotalColumn.Function = ScXMLConverter::GetFunctionFromString( sFunction );
    1051         [ #  # ]:          0 :     pSubTotalRuleContext->AddSubTotalColumn(aSubTotalColumn);
    1052                 :          0 : }
    1053                 :            : 
    1054                 :            : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10