LCOV - code coverage report
Current view: top level - usr/local/src/libreoffice/sc/source/filter/xml - xmldrani.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 116 472 24.6 %
Date: 2013-07-09 Functions: 14 54 25.9 %
Legend: Lines: hit not hit

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

Generated by: LCOV version 1.10