LCOV - code coverage report
Current view: top level - chart2/source/tools - DataSourceHelper.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 155 232 66.8 %
Date: 2012-08-25 Functions: 15 23 65.2 %
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 195 572 34.1 %

           Branch data     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                 :            : 
      21                 :            : #include "DataSourceHelper.hxx"
      22                 :            : #include "macros.hxx"
      23                 :            : #include "ChartModelHelper.hxx"
      24                 :            : #include "DiagramHelper.hxx"
      25                 :            : #include "DataSeriesHelper.hxx"
      26                 :            : #include "DataSource.hxx"
      27                 :            : #include "ContainerHelper.hxx"
      28                 :            : #include "ControllerLockGuard.hxx"
      29                 :            : #include "PropertyHelper.hxx"
      30                 :            : #include "CachedDataSequence.hxx"
      31                 :            : #include "LabeledDataSequence.hxx"
      32                 :            : 
      33                 :            : #include <com/sun/star/chart2/XChartDocument.hpp>
      34                 :            : #include <com/sun/star/chart2/data/XDataSource.hpp>
      35                 :            : #include <com/sun/star/chart2/data/XLabeledDataSequence.hpp>
      36                 :            : 
      37                 :            : #include <com/sun/star/chart/ChartDataRowSource.hpp>
      38                 :            : #include <com/sun/star/chart/ErrorBarStyle.hpp>
      39                 :            : 
      40                 :            : //.............................................................................
      41                 :            : namespace chart
      42                 :            : {
      43                 :            : //.............................................................................
      44                 :            : using namespace ::com::sun::star;
      45                 :            : using namespace ::com::sun::star::chart2;
      46                 :            : using ::com::sun::star::uno::Reference;
      47                 :            : using ::com::sun::star::uno::Sequence;
      48                 :            : using ::rtl::OUString;
      49                 :            : 
      50                 :            : namespace
      51                 :            : {
      52                 :         12 : void lcl_addRanges( ::std::vector< ::rtl::OUString > & rOutResult,
      53                 :            :                     const uno::Reference< data::XLabeledDataSequence > & xLabeledSeq )
      54                 :            : {
      55         [ +  - ]:         12 :     if( ! xLabeledSeq.is())
      56                 :         12 :         return;
      57 [ +  - ][ +  - ]:         12 :     uno::Reference< data::XDataSequence > xSeq( xLabeledSeq->getLabel());
      58         [ +  + ]:         12 :     if( xSeq.is())
      59 [ +  - ][ +  - ]:          6 :         rOutResult.push_back( xSeq->getSourceRangeRepresentation());
                 [ +  - ]
      60 [ +  - ][ +  - ]:         12 :     xSeq.set( xLabeledSeq->getValues());
                 [ +  - ]
      61         [ +  - ]:         12 :     if( xSeq.is())
      62 [ +  - ][ +  - ]:         12 :         rOutResult.push_back( xSeq->getSourceRangeRepresentation());
                 [ +  - ]
      63                 :            : }
      64                 :            : 
      65                 :          6 : void lcl_addDataSourceRanges(
      66                 :            :     ::std::vector< ::rtl::OUString > & rOutResult,
      67                 :            :     const uno::Reference< data::XDataSource > & xDataSource )
      68                 :            : {
      69         [ +  - ]:          6 :     if( xDataSource.is() )
      70                 :            :     {
      71 [ +  - ][ +  - ]:          6 :         uno::Sequence< uno::Reference< data::XLabeledDataSequence > > aDataSequences( xDataSource->getDataSequences() );
      72         [ +  + ]:         12 :         for( sal_Int32 i=0; i<aDataSequences.getLength(); ++i)
      73 [ +  - ][ +  - ]:         12 :             lcl_addRanges( rOutResult, aDataSequences[i] );
                 [ +  - ]
      74                 :            :     }
      75                 :          6 : }
      76                 :            : 
      77                 :          6 : void lcl_addErrorBarRanges(
      78                 :            :     ::std::vector< ::rtl::OUString > & rOutResult,
      79                 :            :     const uno::Reference< XDataSeries > & xDataSeries )
      80                 :            : {
      81         [ +  - ]:          6 :     uno::Reference< beans::XPropertySet > xSeriesProp( xDataSeries, uno::UNO_QUERY );
      82         [ -  + ]:          6 :     if( !xSeriesProp.is())
      83                 :          6 :         return;
      84                 :            : 
      85                 :            :     try
      86                 :            :     {
      87                 :          6 :         uno::Reference< beans::XPropertySet > xErrorBarProp;
      88 [ +  - ][ +  - ]:         12 :         if( ( xSeriesProp->getPropertyValue( C2U("ErrorBarY")) >>= xErrorBarProp ) &&
                 [ +  - ]
           [ +  -  -  + ]
         [ +  - ][ +  - ]
           [ -  +  #  #  
           #  # ][ +  - ]
      89                 :          6 :             xErrorBarProp.is())
      90                 :            :         {
      91                 :          0 :             sal_Int32 eStyle = ::com::sun::star::chart::ErrorBarStyle::NONE;
      92 [ #  # ][ #  # ]:          0 :             if( ( xErrorBarProp->getPropertyValue( C2U("ErrorBarStyle")) >>= eStyle ) &&
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  #  
             #  #  #  # ]
      93                 :            :                 eStyle == ::com::sun::star::chart::ErrorBarStyle::FROM_DATA )
      94                 :            :             {
      95         [ #  # ]:          0 :                 uno::Reference< data::XDataSource > xErrorBarDataSource( xErrorBarProp, uno::UNO_QUERY );
      96         [ #  # ]:          0 :                 if( xErrorBarDataSource.is() )
      97         [ #  # ]:          0 :                     lcl_addDataSourceRanges( rOutResult, xErrorBarDataSource );
      98                 :            :             }
      99         [ #  # ]:          6 :         }
     100                 :            :     }
     101         [ #  # ]:          0 :     catch( const uno::Exception & ex )
     102                 :            :     {
     103                 :            :         ASSERT_EXCEPTION( ex );
     104         [ +  - ]:          6 :     }
     105                 :            : }
     106                 :            : 
     107                 :            : } // anonymous namespace
     108                 :            : 
     109                 :         14 : Reference< chart2::data::XDataSource > DataSourceHelper::createDataSource(
     110                 :            :         const Sequence< Reference< chart2::data::XLabeledDataSequence > >& rSequences )
     111                 :            : {
     112 [ +  - ][ +  - ]:         14 :     return new DataSource(rSequences);
     113                 :            : }
     114                 :            : 
     115                 :          0 : Reference< chart2::data::XDataSequence > DataSourceHelper::createCachedDataSequence()
     116                 :            : {
     117 [ #  # ][ #  # ]:          0 :     return new ::chart::CachedDataSequence();
     118                 :            : }
     119                 :            : 
     120                 :          0 : Reference< chart2::data::XDataSequence > DataSourceHelper::createCachedDataSequence( const ::rtl::OUString& rSingleText )
     121                 :            : {
     122 [ #  # ][ #  # ]:          0 :     return new ::chart::CachedDataSequence( rSingleText );
     123                 :            : }
     124                 :            : 
     125                 :          0 : Reference< chart2::data::XLabeledDataSequence > DataSourceHelper::createLabeledDataSequence(
     126                 :            :         const Reference< chart2::data::XDataSequence >& xValues ,
     127                 :            :         const Reference< chart2::data::XDataSequence >& xLabels )
     128                 :            : {
     129 [ #  # ][ #  # ]:          0 :     return new ::chart::LabeledDataSequence( xValues, xLabels );
     130                 :            : }
     131                 :            : 
     132                 :          0 : Reference< chart2::data::XLabeledDataSequence > DataSourceHelper::createLabeledDataSequence(
     133                 :            :         const Reference< chart2::data::XDataSequence >& xValues )
     134                 :            : {
     135 [ #  # ][ #  # ]:          0 :     return new ::chart::LabeledDataSequence( xValues );
     136                 :            : }
     137                 :            : 
     138                 :          0 : Reference< chart2::data::XLabeledDataSequence > DataSourceHelper::createLabeledDataSequence(
     139                 :            :         const Reference< uno::XComponentContext >& xContext )
     140                 :            : {
     141 [ #  # ][ #  # ]:          0 :     return new ::chart::LabeledDataSequence( xContext );
     142                 :            : }
     143                 :            : 
     144                 :       5488 : uno::Sequence< beans::PropertyValue > DataSourceHelper::createArguments(
     145                 :            :                                             bool bUseColumns, bool bFirstCellAsLabel, bool bHasCategories )
     146                 :            : {
     147                 :       5488 :     ::com::sun::star::chart::ChartDataRowSource eRowSource = ::com::sun::star::chart::ChartDataRowSource_ROWS;
     148         [ +  + ]:       5488 :     if( bUseColumns )
     149                 :       2753 :         eRowSource = ::com::sun::star::chart::ChartDataRowSource_COLUMNS;
     150                 :            : 
     151         [ +  - ]:       5488 :     uno::Sequence< beans::PropertyValue > aArguments(3);
     152         [ +  - ]:       5488 :     aArguments[0] = beans::PropertyValue( C2U("DataRowSource")
     153                 :            :         , -1, uno::makeAny( eRowSource )
     154 [ +  - ][ +  - ]:      10976 :         , beans::PropertyState_DIRECT_VALUE );
     155         [ +  - ]:       5488 :     aArguments[1] = beans::PropertyValue( C2U("FirstCellAsLabel")
     156                 :            :         , -1, uno::makeAny( bFirstCellAsLabel )
     157 [ +  - ][ +  - ]:      10976 :         , beans::PropertyState_DIRECT_VALUE );
     158         [ +  - ]:       5488 :     aArguments[2] = beans::PropertyValue( C2U("HasCategories")
     159                 :            :         , -1, uno::makeAny( bHasCategories )
     160 [ +  - ][ +  - ]:      10976 :         , beans::PropertyState_DIRECT_VALUE );
     161                 :            : 
     162                 :       5488 :     return aArguments;
     163                 :            : }
     164                 :            : 
     165                 :       5488 : uno::Sequence< beans::PropertyValue > DataSourceHelper::createArguments(
     166                 :            :                                             const ::rtl::OUString & rRangeRepresentation,
     167                 :            :                                             const uno::Sequence< sal_Int32 >& rSequenceMapping,
     168                 :            :                                             bool bUseColumns, bool bFirstCellAsLabel, bool bHasCategories )
     169                 :            : {
     170                 :       5488 :     uno::Sequence< beans::PropertyValue > aArguments( createArguments( bUseColumns, bFirstCellAsLabel, bHasCategories ));
     171         [ +  - ]:       5488 :     aArguments.realloc( aArguments.getLength() + 1 );
     172         [ +  - ]:       5488 :     aArguments[aArguments.getLength() - 1] =
     173                 :            :         beans::PropertyValue( C2U("CellRangeRepresentation")
     174                 :            :                               , -1, uno::makeAny( rRangeRepresentation )
     175 [ +  - ][ +  - ]:      10976 :                               , beans::PropertyState_DIRECT_VALUE );
     176         [ -  + ]:       5488 :     if( rSequenceMapping.getLength() )
     177                 :            :     {
     178         [ #  # ]:          0 :         aArguments.realloc( aArguments.getLength() + 1 );
     179         [ #  # ]:          0 :         aArguments[aArguments.getLength() - 1] =
     180                 :            :             beans::PropertyValue( C2U("SequenceMapping")
     181                 :            :                                 , -1, uno::makeAny( rSequenceMapping )
     182 [ #  # ][ #  # ]:          0 :                                 , beans::PropertyState_DIRECT_VALUE );
     183                 :            :     }
     184                 :       5488 :     return aArguments;
     185                 :            : }
     186                 :            : 
     187                 :       5107 : void DataSourceHelper::readArguments( const uno::Sequence< beans::PropertyValue >& rArguments
     188                 :            :                                      , ::rtl::OUString & rRangeRepresentation, uno::Sequence< sal_Int32 >& rSequenceMapping
     189                 :            :             , bool& bUseColumns, bool& bFirstCellAsLabel, bool& bHasCategories )
     190                 :            : {
     191                 :       5107 :     const beans::PropertyValue* pArguments = rArguments.getConstArray();
     192         [ +  + ]:      25562 :     for(sal_Int32 i=0; i<rArguments.getLength(); ++i, ++pArguments)
     193                 :            :     {
     194                 :      20455 :         const beans::PropertyValue& aProperty = *pArguments;
     195         [ +  + ]:      20455 :         if ( aProperty.Name == "DataRowSource" )
     196                 :            :         {
     197                 :            :             ::com::sun::star::chart::ChartDataRowSource eRowSource;
     198 [ +  - ][ +  - ]:       5107 :             if( aProperty.Value >>= eRowSource )
     199                 :       5107 :                 bUseColumns = (eRowSource==::com::sun::star::chart::ChartDataRowSource_COLUMNS);
     200                 :            :         }
     201         [ +  + ]:      15348 :         else if ( aProperty.Name == "FirstCellAsLabel" )
     202                 :            :         {
     203                 :       5107 :             aProperty.Value >>= bFirstCellAsLabel;
     204                 :            :         }
     205         [ +  + ]:      10241 :         else if ( aProperty.Name == "HasCategories" )
     206                 :            :         {
     207                 :       5107 :             aProperty.Value >>= bHasCategories;
     208                 :            :         }
     209         [ +  + ]:       5134 :         else if ( aProperty.Name == "CellRangeRepresentation" )
     210                 :            :         {
     211                 :       5107 :             aProperty.Value >>= rRangeRepresentation;
     212                 :            :         }
     213         [ -  + ]:         27 :         else if ( aProperty.Name == "SequenceMapping" )
     214                 :            :         {
     215                 :          0 :             aProperty.Value >>= rSequenceMapping;
     216                 :            :         }
     217                 :            :     }
     218                 :       5107 : }
     219                 :            : 
     220                 :        150 : uno::Reference< chart2::data::XDataSource > DataSourceHelper::pressUsedDataIntoRectangularFormat(
     221                 :            :         const uno::Reference< chart2::XChartDocument >& xChartDoc, bool bWithCategories )
     222                 :            : {
     223         [ +  - ]:        150 :     ::std::vector< Reference< chart2::data::XLabeledDataSequence > > aResultVector;
     224                 :            : 
     225                 :            :     //categories are always the first sequence
     226 [ +  - ][ +  - ]:        150 :     Reference< chart2::XDiagram > xDiagram( xChartDoc->getFirstDiagram());
     227                 :            : 
     228         [ +  - ]:        150 :     if( bWithCategories )
     229                 :            :     {
     230         [ +  - ]:        150 :         Reference< chart2::data::XLabeledDataSequence > xCategories( DiagramHelper::getCategoriesFromDiagram( xDiagram ) );
     231         [ +  + ]:        150 :         if( xCategories.is() )
     232         [ +  - ]:        150 :             aResultVector.push_back( xCategories );
     233                 :            :     }
     234                 :            : 
     235         [ +  - ]:        150 :     ::std::vector< Reference< chart2::XDataSeries > > xSeriesVector( DiagramHelper::getDataSeriesFromDiagram( xDiagram ) );
     236                 :            :     uno::Reference< chart2::data::XDataSource > xSeriesSource(
     237 [ +  - ][ +  - ]:        150 :         DataSeriesHelper::getDataSource( ContainerHelper::ContainerToSequence(xSeriesVector) ) );
                 [ +  - ]
     238 [ +  - ][ +  - ]:        150 :     Sequence< Reference< chart2::data::XLabeledDataSequence > > aDataSeqences( xSeriesSource->getDataSequences() );
     239                 :            : 
     240                 :            :     //the first x-values is always the next sequence //todo ... other x-values get lost for old format
     241                 :            :     Reference< chart2::data::XLabeledDataSequence > xXValues(
     242 [ +  - ][ +  - ]:        150 :         DataSeriesHelper::getDataSequenceByRole( xSeriesSource, C2U("values-x") ) );
     243         [ -  + ]:        150 :     if( xXValues.is() )
     244         [ #  # ]:          0 :         aResultVector.push_back( xXValues );
     245                 :            : 
     246                 :            :     //add all other sequences now without x-values
     247         [ +  + ]:       1050 :     for( sal_Int32 nN=0; nN<aDataSeqences.getLength(); nN++ )
     248                 :            :     {
     249 [ +  - ][ +  - ]:        900 :         OUString aRole( DataSeriesHelper::GetRole( aDataSeqences[nN] ) );
     250 [ +  - ][ +  - ]:        900 :         if( !aRole.equals(C2U("values-x")) )
     251 [ +  - ][ +  - ]:        900 :             aResultVector.push_back( aDataSeqences[nN] );
     252                 :        900 :     }
     253                 :            : 
     254         [ +  - ]:        150 :     Sequence< Reference< chart2::data::XLabeledDataSequence > > aResultSequence( aResultVector.size() );
     255 [ +  - ][ +  - ]:        150 :     ::std::copy( aResultVector.begin(), aResultVector.end(), aResultSequence.getArray() );
     256                 :            : 
     257 [ +  - ][ +  - ]:        150 :     return new DataSource( aResultSequence );
         [ +  - ][ +  - ]
                 [ +  - ]
     258                 :            : }
     259                 :            : 
     260                 :          6 : uno::Sequence< ::rtl::OUString > DataSourceHelper::getUsedDataRanges(
     261                 :            :     const uno::Reference< chart2::XDiagram > & xDiagram )
     262                 :            : {
     263         [ +  - ]:          6 :     ::std::vector< ::rtl::OUString > aResult;
     264                 :            : 
     265         [ +  - ]:          6 :     if( xDiagram.is())
     266                 :            :     {
     267         [ +  - ]:          6 :         uno::Reference< data::XLabeledDataSequence > xCategories( DiagramHelper::getCategoriesFromDiagram( xDiagram ) );
     268         [ +  - ]:          6 :         if( xCategories.is() )
     269         [ +  - ]:          6 :             lcl_addRanges( aResult, xCategories );
     270                 :            : 
     271         [ +  - ]:          6 :         ::std::vector< uno::Reference< XDataSeries > > aSeriesVector( DiagramHelper::getDataSeriesFromDiagram( xDiagram ) );
     272 [ +  - ][ +  - ]:         24 :         for( ::std::vector< uno::Reference< XDataSeries > >::const_iterator aSeriesIt( aSeriesVector.begin() )
                 [ +  + ]
     273                 :         12 :                  ; aSeriesIt != aSeriesVector.end(); ++aSeriesIt )
     274                 :            :         {
     275         [ +  - ]:          6 :             uno::Reference< data::XDataSource > xDataSource( *aSeriesIt, uno::UNO_QUERY );
     276         [ +  - ]:          6 :             lcl_addDataSourceRanges( aResult, xDataSource );
     277         [ +  - ]:          6 :             lcl_addErrorBarRanges( aResult, *aSeriesIt );
     278                 :         12 :         }
     279                 :            :     }
     280                 :            : 
     281         [ +  - ]:          6 :     return ContainerHelper::ContainerToSequence( aResult );
     282                 :            : }
     283                 :            : 
     284                 :          6 : uno::Sequence< ::rtl::OUString > DataSourceHelper::getUsedDataRanges( const uno::Reference< frame::XModel > & xChartModel )
     285                 :            : {
     286         [ +  - ]:          6 :     uno::Reference< XDiagram > xDiagram( ChartModelHelper::findDiagram( xChartModel ) );
     287         [ +  - ]:          6 :     return getUsedDataRanges( xDiagram );
     288                 :            : }
     289                 :            : 
     290                 :         33 : uno::Reference< chart2::data::XDataSource > DataSourceHelper::getUsedData(
     291                 :            :     const uno::Reference< chart2::XChartDocument >& xChartDoc )
     292                 :            : {
     293                 :         33 :     return pressUsedDataIntoRectangularFormat( xChartDoc );
     294                 :            : }
     295                 :            : 
     296                 :         56 : uno::Reference< chart2::data::XDataSource > DataSourceHelper::getUsedData(
     297                 :            :     const uno::Reference< frame::XModel >& xChartModel )
     298                 :            : {
     299         [ +  - ]:         56 :     ::std::vector< uno::Reference< chart2::data::XLabeledDataSequence > > aResult;
     300                 :            : 
     301         [ +  - ]:         56 :     uno::Reference< XDiagram > xDiagram( ChartModelHelper::findDiagram( xChartModel ) );
     302         [ +  - ]:         56 :     uno::Reference< data::XLabeledDataSequence > xCategories( DiagramHelper::getCategoriesFromDiagram( xDiagram ) );
     303         [ +  - ]:         56 :     if( xCategories.is() )
     304         [ +  - ]:         56 :         aResult.push_back( xCategories );
     305                 :            : 
     306         [ +  - ]:         56 :     ::std::vector< uno::Reference< XDataSeries > > aSeriesVector( ChartModelHelper::getDataSeries( xChartModel ) );
     307 [ +  - ][ +  - ]:        424 :     for( ::std::vector< uno::Reference< XDataSeries > >::const_iterator aSeriesIt( aSeriesVector.begin() )
                 [ +  + ]
     308                 :        212 :         ; aSeriesIt != aSeriesVector.end(); ++aSeriesIt )
     309                 :            :     {
     310         [ +  - ]:        156 :         uno::Reference< data::XDataSource > xDataSource( *aSeriesIt, uno::UNO_QUERY );
     311         [ -  + ]:        156 :         if( !xDataSource.is() )
     312                 :          0 :             continue;
     313 [ +  - ][ +  - ]:        156 :         uno::Sequence< uno::Reference< data::XLabeledDataSequence > > aDataSequences( xDataSource->getDataSequences() );
     314                 :        156 :         ::std::copy( aDataSequences.getConstArray(), aDataSequences.getConstArray() + aDataSequences.getLength(),
     315   [ +  -  +  - ]:        312 :                      ::std::back_inserter( aResult ));
     316 [ +  - ][ +  - ]:        156 :     }
     317                 :            : 
     318                 :            :     return uno::Reference< chart2::data::XDataSource >(
     319 [ +  - ][ +  - ]:         56 :         new DataSource( ContainerHelper::ContainerToSequence( aResult )));
         [ +  - ][ +  - ]
                 [ +  - ]
     320                 :            : }
     321                 :            : 
     322                 :        109 : bool DataSourceHelper::detectRangeSegmentation(
     323                 :            :     const uno::Reference<
     324                 :            :         frame::XModel >& xChartModel
     325                 :            :     , ::rtl::OUString& rOutRangeString
     326                 :            :     , ::com::sun::star::uno::Sequence< sal_Int32 >& rSequenceMapping
     327                 :            :     , bool& rOutUseColumns
     328                 :            :     , bool& rOutFirstCellAsLabel
     329                 :            :     , bool& rOutHasCategories )
     330                 :            : {
     331                 :        109 :     bool bSomethingDetected = false;
     332                 :            : 
     333         [ +  - ]:        109 :     uno::Reference< XChartDocument > xChartDocument( xChartModel, uno::UNO_QUERY );
     334         [ -  + ]:        109 :     if( !xChartDocument.is() )
     335                 :          0 :         return bSomethingDetected;
     336 [ +  - ][ +  - ]:        109 :     uno::Reference< data::XDataProvider >  xDataProvider( xChartDocument->getDataProvider() );
     337         [ -  + ]:        109 :     if( !xDataProvider.is() )
     338                 :          0 :         return bSomethingDetected;
     339                 :            : 
     340                 :            :     try
     341                 :            :     {
     342                 :            :         DataSourceHelper::readArguments(
     343         [ +  - ]:        109 :             xDataProvider->detectArguments( pressUsedDataIntoRectangularFormat( xChartDocument ) ),
     344 [ +  - ][ +  - ]:        109 :             rOutRangeString, rSequenceMapping, rOutUseColumns, rOutFirstCellAsLabel, rOutHasCategories );
         [ +  - ][ +  - ]
     345                 :        109 :         bSomethingDetected = !rOutRangeString.isEmpty();
     346                 :            : 
     347                 :            :         uno::Reference< chart2::data::XLabeledDataSequence > xCategories(
     348 [ +  - ][ +  - ]:        109 :                     DiagramHelper::getCategoriesFromDiagram( xChartDocument->getFirstDiagram() ));
         [ #  # ][ +  - ]
     349                 :        109 :         rOutHasCategories = xCategories.is();
     350                 :            :     }
     351         [ #  # ]:          0 :     catch( uno::Exception & ex )
     352                 :            :     {
     353                 :            :         ASSERT_EXCEPTION( ex );
     354                 :            :     }
     355                 :        109 :     return bSomethingDetected;
     356                 :            : }
     357                 :            : 
     358                 :          0 : bool DataSourceHelper::allArgumentsForRectRangeDetected(
     359                 :            :     const uno::Reference< chart2::XChartDocument >& xChartDocument )
     360                 :            : {
     361                 :          0 :     bool bHasDataRowSource = false;
     362                 :          0 :     bool bHasFirstCellAsLabel = false;
     363                 :          0 :     bool bHasCellRangeRepresentation = false;
     364                 :            : 
     365 [ #  # ][ #  # ]:          0 :     uno::Reference< data::XDataProvider > xDataProvider( xChartDocument->getDataProvider() );
     366         [ #  # ]:          0 :     if( !xDataProvider.is() )
     367                 :          0 :         return false;
     368                 :            : 
     369                 :            :     try
     370                 :            :     {
     371                 :            :         const uno::Sequence< beans::PropertyValue > aArguments(
     372 [ #  # ][ #  # ]:          0 :             xDataProvider->detectArguments( pressUsedDataIntoRectangularFormat( xChartDocument )));
                 [ #  # ]
     373                 :          0 :         const beans::PropertyValue* pArguments = aArguments.getConstArray();
     374         [ #  # ]:          0 :         for(sal_Int32 i=0; i<aArguments.getLength(); ++i, ++pArguments)
     375                 :            :         {
     376                 :          0 :             const beans::PropertyValue& aProperty = *pArguments;
     377         [ #  # ]:          0 :             if ( aProperty.Name == "DataRowSource" )
     378                 :            :             {
     379                 :            :                 bHasDataRowSource =
     380                 :          0 :                     (aProperty.Value.hasValue() && aProperty.Value.isExtractableTo(
     381                 :            :                         ::getCppuType( reinterpret_cast<
     382 [ #  # ][ #  # ]:          0 :                                        const ::com::sun::star::chart::ChartDataRowSource * >(0))));
                 [ #  # ]
     383                 :            :             }
     384         [ #  # ]:          0 :             else if ( aProperty.Name == "FirstCellAsLabel" )
     385                 :            :             {
     386                 :            :                 bHasFirstCellAsLabel =
     387 [ #  # ][ #  # ]:          0 :                     (aProperty.Value.hasValue() && aProperty.Value.isExtractableTo(::getBooleanCppuType()));
                 [ #  # ]
     388                 :            :             }
     389         [ #  # ]:          0 :             else if ( aProperty.Name == "CellRangeRepresentation" )
     390                 :            :             {
     391                 :          0 :                 ::rtl::OUString aRange;
     392                 :            :                 bHasCellRangeRepresentation =
     393 [ #  # ][ #  # ]:          0 :                     (aProperty.Value.hasValue() && (aProperty.Value >>= aRange) && !aRange.isEmpty());
                 [ #  # ]
     394                 :            :             }
     395 [ #  # ][ #  # ]:          0 :         }
     396                 :            :     }
     397         [ #  # ]:          0 :     catch( const uno::Exception & ex )
     398                 :            :     {
     399                 :            :         ASSERT_EXCEPTION( ex );
     400                 :            :     }
     401                 :            : 
     402 [ #  # ][ #  # ]:          0 :     return (bHasCellRangeRepresentation && bHasDataRowSource && bHasFirstCellAsLabel);
                 [ #  # ]
     403                 :            : }
     404                 :            : 
     405                 :          8 : void DataSourceHelper::setRangeSegmentation(
     406                 :            :             const uno::Reference< frame::XModel >& xChartModel
     407                 :            :             , const ::com::sun::star::uno::Sequence< sal_Int32 >& rSequenceMapping
     408                 :            :             , bool bUseColumns , bool bFirstCellAsLabel, bool bUseCategories )
     409                 :            : {
     410         [ +  - ]:          8 :     uno::Reference< XChartDocument > xChartDocument( xChartModel, uno::UNO_QUERY );
     411         [ -  + ]:          8 :     if( !xChartDocument.is() )
     412                 :            :         return;
     413 [ +  - ][ +  - ]:          8 :     uno::Reference< data::XDataProvider > xDataProvider( xChartDocument->getDataProvider() );
     414         [ -  + ]:          8 :     if( !xDataProvider.is() )
     415                 :            :         return;
     416         [ +  - ]:          8 :     uno::Reference< XDiagram > xDiagram( ChartModelHelper::findDiagram( xChartModel ) );
     417         [ -  + ]:          8 :     if( !xDiagram.is() )
     418                 :            :         return;
     419 [ +  - ][ +  - ]:          8 :     uno::Reference< chart2::XChartTypeManager > xChartTypeManager( xChartDocument->getChartTypeManager() );
     420         [ -  + ]:          8 :     if( !xChartTypeManager.is() )
     421                 :            :         return;
     422         [ +  - ]:          8 :     uno::Reference< lang::XMultiServiceFactory > xTemplateFactory( xChartTypeManager, uno::UNO_QUERY );
     423         [ -  + ]:          8 :     if( !xTemplateFactory.is() )
     424                 :            :         return;
     425                 :            : 
     426                 :          8 :     ::rtl::OUString aRangeString;
     427                 :            :     bool bDummy;
     428         [ +  - ]:          8 :     uno::Sequence< sal_Int32 > aDummy;
     429         [ +  - ]:          8 :     readArguments( xDataProvider->detectArguments( pressUsedDataIntoRectangularFormat( xChartDocument )),
     430 [ +  - ][ +  - ]:          8 :                    aRangeString, aDummy, bDummy, bDummy, bDummy );
         [ +  - ][ +  - ]
     431                 :            : 
     432                 :            :     uno::Sequence< beans::PropertyValue > aArguments(
     433         [ +  - ]:          8 :         createArguments( aRangeString, rSequenceMapping, bUseColumns, bFirstCellAsLabel, bUseCategories ) );
     434                 :            : 
     435         [ +  - ]:          8 :     uno::Reference< chart2::data::XDataSource > xDataSource( xDataProvider->createDataSource(
     436         [ +  - ]:          8 :                                                                  aArguments ) );
     437         [ -  + ]:          8 :     if( !xDataSource.is() )
     438                 :            :         return;
     439                 :            : 
     440         [ +  - ]:          8 :     ControllerLockGuard aCtrlLockGuard( xChartModel );
     441 [ +  - ][ +  - ]:          8 :     xDiagram->setDiagramData( xDataSource, aArguments );
         [ +  - ][ -  + ]
         [ +  - ][ -  + ]
         [ +  - ][ -  + ]
         [ -  + ][ -  + ]
         [ -  + ][ -  + ]
         [ -  + ][ +  - ]
     442                 :            : }
     443                 :            : 
     444                 :          0 : Sequence< OUString > DataSourceHelper::getRangesFromLabeledDataSequence(
     445                 :            :     const Reference< data::XLabeledDataSequence > & xLSeq )
     446                 :            : {
     447                 :          0 :     Sequence< OUString > aResult;
     448         [ #  # ]:          0 :     if( xLSeq.is())
     449                 :            :     {
     450 [ #  # ][ #  # ]:          0 :         Reference< data::XDataSequence > xLabel( xLSeq->getLabel());
     451 [ #  # ][ #  # ]:          0 :         Reference< data::XDataSequence > xValues( xLSeq->getValues());
     452                 :            : 
     453         [ #  # ]:          0 :         if( xLabel.is())
     454                 :            :         {
     455         [ #  # ]:          0 :             if( xValues.is())
     456                 :            :             {
     457         [ #  # ]:          0 :                 aResult.realloc( 2 );
     458 [ #  # ][ #  # ]:          0 :                 aResult[0] = xLabel->getSourceRangeRepresentation();
                 [ #  # ]
     459 [ #  # ][ #  # ]:          0 :                 aResult[1] = xValues->getSourceRangeRepresentation();
                 [ #  # ]
     460                 :            :             }
     461                 :            :             else
     462                 :            :             {
     463         [ #  # ]:          0 :                 aResult.realloc( 1 );
     464 [ #  # ][ #  # ]:          0 :                 aResult[0] = xLabel->getSourceRangeRepresentation();
                 [ #  # ]
     465                 :            :             }
     466                 :            :         }
     467         [ #  # ]:          0 :         else if( xValues.is())
     468                 :            :         {
     469         [ #  # ]:          0 :             aResult.realloc( 1 );
     470 [ #  # ][ #  # ]:          0 :             aResult[0] = xValues->getSourceRangeRepresentation();
                 [ #  # ]
     471                 :          0 :         }
     472                 :            :     }
     473                 :          0 :     return aResult;
     474                 :            : }
     475                 :            : 
     476                 :       2733 : OUString DataSourceHelper::getRangeFromValues(
     477                 :            :     const Reference< data::XLabeledDataSequence > & xLSeq )
     478                 :            : {
     479                 :       2733 :     OUString aResult;
     480         [ +  - ]:       2733 :     if( xLSeq.is() )
     481                 :            :     {
     482 [ +  - ][ +  - ]:       2733 :         Reference< data::XDataSequence > xValues( xLSeq->getValues() );
     483         [ +  - ]:       2733 :         if( xValues.is() )
     484 [ +  - ][ +  - ]:       2733 :             aResult = xValues->getSourceRangeRepresentation();
     485                 :            :     }
     486                 :       2733 :     return aResult;
     487                 :            : }
     488                 :            : 
     489                 :          0 : Sequence< OUString > DataSourceHelper::getRangesFromDataSource( const Reference< data::XDataSource > & xSource )
     490                 :            : {
     491         [ #  # ]:          0 :     ::std::vector< OUString > aResult;
     492         [ #  # ]:          0 :     if( xSource.is())
     493                 :            :     {
     494 [ #  # ][ #  # ]:          0 :         Sequence< Reference< data::XLabeledDataSequence > > aLSeqSeq( xSource->getDataSequences());
     495         [ #  # ]:          0 :         for( sal_Int32 i=0; i<aLSeqSeq.getLength(); ++i )
     496                 :            :         {
     497 [ #  # ][ #  # ]:          0 :             Reference< data::XDataSequence > xLabel( aLSeqSeq[i]->getLabel());
                 [ #  # ]
     498 [ #  # ][ #  # ]:          0 :             Reference< data::XDataSequence > xValues( aLSeqSeq[i]->getValues());
                 [ #  # ]
     499                 :            : 
     500         [ #  # ]:          0 :             if( xLabel.is())
     501 [ #  # ][ #  # ]:          0 :                 aResult.push_back( xLabel->getSourceRangeRepresentation());
                 [ #  # ]
     502         [ #  # ]:          0 :             if( xValues.is())
     503 [ #  # ][ #  # ]:          0 :                 aResult.push_back( xValues->getSourceRangeRepresentation());
                 [ #  # ]
     504         [ #  # ]:          0 :         }
     505                 :            :     }
     506         [ #  # ]:          0 :     return ContainerHelper::ContainerToSequence( aResult );
     507                 :            : }
     508                 :            : 
     509                 :            : //.............................................................................
     510                 :            : } //namespace chart
     511                 :            : //.............................................................................
     512                 :            : 
     513                 :            : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10