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 "xmldpimp.hxx"
30 : : #include "xmlimprt.hxx"
31 : : #include "xmlfilti.hxx"
32 : : #include "xmlsorti.hxx"
33 : : #include "document.hxx"
34 : : #include "docuno.hxx"
35 : : #include "dpshttab.hxx"
36 : : #include "dpsdbtab.hxx"
37 : : #include "attrib.hxx"
38 : : #include "XMLConverter.hxx"
39 : : #include "dpgroup.hxx"
40 : : #include "dpdimsave.hxx"
41 : : #include "rangeutl.hxx"
42 : : #include "dpoutputgeometry.hxx"
43 : :
44 : : #include <xmloff/xmltkmap.hxx>
45 : : #include <xmloff/nmspmap.hxx>
46 : : #include <xmloff/xmltoken.hxx>
47 : : #include <xmloff/xmlnmspe.hxx>
48 : : #include <xmloff/xmluconv.hxx>
49 : : #include <sax/tools/converter.hxx>
50 : :
51 : : #include <com/sun/star/sheet/DataPilotFieldReferenceType.hpp>
52 : : #include <com/sun/star/sheet/DataPilotFieldReferenceItemType.hpp>
53 : : #include <com/sun/star/sheet/DataPilotFieldShowItemsMode.hpp>
54 : : #include <com/sun/star/sheet/DataPilotFieldSortMode.hpp>
55 : : #include <com/sun/star/sheet/DataPilotFieldLayoutMode.hpp>
56 : : #include <com/sun/star/sheet/DataPilotFieldGroupBy.hpp>
57 : :
58 : : using namespace com::sun::star;
59 : : using namespace xmloff::token;
60 : : using ::com::sun::star::uno::Reference;
61 : : using ::com::sun::star::xml::sax::XAttributeList;
62 : : using ::rtl::OUString;
63 : :
64 : : using rtl::OUString;
65 : :
66 : : //------------------------------------------------------------------
67 : :
68 : 4 : ScXMLDataPilotTablesContext::ScXMLDataPilotTablesContext( ScXMLImport& rImport,
69 : : sal_uInt16 nPrfx,
70 : : const ::rtl::OUString& rLName,
71 : : const ::com::sun::star::uno::Reference<
72 : : ::com::sun::star::xml::sax::XAttributeList>& /* xAttrList */ ) :
73 : 4 : SvXMLImportContext( rImport, nPrfx, rLName )
74 : : {
75 : : // has no Attributes
76 [ + - ]: 4 : rImport.LockSolarMutex();
77 : 4 : }
78 : :
79 : 4 : ScXMLDataPilotTablesContext::~ScXMLDataPilotTablesContext()
80 : : {
81 [ + - ]: 4 : GetScImport().UnlockSolarMutex();
82 [ - + ]: 8 : }
83 : :
84 : 6 : SvXMLImportContext *ScXMLDataPilotTablesContext::CreateChildContext( sal_uInt16 nPrefix,
85 : : const ::rtl::OUString& rLName,
86 : : const ::com::sun::star::uno::Reference<
87 : : ::com::sun::star::xml::sax::XAttributeList>& xAttrList )
88 : : {
89 : 6 : SvXMLImportContext *pContext = 0;
90 : :
91 : 6 : const SvXMLTokenMap& rTokenMap = GetScImport().GetDataPilotTablesElemTokenMap();
92 [ + - ]: 6 : switch( rTokenMap.Get( nPrefix, rLName ) )
93 : : {
94 : : case XML_TOK_DATA_PILOT_TABLE :
95 : : {
96 : : pContext = new ScXMLDataPilotTableContext( GetScImport(), nPrefix,
97 [ + - ]: 6 : rLName, xAttrList);
98 : : }
99 : 6 : break;
100 : : }
101 : :
102 [ - + ]: 6 : if( !pContext )
103 [ # # ]: 0 : pContext = new SvXMLImportContext( GetImport(), nPrefix, rLName );
104 : :
105 : 6 : return pContext;
106 : : }
107 : :
108 : 4 : void ScXMLDataPilotTablesContext::EndElement()
109 : : {
110 : 4 : }
111 : :
112 : 12 : ScXMLDataPilotTableContext::GrandTotalItem::GrandTotalItem() :
113 : 12 : mbVisible(true) {}
114 : :
115 : 6 : ScXMLDataPilotTableContext::ScXMLDataPilotTableContext( ScXMLImport& rImport,
116 : : sal_uInt16 nPrfx,
117 : : const ::rtl::OUString& rLName,
118 : : const ::com::sun::star::uno::Reference<
119 : : ::com::sun::star::xml::sax::XAttributeList>& xAttrList) :
120 : : SvXMLImportContext( rImport, nPrfx, rLName ),
121 : 6 : pDoc(GetScImport().GetDocument()),
122 : : pDPObject(NULL),
123 : : pDPSave(NULL),
124 : : pDPDimSaveData(NULL),
125 : : sDataPilotTableName(),
126 : : sApplicationData(),
127 [ + - ]: 6 : sGrandTotal(GetXMLToken(XML_BOTH)),
128 : : mnRowFieldCount(0),
129 : : mnColFieldCount(0),
130 : : mnPageFieldCount(0),
131 : : mnDataFieldCount(0),
132 : : bIsNative(true),
133 : : bIgnoreEmptyRows(false),
134 : : bIdentifyCategories(false),
135 : : bTargetRangeAddress(false),
136 : : bSourceCellRange(false),
137 : : bShowFilter(true),
138 : : bDrillDown(true),
139 [ + - ]: 18 : bHeaderGridLayout(false)
140 : : {
141 [ + - ][ + - ]: 6 : sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
[ + - ]
142 [ + - ]: 6 : const SvXMLTokenMap& rAttrTokenMap = GetScImport().GetDataPilotTableAttrTokenMap();
143 [ + + ]: 30 : for( sal_Int16 i=0; i < nAttrCount; ++i )
144 : : {
145 [ + - ][ + - ]: 24 : const rtl::OUString& sAttrName(xAttrList->getNameByIndex( i ));
146 : 24 : rtl::OUString aLocalName;
147 : 24 : sal_uInt16 nPrefix = GetScImport().GetNamespaceMap().GetKeyByAttrName(
148 [ + - ]: 24 : sAttrName, &aLocalName );
149 [ + - ][ + - ]: 24 : const rtl::OUString& sValue(xAttrList->getValueByIndex( i ));
150 : :
151 [ + - ][ + + : 24 : switch( rAttrTokenMap.Get( nPrefix, aLocalName ) )
- - - + +
- - - - ]
152 : : {
153 : : case XML_TOK_DATA_PILOT_TABLE_ATTR_NAME :
154 : : {
155 : 6 : sDataPilotTableName = sValue;
156 : : }
157 : 6 : break;
158 : : case XML_TOK_DATA_PILOT_TABLE_ATTR_APPLICATION_DATA :
159 : : {
160 : 6 : sApplicationData = sValue;
161 : : }
162 : 6 : break;
163 : : case XML_TOK_DATA_PILOT_TABLE_ATTR_GRAND_TOTAL :
164 : : {
165 : 0 : sGrandTotal = sValue;
166 [ # # ][ # # ]: 0 : if (IsXMLToken(sValue, XML_BOTH))
167 : : {
168 : 0 : maRowGrandTotal.mbVisible = true;
169 : 0 : maColGrandTotal.mbVisible = true;
170 : : }
171 [ # # ][ # # ]: 0 : else if (IsXMLToken(sValue, XML_ROW))
172 : : {
173 : 0 : maRowGrandTotal.mbVisible = true;
174 : 0 : maColGrandTotal.mbVisible = false;
175 : : }
176 [ # # ][ # # ]: 0 : else if (IsXMLToken(sValue, XML_COLUMN))
177 : : {
178 : 0 : maRowGrandTotal.mbVisible = false;
179 : 0 : maColGrandTotal.mbVisible = true;
180 : : }
181 : : else
182 : : {
183 : 0 : maRowGrandTotal.mbVisible = false;
184 : 0 : maColGrandTotal.mbVisible = false;
185 : : }
186 : : }
187 : 0 : break;
188 : : case XML_TOK_DATA_PILOT_TABLE_ATTR_IGNORE_EMPTY_ROWS :
189 : : {
190 [ # # ]: 0 : bIgnoreEmptyRows = IsXMLToken(sValue, XML_TRUE);
191 : : }
192 : 0 : break;
193 : : case XML_TOK_DATA_PILOT_TABLE_ATTR_IDENTIFY_CATEGORIES :
194 : : {
195 [ # # ]: 0 : bIdentifyCategories = IsXMLToken(sValue, XML_TRUE);
196 : : }
197 : 0 : break;
198 : : case XML_TOK_DATA_PILOT_TABLE_ATTR_TARGET_RANGE_ADDRESS :
199 : : {
200 : 6 : sal_Int32 nOffset(0);
201 [ + - ]: 6 : bTargetRangeAddress = ScRangeStringConverter::GetRangeFromString( aTargetRangeAddress, sValue, pDoc, ::formula::FormulaGrammar::CONV_OOO, nOffset );
202 : : }
203 : 6 : break;
204 : : case XML_TOK_DATA_PILOT_TABLE_ATTR_BUTTONS :
205 : : {
206 : 6 : sButtons = sValue;
207 : : }
208 : 6 : break;
209 : : case XML_TOK_DATA_PILOT_TABLE_ATTR_SHOW_FILTER_BUTTON :
210 : : {
211 [ # # ]: 0 : bShowFilter = IsXMLToken(sValue, XML_TRUE);
212 : : }
213 : 0 : break;
214 : : case XML_TOK_DATA_PILOT_TABLE_ATTR_DRILL_DOWN :
215 : : {
216 [ # # ]: 0 : bDrillDown = IsXMLToken(sValue, XML_TRUE);
217 : : }
218 : 0 : break;
219 : : case XML_TOK_DATA_PILOT_TABLE_ATTR_HEADER_GRID_LAYOUT :
220 : : {
221 [ # # ]: 0 : bHeaderGridLayout = IsXMLToken(sValue, XML_TRUE);
222 : : }
223 : 0 : break;
224 : : }
225 : 24 : }
226 : :
227 [ + - ][ + - ]: 6 : pDPObject = new ScDPObject(pDoc);
228 [ + - ][ + - ]: 6 : pDPSave = new ScDPSaveData();
229 : 6 : }
230 : :
231 [ + - ]: 6 : ScXMLDataPilotTableContext::~ScXMLDataPilotTableContext()
232 : : {
233 [ - + ][ # # ]: 6 : delete pDPDimSaveData;
234 [ - + ]: 12 : }
235 : :
236 : 28 : SvXMLImportContext *ScXMLDataPilotTableContext::CreateChildContext( sal_uInt16 nPrefix,
237 : : const ::rtl::OUString& rLName,
238 : : const ::com::sun::star::uno::Reference<
239 : : ::com::sun::star::xml::sax::XAttributeList>& xAttrList )
240 : : {
241 : 28 : SvXMLImportContext *pContext = 0;
242 : :
243 : 28 : const SvXMLTokenMap& rTokenMap = GetScImport().GetDataPilotTableElemTokenMap();
244 [ - - - - : 28 : switch( rTokenMap.Get( nPrefix, rLName ) )
- + + - ]
245 : : {
246 : : case XML_TOK_DATA_PILOT_TABLE_ELEM_SOURCE_SQL :
247 : : {
248 [ # # ]: 0 : pContext = new ScXMLDPSourceSQLContext(GetScImport(), nPrefix, rLName, xAttrList, this);
249 : 0 : nSourceType = SQL;
250 : : }
251 : 0 : break;
252 : : case XML_TOK_DATA_PILOT_TABLE_ELEM_SOURCE_TABLE :
253 : : {
254 [ # # ]: 0 : pContext = new ScXMLDPSourceTableContext(GetScImport(), nPrefix, rLName, xAttrList, this);
255 : 0 : nSourceType = TABLE;
256 : : }
257 : 0 : break;
258 : : case XML_TOK_DATA_PILOT_TABLE_ELEM_SOURCE_QUERY :
259 : : {
260 [ # # ]: 0 : pContext = new ScXMLDPSourceQueryContext(GetScImport(), nPrefix, rLName, xAttrList, this);
261 : 0 : nSourceType = QUERY;
262 : : }
263 : 0 : break;
264 : : case XML_TOK_DATA_PILOT_TABLE_ELEM_SOURCE_SERVICE :
265 : : {
266 [ # # ]: 0 : pContext = new ScXMLSourceServiceContext(GetScImport(), nPrefix, rLName, xAttrList, this);
267 : 0 : nSourceType = SERVICE;
268 : : }
269 : 0 : break;
270 : : case XML_TOK_DATA_PILOT_TABLE_ELEM_GRAND_TOTAL:
271 : : case XML_TOK_DATA_PILOT_TABLE_ELEM_GRAND_TOTAL_EXT:
272 : : {
273 [ # # ]: 0 : pContext = new ScXMLDataPilotGrandTotalContext(GetScImport(), nPrefix, rLName, xAttrList, this);
274 : : }
275 : 0 : break;
276 : : case XML_TOK_DATA_PILOT_TABLE_ELEM_SOURCE_CELL_RANGE :
277 : : {
278 [ + - ]: 6 : pContext = new ScXMLSourceCellRangeContext(GetScImport(), nPrefix, rLName, xAttrList, this);
279 : 6 : nSourceType = CELLRANGE;
280 : : }
281 : 6 : break;
282 : : case XML_TOK_DATA_PILOT_TABLE_ELEM_DATA_PILOT_FIELD :
283 [ + - ]: 22 : pContext = new ScXMLDataPilotFieldContext(GetScImport(), nPrefix, rLName, xAttrList, this);
284 : 22 : break;
285 : : }
286 : :
287 [ - + ]: 28 : if( !pContext )
288 [ # # ]: 0 : pContext = new SvXMLImportContext( GetImport(), nPrefix, rLName );
289 : :
290 : 28 : return pContext;
291 : : }
292 : :
293 : : namespace {
294 : :
295 : 20 : const ScDPSaveDimension* getDimension(
296 : : const std::vector<const ScDPSaveDimension*>& rRowDims,
297 : : const std::vector<const ScDPSaveDimension*>& rColDims,
298 : : ScDPOutputGeometry::FieldType eType, size_t nPos)
299 : : {
300 [ + + + ]: 20 : switch (eType)
301 : : {
302 : : case ScDPOutputGeometry::Column:
303 : : {
304 [ - + ]: 4 : if (rColDims.size() <= nPos)
305 : 0 : return NULL;
306 : :
307 : 4 : return rColDims[nPos];
308 : : }
309 : : case ScDPOutputGeometry::Row:
310 : : {
311 [ - + ]: 6 : if (rRowDims.size() <= nPos)
312 : 0 : return NULL;
313 : :
314 : 6 : return rRowDims[nPos];
315 : : }
316 : : default:
317 : : ;
318 : : }
319 : 20 : return NULL;
320 : : }
321 : :
322 : : }
323 : :
324 : 6 : void ScXMLDataPilotTableContext::SetButtons()
325 : : {
326 [ + - ]: 6 : ScDPOutputGeometry aGeometry(aTargetRangeAddress, bShowFilter);
327 [ + - ]: 6 : aGeometry.setColumnFieldCount(mnColFieldCount);
328 [ + - ]: 6 : aGeometry.setRowFieldCount(mnRowFieldCount);
329 [ + - ]: 6 : aGeometry.setPageFieldCount(mnPageFieldCount);
330 [ + - ]: 6 : aGeometry.setDataFieldCount(mnDataFieldCount);
331 : :
332 [ + - ][ + - ]: 6 : std::vector<const ScDPSaveDimension*> aRowDims, aColDims;
333 [ + - ]: 6 : pDPSave->GetAllDimensionsByOrientation(sheet::DataPilotFieldOrientation_ROW, aRowDims);
334 [ + - ]: 6 : pDPSave->GetAllDimensionsByOrientation(sheet::DataPilotFieldOrientation_COLUMN, aColDims);
335 : :
336 : 6 : OUString sAddress;
337 : 6 : sal_Int32 nOffset = 0;
338 [ + + ]: 32 : while( nOffset >= 0 )
339 : : {
340 [ + - ]: 26 : ScRangeStringConverter::GetTokenByOffset( sAddress, sButtons, nOffset );
341 [ + + ]: 26 : if( nOffset >= 0 )
342 : : {
343 : 20 : ScAddress aScAddress;
344 : 20 : sal_Int32 nAddrOffset(0);
345 [ + - ][ + - ]: 20 : if (pDoc && ScRangeStringConverter::GetAddressFromString( aScAddress, sAddress, pDoc, ::formula::FormulaGrammar::CONV_OOO, nAddrOffset ))
[ + - ][ + - ]
346 : : {
347 [ + - ]: 20 : std::pair<ScDPOutputGeometry::FieldType, size_t> aBtnType = aGeometry.getFieldButtonType(aScAddress);
348 : : const ScDPSaveDimension* pDim = getDimension(
349 [ + - ]: 20 : aRowDims, aColDims, aBtnType.first, aBtnType.second);
350 : :
351 [ + + ][ - + ]: 20 : bool bDataLayout = pDim && pDim->IsDataLayout();
352 [ + + ][ + - ]: 20 : bool bHasHidden = pDim && pDim->HasInvisibleMember();
[ - + ]
353 : :
354 : 20 : sal_Int16 nMFlag = SC_MF_BUTTON;
355 [ - + ]: 20 : if (bHasHidden)
356 : 0 : nMFlag |= SC_MF_HIDDEN_MEMBER;
357 : :
358 [ + - ]: 20 : if (!bDataLayout)
359 : 20 : nMFlag |= SC_MF_BUTTON_POPUP;
360 : :
361 [ + - ]: 20 : pDoc->ApplyFlagsTab(aScAddress.Col(), aScAddress.Row(), aScAddress.Col(), aScAddress.Row(), aScAddress.Tab(), nMFlag);
362 : : }
363 : : }
364 : : }
365 : :
366 [ + - ]: 6 : if ( pDPObject )
367 [ + - ][ + - ]: 6 : pDPObject->RefreshAfterLoad();
368 : 6 : }
369 : :
370 : 22 : void ScXMLDataPilotTableContext::AddDimension(ScDPSaveDimension* pDim)
371 : : {
372 [ + - ]: 22 : if (pDPSave)
373 : : {
374 : : // if a dimension with that name has already been inserted,
375 : : // mark the new one as duplicate
376 [ + + - + ]: 42 : if ( !pDim->IsDataLayout() &&
[ - + ]
377 : 20 : pDPSave->GetExistingDimensionByName(pDim->GetName()) )
378 : 0 : pDim->SetDupFlag(true);
379 : :
380 [ + + + + : 22 : switch (pDim->GetOrientation())
- ]
381 : : {
382 : : case sheet::DataPilotFieldOrientation_ROW:
383 : 8 : ++mnRowFieldCount;
384 : 8 : break;
385 : : case sheet::DataPilotFieldOrientation_COLUMN:
386 : 6 : ++mnColFieldCount;
387 : 6 : break;
388 : : case sheet::DataPilotFieldOrientation_PAGE:
389 : 2 : ++mnPageFieldCount;
390 : 2 : break;
391 : : case sheet::DataPilotFieldOrientation_DATA:
392 : 6 : ++mnDataFieldCount;
393 : 6 : break;
394 : : case sheet::DataPilotFieldOrientation_HIDDEN:
395 : : default:
396 : : ;
397 : : }
398 : :
399 : 22 : pDPSave->AddDimension(pDim);
400 : : }
401 : 22 : }
402 : :
403 : 0 : void ScXMLDataPilotTableContext::AddGroupDim(const ScDPSaveNumGroupDimension& aNumGroupDim)
404 : : {
405 [ # # ]: 0 : if (!pDPDimSaveData)
406 [ # # ]: 0 : pDPDimSaveData = new ScDPDimensionSaveData();
407 : 0 : pDPDimSaveData->AddNumGroupDimension(aNumGroupDim);
408 : 0 : }
409 : :
410 : 0 : void ScXMLDataPilotTableContext::AddGroupDim(const ScDPSaveGroupDimension& aGroupDim)
411 : : {
412 [ # # ]: 0 : if (!pDPDimSaveData)
413 [ # # ]: 0 : pDPDimSaveData = new ScDPDimensionSaveData();
414 : 0 : pDPDimSaveData->AddGroupDimension(aGroupDim);
415 : 0 : }
416 : :
417 : 6 : void ScXMLDataPilotTableContext::EndElement()
418 : : {
419 [ - + ]: 6 : if (!bTargetRangeAddress)
420 : 6 : return;
421 : :
422 : 6 : pDPObject->SetName(sDataPilotTableName);
423 : 6 : pDPObject->SetTag(sApplicationData);
424 : 6 : pDPObject->SetOutRange(aTargetRangeAddress);
425 : 6 : pDPObject->SetHeaderLayout(bHeaderGridLayout);
426 [ - - - - : 6 : switch (nSourceType)
+ - ]
427 : : {
428 : : case SQL :
429 : : {
430 : 0 : ScImportSourceDesc aImportDesc(pDoc);
431 : 0 : aImportDesc.aDBName = sDatabaseName;
432 : 0 : aImportDesc.aObject = sSourceObject;
433 : 0 : aImportDesc.nType = sheet::DataImportMode_SQL;
434 : 0 : aImportDesc.bNative = bIsNative;
435 [ # # ]: 0 : pDPObject->SetImportDesc(aImportDesc);
436 : : }
437 : 0 : break;
438 : : case TABLE :
439 : : {
440 : 0 : ScImportSourceDesc aImportDesc(pDoc);
441 : 0 : aImportDesc.aDBName = sDatabaseName;
442 : 0 : aImportDesc.aObject = sSourceObject;
443 : 0 : aImportDesc.nType = sheet::DataImportMode_TABLE;
444 [ # # ]: 0 : pDPObject->SetImportDesc(aImportDesc);
445 : : }
446 : 0 : break;
447 : : case QUERY :
448 : : {
449 : 0 : ScImportSourceDesc aImportDesc(pDoc);
450 : 0 : aImportDesc.aDBName = sDatabaseName;
451 : 0 : aImportDesc.aObject = sSourceObject;
452 : 0 : aImportDesc.nType = sheet::DataImportMode_QUERY;
453 [ # # ]: 0 : pDPObject->SetImportDesc(aImportDesc);
454 : : }
455 : 0 : break;
456 : : case SERVICE :
457 : : {
458 : : ScDPServiceDesc aServiceDesk(sServiceName, sServiceSourceName, sServiceSourceObject,
459 [ # # ]: 0 : sServiceUsername, sServicePassword);
460 [ # # ]: 0 : pDPObject->SetServiceData(aServiceDesk);
461 : : }
462 : 0 : break;
463 : : case CELLRANGE :
464 : : {
465 [ + - ]: 6 : if (bSourceCellRange)
466 : : {
467 [ + - ]: 6 : ScSheetSourceDesc aSheetDesc(pDoc);
468 [ - + ]: 6 : if (!sSourceRangeName.isEmpty())
469 : : // Range name takes precedence.
470 [ # # ]: 0 : aSheetDesc.SetRangeName(sSourceRangeName);
471 : : else
472 [ + - ]: 6 : aSheetDesc.SetSourceRange(aSourceCellRangeAddress);
473 [ + - ]: 6 : aSheetDesc.SetQueryParam(aSourceQueryParam);
474 [ + - ][ + - ]: 6 : pDPObject->SetSheetDesc(aSheetDesc);
475 : : }
476 : : }
477 : 6 : break;
478 : : }
479 : :
480 : 6 : pDPSave->SetRowGrand(maRowGrandTotal.mbVisible);
481 : 6 : pDPSave->SetColumnGrand(maColGrandTotal.mbVisible);
482 [ - + ]: 6 : if (!maRowGrandTotal.maDisplayName.isEmpty())
483 : : // TODO: Right now, we only support one grand total name for both
484 : : // column and row totals. Take the value from the row total for
485 : : // now.
486 : 0 : pDPSave->SetGrandTotalName(maRowGrandTotal.maDisplayName);
487 : :
488 : 6 : pDPSave->SetIgnoreEmptyRows(bIgnoreEmptyRows);
489 : 6 : pDPSave->SetRepeatIfEmpty(bIdentifyCategories);
490 : 6 : pDPSave->SetFilterButton(bShowFilter);
491 : 6 : pDPSave->SetDrillDown(bDrillDown);
492 [ - + ]: 6 : if (pDPDimSaveData)
493 : 0 : pDPSave->SetDimensionData(pDPDimSaveData);
494 : 6 : pDPObject->SetSaveData(*pDPSave);
495 [ + - ]: 6 : if (pDoc)
496 : : {
497 : 6 : ScDPCollection* pDPCollection = pDoc->GetDPCollection();
498 : :
499 : : // #i94570# Names have to be unique, or the tables can't be accessed by API.
500 [ - + ]: 6 : if ( pDPCollection->GetByName(pDPObject->GetName()) )
501 [ # # ][ # # ]: 0 : pDPObject->SetName( String() ); // ignore the invalid name, create a new name in AfterXMLLoading
502 : :
503 : 6 : pDPObject->SetAlive(sal_True);
504 : 6 : pDPCollection->InsertNewTable(pDPObject);
505 : : }
506 : 6 : SetButtons();
507 : : }
508 : :
509 : 0 : void ScXMLDataPilotTableContext::SetGrandTotal(
510 : : XMLTokenEnum eOrientation, bool bVisible, const OUString& rDisplayName)
511 : : {
512 [ # # # # ]: 0 : switch (eOrientation)
513 : : {
514 : : case XML_BOTH:
515 : 0 : maRowGrandTotal.mbVisible = bVisible;
516 : 0 : maRowGrandTotal.maDisplayName = rDisplayName;
517 : 0 : maColGrandTotal.mbVisible = bVisible;
518 : 0 : maColGrandTotal.maDisplayName = rDisplayName;
519 : 0 : break;
520 : : case XML_ROW:
521 : 0 : maRowGrandTotal.mbVisible = bVisible;
522 : 0 : maRowGrandTotal.maDisplayName = rDisplayName;
523 : 0 : break;
524 : : case XML_COLUMN:
525 : 0 : maColGrandTotal.mbVisible = bVisible;
526 : 0 : maColGrandTotal.maDisplayName = rDisplayName;
527 : 0 : break;
528 : : default:
529 : : ;
530 : : }
531 : 0 : }
532 : :
533 : 0 : ScXMLDPSourceSQLContext::ScXMLDPSourceSQLContext( ScXMLImport& rImport,
534 : : sal_uInt16 nPrfx,
535 : : const ::rtl::OUString& rLName,
536 : : const ::com::sun::star::uno::Reference<
537 : : ::com::sun::star::xml::sax::XAttributeList>& xAttrList,
538 : : ScXMLDataPilotTableContext* pTempDataPilotTable) :
539 : : SvXMLImportContext( rImport, nPrfx, rLName ),
540 : 0 : pDataPilotTable(pTempDataPilotTable)
541 : : {
542 [ # # ][ # # ]: 0 : sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
[ # # ]
543 [ # # ]: 0 : const SvXMLTokenMap& rAttrTokenMap = GetScImport().GetDatabaseRangeSourceSQLAttrTokenMap();
544 [ # # ]: 0 : for( sal_Int16 i=0; i < nAttrCount; ++i )
545 : : {
546 [ # # ][ # # ]: 0 : const rtl::OUString& sAttrName(xAttrList->getNameByIndex( i ));
547 : 0 : rtl::OUString aLocalName;
548 : 0 : sal_uInt16 nPrefix = GetScImport().GetNamespaceMap().GetKeyByAttrName(
549 [ # # ]: 0 : sAttrName, &aLocalName );
550 [ # # ][ # # ]: 0 : const rtl::OUString& sValue(xAttrList->getValueByIndex( i ));
551 : :
552 [ # # ]: 0 : switch( rAttrTokenMap.Get( nPrefix, aLocalName ) )
[ # # # # ]
553 : : {
554 : : case XML_TOK_SOURCE_SQL_ATTR_DATABASE_NAME :
555 : : {
556 : 0 : pDataPilotTable->SetDatabaseName(sValue);
557 : : }
558 : 0 : break;
559 : : case XML_TOK_SOURCE_SQL_ATTR_SQL_STATEMENT :
560 : : {
561 : 0 : pDataPilotTable->SetSourceObject(sValue);
562 : : }
563 : 0 : break;
564 : : case XML_TOK_SOURCE_SQL_ATTR_PARSE_SQL_STATEMENT :
565 : : {
566 [ # # ]: 0 : pDataPilotTable->SetNative(!IsXMLToken(sValue, XML_TRUE));
567 : : }
568 : 0 : break;
569 : : }
570 : 0 : }
571 : 0 : }
572 : :
573 : 0 : ScXMLDPSourceSQLContext::~ScXMLDPSourceSQLContext()
574 : : {
575 [ # # ]: 0 : }
576 : :
577 : 0 : SvXMLImportContext *ScXMLDPSourceSQLContext::CreateChildContext( sal_uInt16 nPrefix,
578 : : const ::rtl::OUString& rLName,
579 : : const ::com::sun::star::uno::Reference<
580 : : ::com::sun::star::xml::sax::XAttributeList>& /* xAttrList */ )
581 : : {
582 : 0 : SvXMLImportContext *pContext = 0;
583 : :
584 [ # # ]: 0 : if( !pContext )
585 [ # # ]: 0 : pContext = new SvXMLImportContext( GetImport(), nPrefix, rLName );
586 : :
587 : 0 : return pContext;
588 : : }
589 : :
590 : 0 : void ScXMLDPSourceSQLContext::EndElement()
591 : : {
592 : 0 : }
593 : :
594 : 0 : ScXMLDPSourceTableContext::ScXMLDPSourceTableContext( ScXMLImport& rImport,
595 : : sal_uInt16 nPrfx,
596 : : const ::rtl::OUString& rLName,
597 : : const ::com::sun::star::uno::Reference<
598 : : ::com::sun::star::xml::sax::XAttributeList>& xAttrList,
599 : : ScXMLDataPilotTableContext* pTempDataPilotTable) :
600 : : SvXMLImportContext( rImport, nPrfx, rLName ),
601 : 0 : pDataPilotTable(pTempDataPilotTable)
602 : : {
603 [ # # ][ # # ]: 0 : sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
[ # # ]
604 [ # # ]: 0 : const SvXMLTokenMap& rAttrTokenMap = GetScImport().GetDatabaseRangeSourceTableAttrTokenMap();
605 [ # # ]: 0 : for( sal_Int16 i=0; i < nAttrCount; ++i )
606 : : {
607 [ # # ][ # # ]: 0 : const rtl::OUString& sAttrName(xAttrList->getNameByIndex( i ));
608 : 0 : rtl::OUString aLocalName;
609 : 0 : sal_uInt16 nPrefix = GetScImport().GetNamespaceMap().GetKeyByAttrName(
610 [ # # ]: 0 : sAttrName, &aLocalName );
611 [ # # ][ # # ]: 0 : const rtl::OUString& sValue(xAttrList->getValueByIndex( i ));
612 : :
613 [ # # ]: 0 : switch( rAttrTokenMap.Get( nPrefix, aLocalName ) )
[ # # # ]
614 : : {
615 : : case XML_TOK_SOURCE_TABLE_ATTR_DATABASE_NAME :
616 : : {
617 : 0 : pDataPilotTable->SetDatabaseName(sValue);
618 : : }
619 : 0 : break;
620 : : case XML_TOK_SOURCE_TABLE_ATTR_TABLE_NAME :
621 : : {
622 : 0 : pDataPilotTable->SetSourceObject(sValue);
623 : : }
624 : 0 : break;
625 : : }
626 : 0 : }
627 : 0 : }
628 : :
629 : 0 : ScXMLDPSourceTableContext::~ScXMLDPSourceTableContext()
630 : : {
631 [ # # ]: 0 : }
632 : :
633 : 0 : SvXMLImportContext *ScXMLDPSourceTableContext::CreateChildContext( sal_uInt16 nPrefix,
634 : : const ::rtl::OUString& rLName,
635 : : const ::com::sun::star::uno::Reference<
636 : : ::com::sun::star::xml::sax::XAttributeList>& /* xAttrList */ )
637 : : {
638 : 0 : SvXMLImportContext *pContext = 0;
639 : :
640 [ # # ]: 0 : if( !pContext )
641 [ # # ]: 0 : pContext = new SvXMLImportContext( GetImport(), nPrefix, rLName );
642 : :
643 : 0 : return pContext;
644 : : }
645 : :
646 : 0 : void ScXMLDPSourceTableContext::EndElement()
647 : : {
648 : 0 : }
649 : :
650 : 0 : ScXMLDPSourceQueryContext::ScXMLDPSourceQueryContext( 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 : : ScXMLDataPilotTableContext* pTempDataPilotTable) :
656 : : SvXMLImportContext( rImport, nPrfx, rLName ),
657 : 0 : pDataPilotTable(pTempDataPilotTable)
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 : pDataPilotTable->SetDatabaseName(sValue);
674 : : }
675 : 0 : break;
676 : : case XML_TOK_SOURCE_QUERY_ATTR_QUERY_NAME :
677 : : {
678 : 0 : pDataPilotTable->SetSourceObject(sValue);
679 : : }
680 : 0 : break;
681 : : }
682 : 0 : }
683 : 0 : }
684 : :
685 : 0 : ScXMLDPSourceQueryContext::~ScXMLDPSourceQueryContext()
686 : : {
687 [ # # ]: 0 : }
688 : :
689 : 0 : SvXMLImportContext *ScXMLDPSourceQueryContext::CreateChildContext( sal_uInt16 nPrefix,
690 : : const ::rtl::OUString& rLName,
691 : : const ::com::sun::star::uno::Reference<
692 : : ::com::sun::star::xml::sax::XAttributeList>& /* xAttrList */ )
693 : : {
694 : 0 : SvXMLImportContext *pContext = 0;
695 : :
696 [ # # ]: 0 : if( !pContext )
697 [ # # ]: 0 : pContext = new SvXMLImportContext( GetImport(), nPrefix, rLName );
698 : :
699 : 0 : return pContext;
700 : : }
701 : :
702 : 0 : void ScXMLDPSourceQueryContext::EndElement()
703 : : {
704 : 0 : }
705 : :
706 : 0 : ScXMLSourceServiceContext::ScXMLSourceServiceContext( ScXMLImport& rImport,
707 : : sal_uInt16 nPrfx,
708 : : const ::rtl::OUString& rLName,
709 : : const ::com::sun::star::uno::Reference<
710 : : ::com::sun::star::xml::sax::XAttributeList>& xAttrList,
711 : : ScXMLDataPilotTableContext* pTempDataPilotTable) :
712 : : SvXMLImportContext( rImport, nPrfx, rLName ),
713 : 0 : pDataPilotTable(pTempDataPilotTable)
714 : : {
715 [ # # ][ # # ]: 0 : sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
[ # # ]
716 [ # # ]: 0 : const SvXMLTokenMap& rAttrTokenMap = GetScImport().GetDataPilotTableSourceServiceAttrTokenMap();
717 [ # # ]: 0 : for( sal_Int16 i=0; i < nAttrCount; ++i )
718 : : {
719 [ # # ][ # # ]: 0 : const rtl::OUString& sAttrName(xAttrList->getNameByIndex( i ));
720 : 0 : rtl::OUString aLocalName;
721 : 0 : sal_uInt16 nPrefix = GetScImport().GetNamespaceMap().GetKeyByAttrName(
722 [ # # ]: 0 : sAttrName, &aLocalName );
723 [ # # ][ # # ]: 0 : const rtl::OUString& sValue(xAttrList->getValueByIndex( i ));
724 : :
725 [ # # ][ # # : 0 : switch( rAttrTokenMap.Get( nPrefix, aLocalName ) )
# # # # ]
726 : : {
727 : : case XML_TOK_SOURCE_SERVICE_ATTR_NAME :
728 : : {
729 : 0 : pDataPilotTable->SetServiceName(sValue);
730 : : }
731 : 0 : break;
732 : : case XML_TOK_SOURCE_SERVICE_ATTR_SOURCE_NAME :
733 : : {
734 : 0 : pDataPilotTable->SetServiceSourceName(sValue);
735 : : }
736 : 0 : break;
737 : : case XML_TOK_SOURCE_SERVICE_ATTR_OBJECT_NAME :
738 : : {
739 : 0 : pDataPilotTable->SetServiceSourceObject(sValue);
740 : : }
741 : 0 : break;
742 : : case XML_TOK_SOURCE_SERVICE_ATTR_USER_NAME :
743 : : {
744 : 0 : pDataPilotTable->SetServiceUsername(sValue);
745 : : }
746 : 0 : break;
747 : : case XML_TOK_SOURCE_SERVICE_ATTR_PASSWORD :
748 : : {
749 : 0 : pDataPilotTable->SetServicePassword(sValue);
750 : : }
751 : 0 : break;
752 : : }
753 : 0 : }
754 : 0 : }
755 : :
756 : 0 : ScXMLSourceServiceContext::~ScXMLSourceServiceContext()
757 : : {
758 [ # # ]: 0 : }
759 : :
760 : 0 : SvXMLImportContext *ScXMLSourceServiceContext::CreateChildContext( sal_uInt16 nPrefix,
761 : : const ::rtl::OUString& rLName,
762 : : const ::com::sun::star::uno::Reference<
763 : : ::com::sun::star::xml::sax::XAttributeList>& /* xAttrList */ )
764 : : {
765 : 0 : SvXMLImportContext *pContext = 0;
766 : :
767 [ # # ]: 0 : if( !pContext )
768 [ # # ]: 0 : pContext = new SvXMLImportContext( GetImport(), nPrefix, rLName );
769 : :
770 : 0 : return pContext;
771 : : }
772 : :
773 : 0 : void ScXMLSourceServiceContext::EndElement()
774 : : {
775 : 0 : }
776 : :
777 : 0 : ScXMLImport& ScXMLDataPilotGrandTotalContext::GetScImport()
778 : : {
779 : 0 : return static_cast<ScXMLImport&>(GetImport());
780 : : }
781 : :
782 : 0 : ScXMLDataPilotGrandTotalContext::ScXMLDataPilotGrandTotalContext(
783 : : ScXMLImport& rImport, sal_uInt16 nPrefix, const OUString& rLName, const Reference<XAttributeList>& xAttrList,
784 : : ScXMLDataPilotTableContext* pTableContext ) :
785 : : SvXMLImportContext( rImport, nPrefix, rLName ),
786 : : mpTableContext(pTableContext),
787 : : meOrientation(NONE),
788 : 0 : mbVisible(false)
789 : : {
790 [ # # ][ # # ]: 0 : sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
[ # # ]
791 [ # # ]: 0 : const SvXMLTokenMap& rAttrTokenMap = GetScImport().GetDataPilotGrandTotalAttrTokenMap();
792 [ # # ]: 0 : for (sal_Int16 i = 0; i < nAttrCount; ++i)
793 : : {
794 [ # # ][ # # ]: 0 : const OUString& rAttrName = xAttrList->getNameByIndex(i);
795 [ # # ][ # # ]: 0 : const OUString& rAttrValue = xAttrList->getValueByIndex(i);
796 : :
797 : 0 : OUString aLocalName;
798 [ # # ]: 0 : sal_uInt16 nLocalPrefix = GetScImport().GetNamespaceMap().GetKeyByAttrName(rAttrName, &aLocalName);
799 [ # # ]: 0 : switch (rAttrTokenMap.Get(nLocalPrefix, aLocalName))
[ # # # # ]
800 : : {
801 : : case XML_TOK_DATA_PILOT_GRAND_TOTAL_ATTR_DISPLAY:
802 [ # # ]: 0 : mbVisible = IsXMLToken(rAttrValue, XML_TRUE);
803 : 0 : break;
804 : : case XML_TOK_DATA_PILOT_GRAND_TOTAL_ATTR_ORIENTATION:
805 [ # # ][ # # ]: 0 : if (IsXMLToken(rAttrValue, XML_BOTH))
806 : 0 : meOrientation = BOTH;
807 [ # # ][ # # ]: 0 : else if (IsXMLToken(rAttrValue, XML_ROW))
808 : 0 : meOrientation = ROW;
809 [ # # ][ # # ]: 0 : else if (IsXMLToken(rAttrValue, XML_COLUMN))
810 : 0 : meOrientation = COLUMN;
811 : 0 : break;
812 : : case XML_TOK_DATA_PILOT_GRAND_TOTAL_ATTR_DISPLAY_NAME:
813 : : case XML_TOK_DATA_PILOT_GRAND_TOTAL_ATTR_DISPLAY_NAME_EXT:
814 : 0 : maDisplayName = rAttrValue;
815 : 0 : break;
816 : : default:
817 : : ;
818 : : }
819 : 0 : }
820 : 0 : }
821 : :
822 : 0 : ScXMLDataPilotGrandTotalContext::~ScXMLDataPilotGrandTotalContext()
823 : : {
824 [ # # ]: 0 : }
825 : :
826 : 0 : SvXMLImportContext* ScXMLDataPilotGrandTotalContext::CreateChildContext(
827 : : sal_uInt16 nPrefix, const ::rtl::OUString& rLocalName, const Reference<XAttributeList>& /*xAttrList*/ )
828 : : {
829 [ # # ]: 0 : return new SvXMLImportContext( GetImport(), nPrefix, rLocalName );
830 : : }
831 : :
832 : 0 : void ScXMLDataPilotGrandTotalContext::EndElement()
833 : : {
834 : 0 : XMLTokenEnum eOrient = XML_NONE;
835 [ # # # # ]: 0 : switch (meOrientation)
836 : : {
837 : : case BOTH:
838 : 0 : eOrient = XML_BOTH;
839 : 0 : break;
840 : : case ROW:
841 : 0 : eOrient = XML_ROW;
842 : 0 : break;
843 : : case COLUMN:
844 : 0 : eOrient = XML_COLUMN;
845 : 0 : break;
846 : : default:
847 : : ;
848 : : }
849 : 0 : mpTableContext->SetGrandTotal(eOrient, mbVisible, maDisplayName);
850 : 0 : }
851 : :
852 : 6 : ScXMLSourceCellRangeContext::ScXMLSourceCellRangeContext( ScXMLImport& rImport,
853 : : sal_uInt16 nPrfx,
854 : : const ::rtl::OUString& rLName,
855 : : const ::com::sun::star::uno::Reference<
856 : : ::com::sun::star::xml::sax::XAttributeList>& xAttrList,
857 : : ScXMLDataPilotTableContext* pTempDataPilotTable) :
858 : : SvXMLImportContext( rImport, nPrfx, rLName ),
859 : 6 : pDataPilotTable(pTempDataPilotTable)
860 : : {
861 [ + - ][ + - ]: 6 : sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
[ + - ]
862 [ + - ]: 6 : const SvXMLTokenMap& rAttrTokenMap = GetScImport().GetDataPilotTableSourceCellRangeAttrTokenMap();
863 [ + + ]: 12 : for( sal_Int16 i=0; i < nAttrCount; ++i )
864 : : {
865 [ + - ][ + - ]: 6 : const rtl::OUString& sAttrName(xAttrList->getNameByIndex( i ));
866 : 6 : rtl::OUString aLocalName;
867 : 6 : sal_uInt16 nPrefix = GetScImport().GetNamespaceMap().GetKeyByAttrName(
868 [ + - ]: 6 : sAttrName, &aLocalName );
869 [ + - ][ + - ]: 6 : const rtl::OUString& sValue(xAttrList->getValueByIndex( i ));
870 : :
871 [ + - ]: 6 : switch( rAttrTokenMap.Get( nPrefix, aLocalName ) )
[ + - - ]
872 : : {
873 : : case XML_TOK_SOURCE_CELL_RANGE_ATTR_CELL_RANGE_ADDRESS :
874 : : {
875 : 6 : ScRange aSourceRangeAddress;
876 : 6 : sal_Int32 nOffset(0);
877 [ + - ][ + - ]: 6 : if (ScRangeStringConverter::GetRangeFromString( aSourceRangeAddress, sValue, GetScImport().GetDocument(), ::formula::FormulaGrammar::CONV_OOO, nOffset ))
878 : 6 : pDataPilotTable->SetSourceCellRangeAddress(aSourceRangeAddress);
879 : : }
880 : 6 : break;
881 : : case XML_TOK_SOURCE_CELL_RANGE_ATTR_NAME:
882 : 0 : pDataPilotTable->SetSourceRangeName(sValue);
883 : 0 : break;
884 : : }
885 : 6 : }
886 : 6 : }
887 : :
888 : 6 : ScXMLSourceCellRangeContext::~ScXMLSourceCellRangeContext()
889 : : {
890 [ - + ]: 12 : }
891 : :
892 : 2 : SvXMLImportContext *ScXMLSourceCellRangeContext::CreateChildContext( sal_uInt16 nPrefix,
893 : : const ::rtl::OUString& rLName,
894 : : const ::com::sun::star::uno::Reference<
895 : : ::com::sun::star::xml::sax::XAttributeList>& xAttrList )
896 : : {
897 : 2 : SvXMLImportContext *pContext = 0;
898 : :
899 : 2 : const SvXMLTokenMap& rTokenMap = GetScImport().GetDataPilotTableSourceCellRangeElemTokenMap();
900 [ + - ]: 2 : switch( rTokenMap.Get( nPrefix, rLName ) )
901 : : {
902 : : case XML_TOK_SOURCE_CELL_RANGE_ELEM_FILTER :
903 [ + - ]: 2 : pContext = new ScXMLDPFilterContext(GetScImport(), nPrefix, rLName, xAttrList, pDataPilotTable);
904 : 2 : break;
905 : : }
906 : :
907 [ - + ]: 2 : if( !pContext )
908 [ # # ]: 0 : pContext = new SvXMLImportContext( GetImport(), nPrefix, rLName );
909 : :
910 : 2 : return pContext;
911 : : }
912 : :
913 : 6 : void ScXMLSourceCellRangeContext::EndElement()
914 : : {
915 : 6 : }
916 : :
917 : 22 : ScXMLDataPilotFieldContext::ScXMLDataPilotFieldContext( ScXMLImport& rImport,
918 : : sal_uInt16 nPrfx,
919 : : const ::rtl::OUString& rLName,
920 : : const ::com::sun::star::uno::Reference<
921 : : ::com::sun::star::xml::sax::XAttributeList>& xAttrList,
922 : : ScXMLDataPilotTableContext* pTempDataPilotTable) :
923 : : SvXMLImportContext( rImport, nPrfx, rLName ),
924 : : pDataPilotTable(pTempDataPilotTable),
925 : : pDim(NULL),
926 : : fStart(0.0),
927 : : fEnd(0.0),
928 : : fStep(0.0),
929 : : nUsedHierarchy(1),
930 : : nGroupPart(0),
931 : : bSelectedPage(false),
932 : : bIsGroupField(false),
933 : : bDateValue(false),
934 : : bAutoStart(false),
935 : : bAutoEnd(false),
936 [ + - ]: 22 : mbHasHiddenMember(false)
937 : : {
938 : 22 : sal_Bool bHasName(false);
939 : 22 : sal_Bool bDataLayout(false);
940 : 22 : OUString aDisplayName;
941 [ + - ][ + - ]: 22 : sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
[ + - ]
942 [ + - ]: 22 : const SvXMLTokenMap& rAttrTokenMap = GetScImport().GetDataPilotFieldAttrTokenMap();
943 [ + + ]: 112 : for( sal_Int16 i=0; i < nAttrCount; ++i )
944 : : {
945 [ + - ][ + - ]: 90 : const rtl::OUString& sAttrName(xAttrList->getNameByIndex( i ));
946 : 90 : rtl::OUString aLocalName;
947 : 90 : sal_uInt16 nPrefix = GetScImport().GetNamespaceMap().GetKeyByAttrName(
948 [ + - ]: 90 : sAttrName, &aLocalName );
949 [ + - ][ + - ]: 90 : const rtl::OUString& sValue(xAttrList->getValueByIndex( i ));
950 : :
951 [ + - ][ + - : 90 : switch( rAttrTokenMap.Get( nPrefix, aLocalName ) )
+ + + - +
- ]
952 : : {
953 : : case XML_TOK_DATA_PILOT_FIELD_ATTR_SOURCE_FIELD_NAME :
954 : : {
955 : 22 : sName = sValue;
956 : 22 : bHasName = sal_True;
957 : : }
958 : 22 : break;
959 : : case XML_TOK_DATA_PILOT_FIELD_ATTR_DISPLAY_NAME:
960 : : case XML_TOK_DATA_PILOT_FIELD_ATTR_DISPLAY_NAME_EXT:
961 : : {
962 : 0 : aDisplayName = sValue;
963 : : }
964 : 0 : break;
965 : : case XML_TOK_DATA_PILOT_FIELD_ATTR_IS_DATA_LAYOUT_FIELD :
966 : : {
967 [ + - ]: 2 : bDataLayout = IsXMLToken(sValue, XML_TRUE);
968 : : }
969 : 2 : break;
970 : : case XML_TOK_DATA_PILOT_FIELD_ATTR_FUNCTION :
971 : : {
972 [ + - ]: 22 : nFunction = (sal_Int16) ScXMLConverter::GetFunctionFromString( sValue );
973 : : }
974 : 22 : break;
975 : : case XML_TOK_DATA_PILOT_FIELD_ATTR_ORIENTATION :
976 : : {
977 [ + - ]: 22 : nOrientation = (sal_Int16) ScXMLConverter::GetOrientationFromString( sValue );
978 : : }
979 : 22 : break;
980 : : case XML_TOK_DATA_PILOT_FIELD_ATTR_SELECTED_PAGE :
981 : : {
982 : 0 : sSelectedPage = sValue;
983 : 0 : bSelectedPage = sal_True;
984 : : }
985 : 0 : break;
986 : : case XML_TOK_DATA_PILOT_FIELD_ATTR_USED_HIERARCHY :
987 : : {
988 : 22 : nUsedHierarchy = sValue.toInt32();
989 : : }
990 : 22 : break;
991 : : }
992 : 90 : }
993 [ + - ]: 22 : if (bHasName)
994 : : {
995 [ + - ][ + - ]: 22 : pDim = new ScDPSaveDimension(String(sName), bDataLayout);
[ + - ][ + - ]
[ + - ]
996 [ - + ]: 22 : if (!aDisplayName.isEmpty())
997 [ # # ]: 0 : pDim->SetLayoutName(aDisplayName);
998 : 22 : }
999 : 22 : }
1000 : :
1001 : 22 : ScXMLDataPilotFieldContext::~ScXMLDataPilotFieldContext()
1002 : : {
1003 [ - + ]: 44 : }
1004 : :
1005 : 22 : SvXMLImportContext *ScXMLDataPilotFieldContext::CreateChildContext( sal_uInt16 nPrefix,
1006 : : const ::rtl::OUString& rLName,
1007 : : const ::com::sun::star::uno::Reference<
1008 : : ::com::sun::star::xml::sax::XAttributeList>& xAttrList )
1009 : : {
1010 : 22 : SvXMLImportContext *pContext = 0;
1011 : :
1012 : 22 : const SvXMLTokenMap& rTokenMap = GetScImport().GetDataPilotFieldElemTokenMap();
1013 [ + - - - ]: 22 : switch( rTokenMap.Get( nPrefix, rLName ) )
1014 : : {
1015 : : case XML_TOK_DATA_PILOT_FIELD_ELEM_DATA_PILOT_LEVEL :
1016 [ + - ]: 22 : pContext = new ScXMLDataPilotLevelContext(GetScImport(), nPrefix, rLName, xAttrList, this);
1017 : 22 : break;
1018 : : case XML_TOK_DATA_PILOT_FIELD_ELEM_DATA_PILOT_REFERENCE :
1019 [ # # ]: 0 : pContext = new ScXMLDataPilotFieldReferenceContext(GetScImport(), nPrefix, rLName, xAttrList, this);
1020 : 0 : break;
1021 : : case XML_TOK_DATA_PILOT_FIELD_ELEM_DATA_PILOT_GROUPS :
1022 [ # # ]: 0 : pContext = new ScXMLDataPilotGroupsContext(GetScImport(), nPrefix, rLName, xAttrList, this);
1023 : 0 : break;
1024 : : }
1025 : :
1026 [ - + ]: 22 : if( !pContext )
1027 [ # # ]: 0 : pContext = new SvXMLImportContext( GetImport(), nPrefix, rLName );
1028 : :
1029 : 22 : return pContext;
1030 : : }
1031 : :
1032 : 40 : void ScXMLDataPilotFieldContext::AddMember(ScDPSaveMember* pMember)
1033 : : {
1034 [ + - ]: 40 : if (pDim)
1035 : : {
1036 : 40 : pDim->AddMember(pMember);
1037 [ - + ]: 40 : if (!pMember->GetIsVisible())
1038 : : // This member is hidden.
1039 : 0 : mbHasHiddenMember = true;
1040 : : }
1041 : : else
1042 [ # # ]: 0 : delete pMember;
1043 : 40 : }
1044 : :
1045 : 0 : void ScXMLDataPilotFieldContext::SetSubTotalName(const OUString& rName)
1046 : : {
1047 [ # # ]: 0 : if (pDim)
1048 : 0 : pDim->SetSubtotalName(rName);
1049 : 0 : }
1050 : :
1051 : 0 : void ScXMLDataPilotFieldContext::AddGroup(const ::std::vector<rtl::OUString>& rMembers, const rtl::OUString& rName)
1052 : : {
1053 [ # # ]: 0 : ScXMLDataPilotGroup aGroup;
1054 [ # # ]: 0 : aGroup.aMembers = rMembers;
1055 : 0 : aGroup.aName = rName;
1056 [ # # ]: 0 : aGroups.push_back(aGroup);
1057 : 0 : }
1058 : :
1059 : 22 : void ScXMLDataPilotFieldContext::EndElement()
1060 : : {
1061 [ + - ]: 22 : if (pDim)
1062 : : {
1063 : 22 : pDim->SetUsedHierarchy(nUsedHierarchy);
1064 : 22 : pDim->SetFunction(nFunction);
1065 : 22 : pDim->SetOrientation(nOrientation);
1066 [ - + ]: 22 : if (bSelectedPage)
1067 : : {
1068 : 0 : pDim->SetCurrentPage(&sSelectedPage);
1069 : : }
1070 : 22 : pDataPilotTable->AddDimension(pDim);
1071 [ - + ]: 22 : if (bIsGroupField)
1072 : : {
1073 [ # # ]: 0 : ScDPNumGroupInfo aInfo;
1074 : 0 : aInfo.mbEnable = true;
1075 : 0 : aInfo.mbDateValues = bDateValue;
1076 : 0 : aInfo.mbAutoStart = bAutoStart;
1077 : 0 : aInfo.mbAutoEnd = bAutoEnd;
1078 : 0 : aInfo.mfStart = fStart;
1079 : 0 : aInfo.mfEnd = fEnd;
1080 : 0 : aInfo.mfStep = fStep;
1081 [ # # ]: 0 : if (!sGroupSource.isEmpty())
1082 : : {
1083 [ # # ]: 0 : ScDPSaveGroupDimension aGroupDim(sGroupSource, sName);
1084 [ # # ]: 0 : if (nGroupPart)
1085 [ # # ]: 0 : aGroupDim.SetDateInfo(aInfo, nGroupPart);
1086 : : else
1087 : : {
1088 [ # # ]: 0 : ::std::vector<ScXMLDataPilotGroup>::const_iterator aItr(aGroups.begin());
1089 [ # # ]: 0 : ::std::vector<ScXMLDataPilotGroup>::const_iterator aEndItr(aGroups.end());
1090 [ # # ][ # # ]: 0 : while (aItr != aEndItr)
1091 : : {
1092 [ # # ]: 0 : ScDPSaveGroupItem aItem(aItr->aName);
1093 : 0 : ::std::vector<rtl::OUString>::const_iterator aMembersItr(aItr->aMembers.begin());
1094 : 0 : ::std::vector<rtl::OUString>::const_iterator aMembersEndItr(aItr->aMembers.end());
1095 [ # # ][ # # ]: 0 : while (aMembersItr != aMembersEndItr)
1096 : : {
1097 [ # # ]: 0 : aItem.AddElement(*aMembersItr);
1098 : 0 : ++aMembersItr;
1099 : : }
1100 : 0 : ++aItr;
1101 [ # # ]: 0 : aGroupDim.AddGroupItem(aItem);
1102 [ # # ]: 0 : }
1103 : : }
1104 [ # # ][ # # ]: 0 : pDataPilotTable->AddGroupDim(aGroupDim);
1105 : : }
1106 : : else //NumGroup
1107 : : {
1108 [ # # ]: 0 : ScDPSaveNumGroupDimension aNumGroupDim(sName, aInfo);
1109 [ # # ]: 0 : if (nGroupPart)
1110 [ # # ]: 0 : aNumGroupDim.SetDateInfo(aInfo, nGroupPart);
1111 [ # # ][ # # ]: 0 : pDataPilotTable->AddGroupDim(aNumGroupDim);
1112 : : }
1113 : : }
1114 : : }
1115 : 22 : }
1116 : :
1117 : 0 : ScXMLDataPilotFieldReferenceContext::ScXMLDataPilotFieldReferenceContext( ScXMLImport& rImport, sal_uInt16 nPrfx,
1118 : : const ::rtl::OUString& rLName,
1119 : : const uno::Reference<xml::sax::XAttributeList>& xAttrList,
1120 : : ScXMLDataPilotFieldContext* pDataPilotField) :
1121 : 0 : SvXMLImportContext( rImport, nPrfx, rLName )
1122 : : {
1123 : 0 : sheet::DataPilotFieldReference aReference;
1124 : :
1125 [ # # ][ # # ]: 0 : sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
[ # # ]
1126 [ # # ]: 0 : for( sal_Int16 i=0; i < nAttrCount; i++ )
1127 : : {
1128 [ # # ][ # # ]: 0 : rtl::OUString sAttrName(xAttrList->getNameByIndex( i ));
1129 : 0 : rtl::OUString aLocalName;
1130 : 0 : sal_uInt16 nPrefix = GetScImport().GetNamespaceMap().GetKeyByAttrName(
1131 [ # # ]: 0 : sAttrName, &aLocalName );
1132 [ # # ][ # # ]: 0 : rtl::OUString sValue(xAttrList->getValueByIndex( i ));
1133 : :
1134 [ # # ]: 0 : if ( nPrefix == XML_NAMESPACE_TABLE )
1135 : : {
1136 [ # # ][ # # ]: 0 : if (IsXMLToken(aLocalName, XML_TYPE))
1137 : : {
1138 [ # # ][ # # ]: 0 : if (IsXMLToken(sValue, XML_NONE))
1139 : 0 : aReference.ReferenceType = sheet::DataPilotFieldReferenceType::NONE;
1140 [ # # ][ # # ]: 0 : else if (IsXMLToken(sValue, XML_MEMBER_DIFFERENCE))
1141 : 0 : aReference.ReferenceType = sheet::DataPilotFieldReferenceType::ITEM_DIFFERENCE;
1142 [ # # ][ # # ]: 0 : else if (IsXMLToken(sValue, XML_MEMBER_PERCENTAGE))
1143 : 0 : aReference.ReferenceType = sheet::DataPilotFieldReferenceType::ITEM_PERCENTAGE;
1144 [ # # ][ # # ]: 0 : else if (IsXMLToken(sValue, XML_MEMBER_PERCENTAGE_DIFFERENCE))
1145 : 0 : aReference.ReferenceType = sheet::DataPilotFieldReferenceType::ITEM_PERCENTAGE_DIFFERENCE;
1146 [ # # ][ # # ]: 0 : else if (IsXMLToken(sValue, XML_RUNNING_TOTAL))
1147 : 0 : aReference.ReferenceType = sheet::DataPilotFieldReferenceType::RUNNING_TOTAL;
1148 [ # # ][ # # ]: 0 : else if (IsXMLToken(sValue, XML_ROW_PERCENTAGE))
1149 : 0 : aReference.ReferenceType = sheet::DataPilotFieldReferenceType::ROW_PERCENTAGE;
1150 [ # # ][ # # ]: 0 : else if (IsXMLToken(sValue, XML_COLUMN_PERCENTAGE))
1151 : 0 : aReference.ReferenceType = sheet::DataPilotFieldReferenceType::COLUMN_PERCENTAGE;
1152 [ # # ][ # # ]: 0 : else if (IsXMLToken(sValue, XML_TOTAL_PERCENTAGE))
1153 : 0 : aReference.ReferenceType = sheet::DataPilotFieldReferenceType::TOTAL_PERCENTAGE;
1154 [ # # ][ # # ]: 0 : else if (IsXMLToken(sValue, XML_INDEX))
1155 : 0 : aReference.ReferenceType = sheet::DataPilotFieldReferenceType::INDEX;
1156 : : }
1157 [ # # ][ # # ]: 0 : else if (IsXMLToken(aLocalName, XML_FIELD_NAME))
1158 : : {
1159 : 0 : aReference.ReferenceField = sValue;
1160 : : }
1161 [ # # ][ # # ]: 0 : else if (IsXMLToken(aLocalName, XML_MEMBER_TYPE))
1162 : : {
1163 [ # # ][ # # ]: 0 : if (IsXMLToken(sValue, XML_NAMED))
1164 : 0 : aReference.ReferenceItemType = sheet::DataPilotFieldReferenceItemType::NAMED;
1165 [ # # ][ # # ]: 0 : else if (IsXMLToken(sValue, XML_PREVIOUS))
1166 : 0 : aReference.ReferenceItemType = sheet::DataPilotFieldReferenceItemType::PREVIOUS;
1167 [ # # ][ # # ]: 0 : else if (IsXMLToken(sValue, XML_NEXT))
1168 : 0 : aReference.ReferenceItemType = sheet::DataPilotFieldReferenceItemType::NEXT;
1169 : : }
1170 [ # # ][ # # ]: 0 : else if (IsXMLToken(aLocalName, XML_MEMBER_NAME))
1171 : : {
1172 : 0 : aReference.ReferenceItemName = sValue;
1173 : : }
1174 : : }
1175 : 0 : }
1176 [ # # ]: 0 : pDataPilotField->SetFieldReference(aReference);
1177 : 0 : }
1178 : :
1179 : 0 : ScXMLDataPilotFieldReferenceContext::~ScXMLDataPilotFieldReferenceContext()
1180 : : {
1181 [ # # ]: 0 : }
1182 : :
1183 : 22 : ScXMLDataPilotLevelContext::ScXMLDataPilotLevelContext( ScXMLImport& rImport,
1184 : : sal_uInt16 nPrfx,
1185 : : const ::rtl::OUString& rLName,
1186 : : const ::com::sun::star::uno::Reference<
1187 : : ::com::sun::star::xml::sax::XAttributeList>& xAttrList,
1188 : : ScXMLDataPilotFieldContext* pTempDataPilotField) :
1189 : : SvXMLImportContext( rImport, nPrfx, rLName ),
1190 : 22 : pDataPilotField(pTempDataPilotField)
1191 : : {
1192 [ + - ][ + - ]: 22 : sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
[ + - ]
1193 [ + - ]: 22 : const SvXMLTokenMap& rAttrTokenMap = GetScImport().GetDataPilotLevelAttrTokenMap();
1194 [ + + ]: 32 : for( sal_Int16 i=0; i < nAttrCount; ++i )
1195 : : {
1196 [ + - ][ + - ]: 10 : const rtl::OUString& sAttrName(xAttrList->getNameByIndex( i ));
1197 : 10 : rtl::OUString aLocalName;
1198 : 10 : sal_uInt16 nPrefix = GetScImport().GetNamespaceMap().GetKeyByAttrName(
1199 [ + - ]: 10 : sAttrName, &aLocalName );
1200 [ + - ][ + - ]: 10 : const rtl::OUString& sValue(xAttrList->getValueByIndex( i ));
1201 : :
1202 [ + - ][ + - ]: 10 : switch( rAttrTokenMap.Get( nPrefix, aLocalName ) )
1203 : : {
1204 : : case XML_TOK_DATA_PILOT_LEVEL_ATTR_SHOW_EMPTY :
1205 : : {
1206 [ + - ][ + - ]: 10 : pDataPilotField->SetShowEmpty(IsXMLToken(sValue, XML_TRUE));
1207 : : }
1208 : 10 : break;
1209 : : }
1210 : 10 : }
1211 : 22 : }
1212 : :
1213 : 22 : ScXMLDataPilotLevelContext::~ScXMLDataPilotLevelContext()
1214 : : {
1215 [ - + ]: 44 : }
1216 : :
1217 : 38 : SvXMLImportContext *ScXMLDataPilotLevelContext::CreateChildContext( sal_uInt16 nPrefix,
1218 : : const ::rtl::OUString& rLName,
1219 : : const ::com::sun::star::uno::Reference<
1220 : : ::com::sun::star::xml::sax::XAttributeList>& xAttrList )
1221 : : {
1222 : 38 : SvXMLImportContext *pContext = 0;
1223 : :
1224 : 38 : const SvXMLTokenMap& rTokenMap = GetScImport().GetDataPilotLevelElemTokenMap();
1225 [ + + + + : 38 : switch( rTokenMap.Get( nPrefix, rLName ) )
+ - ]
1226 : : {
1227 : : case XML_TOK_DATA_PILOT_LEVEL_ELEM_DATA_PILOT_SUBTOTALS :
1228 [ + - ]: 6 : pContext = new ScXMLDataPilotSubTotalsContext(GetScImport(), nPrefix, rLName, xAttrList, pDataPilotField);
1229 : 6 : break;
1230 : : case XML_TOK_DATA_PILOT_LEVEL_ELEM_DATA_PILOT_MEMBERS :
1231 [ + - ]: 8 : pContext = new ScXMLDataPilotMembersContext(GetScImport(), nPrefix, rLName, xAttrList, pDataPilotField);
1232 : 8 : break;
1233 : : case XML_TOK_DATA_PILOT_FIELD_ELEM_DATA_PILOT_DISPLAY_INFO :
1234 [ + - ]: 8 : pContext = new ScXMLDataPilotDisplayInfoContext(GetScImport(), nPrefix, rLName, xAttrList, pDataPilotField);
1235 : 8 : break;
1236 : : case XML_TOK_DATA_PILOT_FIELD_ELEM_DATA_PILOT_SORT_INFO :
1237 [ + - ]: 8 : pContext = new ScXMLDataPilotSortInfoContext(GetScImport(), nPrefix, rLName, xAttrList, pDataPilotField);
1238 : 8 : break;
1239 : : case XML_TOK_DATA_PILOT_FIELD_ELEM_DATA_PILOT_LAYOUT_INFO :
1240 [ + - ]: 8 : pContext = new ScXMLDataPilotLayoutInfoContext(GetScImport(), nPrefix, rLName, xAttrList, pDataPilotField);
1241 : 8 : break;
1242 : : }
1243 : :
1244 [ - + ]: 38 : if( !pContext )
1245 [ # # ]: 0 : pContext = new SvXMLImportContext( GetImport(), nPrefix, rLName );
1246 : :
1247 : 38 : return pContext;
1248 : : }
1249 : :
1250 : 22 : void ScXMLDataPilotLevelContext::EndElement()
1251 : : {
1252 : 22 : }
1253 : :
1254 : 8 : ScXMLDataPilotDisplayInfoContext::ScXMLDataPilotDisplayInfoContext( ScXMLImport& rImport, sal_uInt16 nPrfx,
1255 : : const ::rtl::OUString& rLName,
1256 : : const ::com::sun::star::uno::Reference<
1257 : : ::com::sun::star::xml::sax::XAttributeList>& xAttrList,
1258 : : ScXMLDataPilotFieldContext* pDataPilotField) :
1259 : 8 : SvXMLImportContext( rImport, nPrfx, rLName )
1260 : : {
1261 : 8 : sheet::DataPilotFieldAutoShowInfo aInfo;
1262 : :
1263 [ + - ][ + - ]: 8 : sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
[ + - ]
1264 [ + + ]: 40 : for( sal_Int16 i=0; i < nAttrCount; i++ )
1265 : : {
1266 [ + - ][ + - ]: 32 : rtl::OUString sAttrName(xAttrList->getNameByIndex( i ));
1267 : 32 : rtl::OUString aLocalName;
1268 : 32 : sal_uInt16 nPrefix = GetScImport().GetNamespaceMap().GetKeyByAttrName(
1269 [ + - ]: 32 : sAttrName, &aLocalName );
1270 [ + - ][ + - ]: 32 : rtl::OUString sValue(xAttrList->getValueByIndex( i ));
1271 : :
1272 [ + - ]: 32 : if ( nPrefix == XML_NAMESPACE_TABLE )
1273 : : {
1274 [ + - ][ + + ]: 32 : if (IsXMLToken(aLocalName, XML_ENABLED))
1275 : : {
1276 [ + - ][ - + ]: 8 : if (IsXMLToken(sValue, XML_TRUE))
1277 : 0 : aInfo.IsEnabled = sal_True;
1278 : : else
1279 : 8 : aInfo.IsEnabled = false;
1280 : : }
1281 [ + - ][ + + ]: 24 : else if (IsXMLToken(aLocalName, XML_DISPLAY_MEMBER_MODE))
1282 : : {
1283 [ + - ][ + - ]: 8 : if (IsXMLToken(sValue, XML_FROM_TOP))
1284 : 8 : aInfo.ShowItemsMode = sheet::DataPilotFieldShowItemsMode::FROM_TOP;
1285 [ # # ][ # # ]: 0 : else if (IsXMLToken(sValue, XML_FROM_BOTTOM))
1286 : 0 : aInfo.ShowItemsMode = sheet::DataPilotFieldShowItemsMode::FROM_BOTTOM;
1287 : : }
1288 [ + - ][ + + ]: 16 : else if (IsXMLToken(aLocalName, XML_MEMBER_COUNT))
1289 : : {
1290 : 8 : aInfo.ItemCount = sValue.toInt32();
1291 : : }
1292 [ + - ][ + - ]: 8 : else if (IsXMLToken(aLocalName, XML_DATA_FIELD))
1293 : : {
1294 : 8 : aInfo.DataField = sValue;
1295 : : }
1296 : : }
1297 : 32 : }
1298 [ + - ]: 8 : pDataPilotField->SetAutoShowInfo(aInfo);
1299 : 8 : }
1300 : :
1301 : 8 : ScXMLDataPilotDisplayInfoContext::~ScXMLDataPilotDisplayInfoContext()
1302 : : {
1303 [ - + ]: 16 : }
1304 : :
1305 : 8 : ScXMLDataPilotSortInfoContext::ScXMLDataPilotSortInfoContext( ScXMLImport& rImport, sal_uInt16 nPrfx,
1306 : : const ::rtl::OUString& rLName,
1307 : : const ::com::sun::star::uno::Reference<
1308 : : ::com::sun::star::xml::sax::XAttributeList>& xAttrList,
1309 : : ScXMLDataPilotFieldContext* pDataPilotField) :
1310 : 8 : SvXMLImportContext( rImport, nPrfx, rLName )
1311 : : {
1312 : 8 : sheet::DataPilotFieldSortInfo aInfo;
1313 : :
1314 [ + - ][ + - ]: 8 : sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
[ + - ]
1315 [ + + ]: 24 : for( sal_Int16 i=0; i < nAttrCount; i++ )
1316 : : {
1317 [ + - ][ + - ]: 16 : rtl::OUString sAttrName(xAttrList->getNameByIndex( i ));
1318 : 16 : rtl::OUString aLocalName;
1319 : 16 : sal_uInt16 nPrefix = GetScImport().GetNamespaceMap().GetKeyByAttrName(
1320 [ + - ]: 16 : sAttrName, &aLocalName );
1321 [ + - ][ + - ]: 16 : rtl::OUString sValue(xAttrList->getValueByIndex( i ));
1322 : :
1323 [ + - ]: 16 : if ( nPrefix == XML_NAMESPACE_TABLE )
1324 : : {
1325 [ + - ][ + + ]: 16 : if (IsXMLToken(aLocalName, XML_ORDER))
1326 : : {
1327 [ + - ][ + - ]: 8 : if (IsXMLToken(sValue, XML_ASCENDING))
1328 : 8 : aInfo.IsAscending = sal_True;
1329 [ # # ][ # # ]: 0 : else if (IsXMLToken(sValue, XML_DESCENDING))
1330 : 0 : aInfo.IsAscending = false;
1331 : : }
1332 [ + - ][ + - ]: 8 : else if (IsXMLToken(aLocalName, XML_SORT_MODE))
1333 : : {
1334 [ + - ][ - + ]: 8 : if (IsXMLToken(sValue, XML_NONE))
1335 : 0 : aInfo.Mode = sheet::DataPilotFieldSortMode::NONE;
1336 [ + - ][ - + ]: 8 : else if (IsXMLToken(sValue, XML_MANUAL))
1337 : 0 : aInfo.Mode = sheet::DataPilotFieldSortMode::MANUAL;
1338 [ + - ][ + - ]: 8 : else if (IsXMLToken(sValue, XML_NAME))
1339 : 8 : aInfo.Mode = sheet::DataPilotFieldSortMode::NAME;
1340 [ # # ][ # # ]: 0 : else if (IsXMLToken(sValue, XML_DATA))
1341 : 0 : aInfo.Mode = sheet::DataPilotFieldSortMode::DATA;
1342 : : }
1343 [ # # ][ # # ]: 0 : else if (IsXMLToken(aLocalName, XML_DATA_FIELD))
1344 : 0 : aInfo.Field = sValue;
1345 : : }
1346 : 16 : }
1347 [ + - ]: 8 : pDataPilotField->SetSortInfo(aInfo);
1348 : 8 : }
1349 : :
1350 : 8 : ScXMLDataPilotSortInfoContext::~ScXMLDataPilotSortInfoContext()
1351 : : {
1352 [ - + ]: 16 : }
1353 : :
1354 : 8 : ScXMLDataPilotLayoutInfoContext::ScXMLDataPilotLayoutInfoContext( ScXMLImport& rImport, sal_uInt16 nPrfx,
1355 : : const ::rtl::OUString& rLName,
1356 : : const ::com::sun::star::uno::Reference<
1357 : : ::com::sun::star::xml::sax::XAttributeList>& xAttrList,
1358 : : ScXMLDataPilotFieldContext* pDataPilotField) :
1359 : 8 : SvXMLImportContext( rImport, nPrfx, rLName )
1360 : : {
1361 : 8 : sheet::DataPilotFieldLayoutInfo aInfo;
1362 : :
1363 [ + - ][ + - ]: 8 : sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
[ + - ]
1364 [ + + ]: 24 : for( sal_Int16 i=0; i < nAttrCount; i++ )
1365 : : {
1366 [ + - ][ + - ]: 16 : rtl::OUString sAttrName(xAttrList->getNameByIndex( i ));
1367 : 16 : rtl::OUString aLocalName;
1368 : 16 : sal_uInt16 nPrefix = GetScImport().GetNamespaceMap().GetKeyByAttrName(
1369 [ + - ]: 16 : sAttrName, &aLocalName );
1370 [ + - ][ + - ]: 16 : rtl::OUString sValue(xAttrList->getValueByIndex( i ));
1371 : :
1372 [ + - ]: 16 : if ( nPrefix == XML_NAMESPACE_TABLE )
1373 : : {
1374 [ + - ][ + + ]: 16 : if (IsXMLToken(aLocalName, XML_ADD_EMPTY_LINES))
1375 : : {
1376 [ + - ][ - + ]: 8 : if (IsXMLToken(sValue, XML_TRUE))
1377 : 0 : aInfo.AddEmptyLines = sal_True;
1378 : : else
1379 : 8 : aInfo.AddEmptyLines = false;
1380 : : }
1381 [ + - ][ + - ]: 8 : else if (IsXMLToken(aLocalName, XML_LAYOUT_MODE))
1382 : : {
1383 [ + - ][ + - ]: 8 : if (IsXMLToken(sValue, XML_TABULAR_LAYOUT))
1384 : 8 : aInfo.LayoutMode = sheet::DataPilotFieldLayoutMode::TABULAR_LAYOUT;
1385 [ # # ][ # # ]: 0 : else if (IsXMLToken(sValue, XML_OUTLINE_SUBTOTALS_TOP))
1386 : 0 : aInfo.LayoutMode = sheet::DataPilotFieldLayoutMode::OUTLINE_SUBTOTALS_TOP;
1387 [ # # ][ # # ]: 0 : else if (IsXMLToken(sValue, XML_OUTLINE_SUBTOTALS_BOTTOM))
1388 : 0 : aInfo.LayoutMode = sheet::DataPilotFieldLayoutMode::OUTLINE_SUBTOTALS_BOTTOM;
1389 : : }
1390 : : }
1391 : 16 : }
1392 [ + - ]: 8 : pDataPilotField->SetLayoutInfo(aInfo);}
1393 : :
1394 : 8 : ScXMLDataPilotLayoutInfoContext::~ScXMLDataPilotLayoutInfoContext()
1395 : : {
1396 [ - + ]: 16 : }
1397 : :
1398 : 6 : ScXMLDataPilotSubTotalsContext::ScXMLDataPilotSubTotalsContext( ScXMLImport& rImport,
1399 : : sal_uInt16 nPrfx,
1400 : : const ::rtl::OUString& rLName,
1401 : : const ::com::sun::star::uno::Reference<
1402 : : ::com::sun::star::xml::sax::XAttributeList>& /* xAttrList */,
1403 : : ScXMLDataPilotFieldContext* pTempDataPilotField) :
1404 : : SvXMLImportContext( rImport, nPrfx, rLName ),
1405 : : pDataPilotField(pTempDataPilotField),
1406 : : nFunctionCount(0),
1407 : 6 : pFunctions(NULL)
1408 : : {
1409 : :
1410 : : // has no attributes
1411 : 6 : }
1412 : :
1413 : 6 : ScXMLDataPilotSubTotalsContext::~ScXMLDataPilotSubTotalsContext()
1414 : : {
1415 [ - + ]: 12 : }
1416 : :
1417 : 6 : SvXMLImportContext *ScXMLDataPilotSubTotalsContext::CreateChildContext( sal_uInt16 nPrefix,
1418 : : const ::rtl::OUString& rLName,
1419 : : const ::com::sun::star::uno::Reference<
1420 : : ::com::sun::star::xml::sax::XAttributeList>& xAttrList )
1421 : : {
1422 : 6 : SvXMLImportContext *pContext = 0;
1423 : :
1424 : 6 : const SvXMLTokenMap& rTokenMap = GetScImport().GetDataPilotSubTotalsElemTokenMap();
1425 [ + - ]: 6 : switch( rTokenMap.Get( nPrefix, rLName ) )
1426 : : {
1427 : : case XML_TOK_DATA_PILOT_SUBTOTALS_ELEM_DATA_PILOT_SUBTOTAL :
1428 [ + - ]: 6 : pContext = new ScXMLDataPilotSubTotalContext(GetScImport(), nPrefix, rLName, xAttrList, this);
1429 : 6 : break;
1430 : : }
1431 : :
1432 [ - + ]: 6 : if( !pContext )
1433 [ # # ]: 0 : pContext = new SvXMLImportContext( GetImport(), nPrefix, rLName );
1434 : :
1435 : 6 : return pContext;
1436 : : }
1437 : :
1438 : 6 : void ScXMLDataPilotSubTotalsContext::EndElement()
1439 : : {
1440 : 6 : pDataPilotField->SetSubTotals(pFunctions, nFunctionCount);
1441 [ - + ]: 6 : if (!maDisplayName.isEmpty())
1442 : 0 : pDataPilotField->SetSubTotalName(maDisplayName);
1443 : 6 : }
1444 : :
1445 : 6 : void ScXMLDataPilotSubTotalsContext::AddFunction(sal_Int16 nFunction)
1446 : : {
1447 [ - + ]: 6 : if (nFunctionCount)
1448 : : {
1449 : 0 : ++nFunctionCount;
1450 : 0 : sal_uInt16* pTemp = new sal_uInt16[nFunctionCount];
1451 [ # # ]: 0 : for (sal_Int16 i = 0; i < nFunctionCount - 1; ++i)
1452 : 0 : pTemp[i] = pFunctions[i];
1453 : 0 : pTemp[nFunctionCount - 1] = nFunction;
1454 [ # # ]: 0 : delete[] pFunctions;
1455 : 0 : pFunctions = pTemp;
1456 : : }
1457 : : else
1458 : : {
1459 : 6 : nFunctionCount = 1;
1460 : 6 : pFunctions = new sal_uInt16[nFunctionCount];
1461 : 6 : pFunctions[0] = nFunction;
1462 : : }
1463 : 6 : }
1464 : :
1465 : 0 : void ScXMLDataPilotSubTotalsContext::SetDisplayName(const OUString& rName)
1466 : : {
1467 : 0 : maDisplayName = rName;
1468 : 0 : }
1469 : :
1470 : 6 : ScXMLDataPilotSubTotalContext::ScXMLDataPilotSubTotalContext( ScXMLImport& rImport,
1471 : : sal_uInt16 nPrfx,
1472 : : const ::rtl::OUString& rLName,
1473 : : const ::com::sun::star::uno::Reference<
1474 : : ::com::sun::star::xml::sax::XAttributeList>& xAttrList,
1475 : : ScXMLDataPilotSubTotalsContext* pTempDataPilotSubTotals) :
1476 : : SvXMLImportContext( rImport, nPrfx, rLName ),
1477 : 6 : pDataPilotSubTotals(pTempDataPilotSubTotals)
1478 : : {
1479 [ + - ][ + - ]: 6 : sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
[ + - ]
1480 [ + - ]: 6 : const SvXMLTokenMap& rAttrTokenMap = GetScImport().GetDataPilotSubTotalAttrTokenMap();
1481 [ + + ]: 12 : for( sal_Int16 i=0; i < nAttrCount; ++i )
1482 : : {
1483 [ + - ][ + - ]: 6 : const rtl::OUString& sAttrName(xAttrList->getNameByIndex( i ));
1484 : 6 : rtl::OUString aLocalName;
1485 : 6 : sal_uInt16 nPrefix = GetScImport().GetNamespaceMap().GetKeyByAttrName(
1486 [ + - ]: 6 : sAttrName, &aLocalName );
1487 [ + - ][ + - ]: 6 : const rtl::OUString& sValue(xAttrList->getValueByIndex( i ));
1488 : :
1489 [ + - ]: 6 : switch( rAttrTokenMap.Get( nPrefix, aLocalName ) )
[ + - - ]
1490 : : {
1491 : : case XML_TOK_DATA_PILOT_SUBTOTAL_ATTR_FUNCTION :
1492 : : {
1493 : : pDataPilotSubTotals->AddFunction( sal::static_int_cast<sal_Int16>(
1494 [ + - ][ + - ]: 6 : ScXMLConverter::GetFunctionFromString( sValue ) ) );
1495 : : }
1496 : 6 : break;
1497 : : case XML_TOK_DATA_PILOT_SUBTOTAL_ATTR_DISPLAY_NAME:
1498 : : case XML_TOK_DATA_PILOT_SUBTOTAL_ATTR_DISPLAY_NAME_EXT:
1499 : 0 : pDataPilotSubTotals->SetDisplayName(sValue);
1500 : 0 : break;
1501 : : }
1502 : 6 : }
1503 : 6 : }
1504 : :
1505 : 6 : ScXMLDataPilotSubTotalContext::~ScXMLDataPilotSubTotalContext()
1506 : : {
1507 [ - + ]: 12 : }
1508 : :
1509 : 0 : SvXMLImportContext *ScXMLDataPilotSubTotalContext::CreateChildContext( sal_uInt16 nPrefix,
1510 : : const ::rtl::OUString& rLName,
1511 : : const ::com::sun::star::uno::Reference<
1512 : : ::com::sun::star::xml::sax::XAttributeList>& /* xAttrList */ )
1513 : : {
1514 : 0 : SvXMLImportContext *pContext = 0;
1515 : :
1516 [ # # ]: 0 : if( !pContext )
1517 [ # # ]: 0 : pContext = new SvXMLImportContext( GetImport(), nPrefix, rLName );
1518 : :
1519 : 0 : return pContext;
1520 : : }
1521 : :
1522 : 6 : void ScXMLDataPilotSubTotalContext::EndElement()
1523 : : {
1524 : 6 : }
1525 : :
1526 : 8 : ScXMLDataPilotMembersContext::ScXMLDataPilotMembersContext( ScXMLImport& rImport,
1527 : : sal_uInt16 nPrfx,
1528 : : const ::rtl::OUString& rLName,
1529 : : const ::com::sun::star::uno::Reference<
1530 : : ::com::sun::star::xml::sax::XAttributeList>& /* xAttrList */,
1531 : : ScXMLDataPilotFieldContext* pTempDataPilotField) :
1532 : : SvXMLImportContext( rImport, nPrfx, rLName ),
1533 : 8 : pDataPilotField(pTempDataPilotField)
1534 : : {
1535 : : // has no attributes
1536 : 8 : }
1537 : :
1538 : 8 : ScXMLDataPilotMembersContext::~ScXMLDataPilotMembersContext()
1539 : : {
1540 [ - + ]: 16 : }
1541 : :
1542 : 40 : SvXMLImportContext *ScXMLDataPilotMembersContext::CreateChildContext( sal_uInt16 nPrefix,
1543 : : const ::rtl::OUString& rLName,
1544 : : const ::com::sun::star::uno::Reference<
1545 : : ::com::sun::star::xml::sax::XAttributeList>& xAttrList )
1546 : : {
1547 : 40 : SvXMLImportContext *pContext = 0;
1548 : :
1549 : 40 : const SvXMLTokenMap& rTokenMap = GetScImport().GetDataPilotMembersElemTokenMap();
1550 [ + - ]: 40 : switch( rTokenMap.Get( nPrefix, rLName ) )
1551 : : {
1552 : : case XML_TOK_DATA_PILOT_MEMBERS_ELEM_DATA_PILOT_MEMBER :
1553 [ + - ]: 40 : pContext = new ScXMLDataPilotMemberContext(GetScImport(), nPrefix, rLName, xAttrList, pDataPilotField);
1554 : 40 : break;
1555 : : }
1556 : :
1557 [ - + ]: 40 : if( !pContext )
1558 [ # # ]: 0 : pContext = new SvXMLImportContext( GetImport(), nPrefix, rLName );
1559 : :
1560 : 40 : return pContext;
1561 : : }
1562 : :
1563 : 8 : void ScXMLDataPilotMembersContext::EndElement()
1564 : : {
1565 : 8 : }
1566 : :
1567 : 40 : ScXMLDataPilotMemberContext::ScXMLDataPilotMemberContext( ScXMLImport& rImport,
1568 : : sal_uInt16 nPrfx,
1569 : : const ::rtl::OUString& rLName,
1570 : : const ::com::sun::star::uno::Reference<
1571 : : ::com::sun::star::xml::sax::XAttributeList>& xAttrList,
1572 : : ScXMLDataPilotFieldContext* pTempDataPilotField) :
1573 : : SvXMLImportContext( rImport, nPrfx, rLName ),
1574 : : pDataPilotField(pTempDataPilotField),
1575 : : bDisplay( sal_True ),
1576 : : bDisplayDetails( sal_True ),
1577 : 40 : bHasName( false )
1578 : : {
1579 [ + - ][ + - ]: 40 : sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
[ + - ]
1580 [ + - ]: 40 : const SvXMLTokenMap& rAttrTokenMap = GetScImport().GetDataPilotMemberAttrTokenMap();
1581 [ + + ]: 160 : for( sal_Int16 i=0; i < nAttrCount; ++i )
1582 : : {
1583 [ + - ][ + - ]: 120 : const rtl::OUString& sAttrName(xAttrList->getNameByIndex( i ));
1584 : 120 : rtl::OUString aLocalName;
1585 : 120 : sal_uInt16 nPrefix = GetScImport().GetNamespaceMap().GetKeyByAttrName(
1586 [ + - ]: 120 : sAttrName, &aLocalName );
1587 [ + - ][ + - ]: 120 : const rtl::OUString& sValue(xAttrList->getValueByIndex( i ));
1588 : :
1589 [ + - ][ + - : 120 : switch( rAttrTokenMap.Get( nPrefix, aLocalName ) )
+ + - ]
1590 : : {
1591 : : case XML_TOK_DATA_PILOT_MEMBER_ATTR_NAME :
1592 : : {
1593 : 40 : sName = sValue;
1594 : 40 : bHasName = sal_True;
1595 : : }
1596 : 40 : break;
1597 : : case XML_TOK_DATA_PILOT_MEMBER_ATTR_DISPLAY_NAME:
1598 : : case XML_TOK_DATA_PILOT_MEMBER_ATTR_DISPLAY_NAME_EXT:
1599 : : {
1600 : 0 : maDisplayName = sValue;
1601 : : }
1602 : : case XML_TOK_DATA_PILOT_MEMBER_ATTR_DISPLAY :
1603 : : {
1604 [ + - ]: 40 : bDisplay = IsXMLToken(sValue, XML_TRUE);
1605 : : }
1606 : 40 : break;
1607 : : case XML_TOK_DATA_PILOT_MEMBER_ATTR_SHOW_DETAILS :
1608 : : {
1609 [ + - ]: 40 : bDisplayDetails = IsXMLToken(sValue, XML_TRUE);
1610 : : }
1611 : 40 : break;
1612 : : }
1613 : 120 : }
1614 : 40 : }
1615 : :
1616 : 40 : ScXMLDataPilotMemberContext::~ScXMLDataPilotMemberContext()
1617 : : {
1618 [ - + ]: 80 : }
1619 : :
1620 : 0 : SvXMLImportContext *ScXMLDataPilotMemberContext::CreateChildContext( sal_uInt16 nPrefix,
1621 : : const ::rtl::OUString& rLName,
1622 : : const ::com::sun::star::uno::Reference<
1623 : : ::com::sun::star::xml::sax::XAttributeList>& /* xAttrList */ )
1624 : : {
1625 : 0 : SvXMLImportContext *pContext = 0;
1626 : :
1627 [ # # ]: 0 : if( !pContext )
1628 [ # # ]: 0 : pContext = new SvXMLImportContext( GetImport(), nPrefix, rLName );
1629 : :
1630 : 0 : return pContext;
1631 : : }
1632 : :
1633 : 40 : void ScXMLDataPilotMemberContext::EndElement()
1634 : : {
1635 [ + - ]: 40 : if (bHasName) // #i53407# don't check sName, empty name is allowed
1636 : : {
1637 [ + - ]: 40 : ScDPSaveMember* pMember = new ScDPSaveMember(sName);
1638 [ - + ]: 40 : if (!maDisplayName.isEmpty())
1639 : 0 : pMember->SetLayoutName(maDisplayName);
1640 : 40 : pMember->SetIsVisible(bDisplay);
1641 : 40 : pMember->SetShowDetails(bDisplayDetails);
1642 : 40 : pDataPilotField->AddMember(pMember);
1643 : : }
1644 : 40 : }
1645 : :
1646 : 0 : ScXMLDataPilotGroupsContext::ScXMLDataPilotGroupsContext( ScXMLImport& rImport,
1647 : : sal_uInt16 nPrfx,
1648 : : const ::rtl::OUString& rLName,
1649 : : const ::com::sun::star::uno::Reference<
1650 : : ::com::sun::star::xml::sax::XAttributeList>& xAttrList,
1651 : : ScXMLDataPilotFieldContext* pTempDataPilotField) :
1652 : : SvXMLImportContext( rImport, nPrfx, rLName ),
1653 : 0 : pDataPilotField(pTempDataPilotField)
1654 : : {
1655 : 0 : rtl::OUString sGroupSource;
1656 : 0 : double fStart(0.0);
1657 : 0 : double fEnd(0.0);
1658 : 0 : double fStep(0.0);
1659 : 0 : sal_Int32 nGroupPart(0);
1660 : 0 : sal_Bool bDateValue(false);
1661 : 0 : sal_Bool bAutoStart(sal_True);
1662 : 0 : sal_Bool bAutoEnd(sal_True);
1663 : :
1664 [ # # ][ # # ]: 0 : sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
[ # # ]
1665 [ # # ]: 0 : for( sal_Int16 i=0; i < nAttrCount; i++ )
1666 : : {
1667 [ # # ][ # # ]: 0 : rtl::OUString sAttrName = xAttrList->getNameByIndex( i );
1668 : 0 : rtl::OUString aLocalName;
1669 : 0 : sal_uInt16 nPrefix = GetScImport().GetNamespaceMap().GetKeyByAttrName(
1670 [ # # ]: 0 : sAttrName, &aLocalName );
1671 [ # # ][ # # ]: 0 : rtl::OUString sValue = xAttrList->getValueByIndex( i );
1672 : :
1673 : : (void)nPrefix; //! compare below!
1674 : :
1675 [ # # ][ # # ]: 0 : if (IsXMLToken(aLocalName, XML_SOURCE_FIELD_NAME))
1676 : 0 : sGroupSource = sValue;
1677 [ # # ][ # # ]: 0 : else if (IsXMLToken(aLocalName, XML_DATE_START))
1678 : : {
1679 : 0 : bDateValue = sal_True;
1680 [ # # ][ # # ]: 0 : if (IsXMLToken(sValue, XML_AUTO))
1681 : 0 : bAutoStart = sal_True;
1682 : : else
1683 : : {
1684 [ # # ]: 0 : GetScImport().GetMM100UnitConverter().convertDateTime(fStart, sValue);
1685 : 0 : bAutoStart = false;
1686 : : }
1687 : : }
1688 [ # # ][ # # ]: 0 : else if (IsXMLToken(aLocalName, XML_DATE_END))
1689 : : {
1690 : 0 : bDateValue = sal_True;
1691 [ # # ][ # # ]: 0 : if (IsXMLToken(sValue, XML_AUTO))
1692 : 0 : bAutoEnd = sal_True;
1693 : : else
1694 : : {
1695 [ # # ]: 0 : GetScImport().GetMM100UnitConverter().convertDateTime(fEnd, sValue);
1696 : 0 : bAutoEnd = false;
1697 : : }
1698 : : }
1699 [ # # ][ # # ]: 0 : else if (IsXMLToken(aLocalName, XML_START))
1700 : : {
1701 [ # # ][ # # ]: 0 : if (IsXMLToken(sValue, XML_AUTO))
1702 : 0 : bAutoStart = sal_True;
1703 : : else
1704 : : {
1705 [ # # ]: 0 : ::sax::Converter::convertDouble(fStart, sValue);
1706 : 0 : bAutoStart = false;
1707 : : }
1708 : : }
1709 [ # # ][ # # ]: 0 : else if (IsXMLToken(aLocalName, XML_END))
1710 : : {
1711 [ # # ][ # # ]: 0 : if (IsXMLToken(sValue, XML_AUTO))
1712 : 0 : bAutoEnd = sal_True;
1713 : : else
1714 : : {
1715 [ # # ]: 0 : ::sax::Converter::convertDouble(fEnd, sValue);
1716 : 0 : bAutoEnd = false;
1717 : : }
1718 : : }
1719 [ # # ][ # # ]: 0 : else if (IsXMLToken(aLocalName, XML_STEP))
1720 : : {
1721 [ # # ]: 0 : ::sax::Converter::convertDouble(fStep, sValue);
1722 : : }
1723 [ # # ][ # # ]: 0 : else if (IsXMLToken(aLocalName, XML_GROUPED_BY))
1724 : : {
1725 [ # # ][ # # ]: 0 : if (IsXMLToken(sValue, XML_SECONDS))
1726 : 0 : nGroupPart = com::sun::star::sheet::DataPilotFieldGroupBy::SECONDS;
1727 [ # # ][ # # ]: 0 : else if (IsXMLToken(sValue, XML_MINUTES))
1728 : 0 : nGroupPart = com::sun::star::sheet::DataPilotFieldGroupBy::MINUTES;
1729 [ # # ][ # # ]: 0 : else if (IsXMLToken(sValue, XML_HOURS))
1730 : 0 : nGroupPart = com::sun::star::sheet::DataPilotFieldGroupBy::HOURS;
1731 [ # # ][ # # ]: 0 : else if (IsXMLToken(sValue, XML_DAYS))
1732 : 0 : nGroupPart = com::sun::star::sheet::DataPilotFieldGroupBy::DAYS;
1733 [ # # ][ # # ]: 0 : else if (IsXMLToken(sValue, XML_MONTHS))
1734 : 0 : nGroupPart = com::sun::star::sheet::DataPilotFieldGroupBy::MONTHS;
1735 [ # # ][ # # ]: 0 : else if (IsXMLToken(sValue, XML_QUARTERS))
1736 : 0 : nGroupPart = com::sun::star::sheet::DataPilotFieldGroupBy::QUARTERS;
1737 [ # # ][ # # ]: 0 : else if (IsXMLToken(sValue, XML_YEARS))
1738 : 0 : nGroupPart = com::sun::star::sheet::DataPilotFieldGroupBy::YEARS;
1739 : : }
1740 : 0 : }
1741 : 0 : pDataPilotField->SetGrouping(sGroupSource, fStart, fEnd, fStep, nGroupPart, bDateValue, bAutoStart, bAutoEnd);
1742 : 0 : }
1743 : :
1744 : 0 : ScXMLDataPilotGroupsContext::~ScXMLDataPilotGroupsContext()
1745 : : {
1746 [ # # ]: 0 : }
1747 : :
1748 : 0 : SvXMLImportContext *ScXMLDataPilotGroupsContext::CreateChildContext( sal_uInt16 nPrefix,
1749 : : const ::rtl::OUString& rLName,
1750 : : const ::com::sun::star::uno::Reference<
1751 : : ::com::sun::star::xml::sax::XAttributeList>& xAttrList )
1752 : : {
1753 : 0 : SvXMLImportContext *pContext = 0;
1754 : :
1755 [ # # ]: 0 : if (nPrefix == XML_NAMESPACE_TABLE)
1756 : : {
1757 [ # # ]: 0 : if (IsXMLToken(rLName, XML_DATA_PILOT_GROUP))
1758 [ # # ]: 0 : pContext = new ScXMLDataPilotGroupContext(GetScImport(), nPrefix, rLName, xAttrList, pDataPilotField);
1759 : : }
1760 : :
1761 [ # # ]: 0 : if( !pContext )
1762 [ # # ]: 0 : pContext = new SvXMLImportContext( GetImport(), nPrefix, rLName );
1763 : :
1764 : 0 : return pContext;
1765 : : }
1766 : :
1767 : 0 : void ScXMLDataPilotGroupsContext::EndElement()
1768 : : {
1769 : 0 : }
1770 : :
1771 : 0 : ScXMLDataPilotGroupContext::ScXMLDataPilotGroupContext( ScXMLImport& rImport,
1772 : : sal_uInt16 nPrfx,
1773 : : const ::rtl::OUString& rLName,
1774 : : const ::com::sun::star::uno::Reference<
1775 : : ::com::sun::star::xml::sax::XAttributeList>& xAttrList,
1776 : : ScXMLDataPilotFieldContext* pTempDataPilotField) :
1777 : : SvXMLImportContext( rImport, nPrfx, rLName ),
1778 [ # # ]: 0 : pDataPilotField(pTempDataPilotField)
1779 : : {
1780 [ # # ][ # # ]: 0 : sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
[ # # ]
1781 [ # # ]: 0 : for( sal_Int16 i=0; i < nAttrCount; i++ )
1782 : : {
1783 [ # # ][ # # ]: 0 : rtl::OUString sAttrName = xAttrList->getNameByIndex( i );
1784 : 0 : rtl::OUString aLocalName;
1785 : 0 : sal_uInt16 nPrefix = GetScImport().GetNamespaceMap().GetKeyByAttrName(
1786 [ # # ]: 0 : sAttrName, &aLocalName );
1787 [ # # ][ # # ]: 0 : rtl::OUString sValue = xAttrList->getValueByIndex( i );
1788 : :
1789 [ # # ]: 0 : if (nPrefix == XML_NAMESPACE_TABLE)
1790 : : {
1791 [ # # ][ # # ]: 0 : if (IsXMLToken(aLocalName, XML_NAME))
1792 : 0 : sName = sValue;
1793 : : }
1794 : 0 : }
1795 : 0 : }
1796 : :
1797 : 0 : ScXMLDataPilotGroupContext::~ScXMLDataPilotGroupContext()
1798 : : {
1799 [ # # ]: 0 : }
1800 : :
1801 : 0 : SvXMLImportContext *ScXMLDataPilotGroupContext::CreateChildContext( sal_uInt16 nPrefix,
1802 : : const ::rtl::OUString& rLName,
1803 : : const ::com::sun::star::uno::Reference<
1804 : : ::com::sun::star::xml::sax::XAttributeList>& xAttrList )
1805 : : {
1806 : 0 : SvXMLImportContext *pContext = 0;
1807 : :
1808 [ # # ]: 0 : if (nPrefix == XML_NAMESPACE_TABLE)
1809 : : {
1810 [ # # ]: 0 : if (IsXMLToken(rLName, XML_DATA_PILOT_MEMBER))
1811 [ # # ]: 0 : pContext = new ScXMLDataPilotGroupMemberContext(GetScImport(), nPrefix, rLName, xAttrList, this);
1812 : : }
1813 : :
1814 [ # # ]: 0 : if( !pContext )
1815 [ # # ]: 0 : pContext = new SvXMLImportContext( GetImport(), nPrefix, rLName );
1816 : :
1817 : 0 : return pContext;
1818 : : }
1819 : :
1820 : 0 : void ScXMLDataPilotGroupContext::EndElement()
1821 : : {
1822 : 0 : pDataPilotField->AddGroup(aMembers, sName);
1823 : 0 : }
1824 : :
1825 : 0 : ScXMLDataPilotGroupMemberContext::ScXMLDataPilotGroupMemberContext( ScXMLImport& rImport,
1826 : : sal_uInt16 nPrfx,
1827 : : const ::rtl::OUString& rLName,
1828 : : const ::com::sun::star::uno::Reference<
1829 : : ::com::sun::star::xml::sax::XAttributeList>& xAttrList,
1830 : : ScXMLDataPilotGroupContext* pTempDataPilotGroup) :
1831 : : SvXMLImportContext( rImport, nPrfx, rLName ),
1832 : 0 : pDataPilotGroup(pTempDataPilotGroup)
1833 : : {
1834 [ # # ][ # # ]: 0 : sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
[ # # ]
1835 [ # # ]: 0 : for( sal_Int16 i=0; i < nAttrCount; i++ )
1836 : : {
1837 [ # # ][ # # ]: 0 : rtl::OUString sAttrName = xAttrList->getNameByIndex( i );
1838 : 0 : rtl::OUString aLocalName;
1839 : 0 : sal_uInt16 nPrefix = GetScImport().GetNamespaceMap().GetKeyByAttrName(
1840 [ # # ]: 0 : sAttrName, &aLocalName );
1841 [ # # ][ # # ]: 0 : rtl::OUString sValue = xAttrList->getValueByIndex( i );
1842 : :
1843 [ # # ]: 0 : if (nPrefix == XML_NAMESPACE_TABLE)
1844 : : {
1845 [ # # ][ # # ]: 0 : if (IsXMLToken(aLocalName, XML_NAME))
1846 : 0 : sName = sValue;
1847 : : }
1848 : 0 : }
1849 : 0 : }
1850 : :
1851 : 0 : ScXMLDataPilotGroupMemberContext::~ScXMLDataPilotGroupMemberContext()
1852 : : {
1853 [ # # ]: 0 : }
1854 : :
1855 : 0 : SvXMLImportContext *ScXMLDataPilotGroupMemberContext::CreateChildContext( sal_uInt16 nPrefix,
1856 : : const ::rtl::OUString& rLName,
1857 : : const ::com::sun::star::uno::Reference<
1858 : : ::com::sun::star::xml::sax::XAttributeList>& /* xAttrList */ )
1859 : : {
1860 : 0 : SvXMLImportContext *pContext = 0;
1861 : :
1862 [ # # ]: 0 : if( !pContext )
1863 [ # # ]: 0 : pContext = new SvXMLImportContext( GetImport(), nPrefix, rLName );
1864 : :
1865 : 0 : return pContext;
1866 : : }
1867 : :
1868 : 0 : void ScXMLDataPilotGroupMemberContext::EndElement()
1869 : : {
1870 [ # # ]: 0 : if (!sName.isEmpty())
1871 : 0 : pDataPilotGroup->AddMember(sName);
1872 [ + - ][ + - ]: 153 : }
1873 : :
1874 : : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|