public void ParseDimensionFilterTest()
 {
     URLParameterDefaultImpl target = new URLParameterDefaultImpl();
     string dimensionFilter = "1,1,2,3";
     DimensionFilter expected = new DimensionFilter
     {
         DimensionID = "1",
         AttributeIDs = new List<string> { "1", "2", "3" }
     };
     DimensionFilter actual = target.ParseDimensionFilter(dimensionFilter);
     Assert.AreEqual(expected, actual);
 }
        public DataSerie GetDataSerie(string sourceid, string indicatorid, DimensionFilter axisDimension, List<DimensionFilter> selectedDimensions)
        {
            DataSerie serie = null;
            ChannelFactory<IStatisticsProvider> channel = new ChannelFactory<IStatisticsProvider>(
                    "providerConfiguration",
                    new EndpointAddress(endpoint));

            try
            {
                IStatisticsProvider provider = channel.CreateChannel();

                //join filters
                List<DimensionFilter> filters = JoinFilters(selectedDimensions, axisDimension);

                // get values
                IEnumerable<IndicatorValue> values = provider.GetValues(indicatorid, filters);

                // group values
                Dictionary<string, DataSerieValues> groupedValues = new Dictionary<string, DataSerieValues>();
                foreach (var value in values)
                {
                    DimensionFilter axisFilter = value.Filters.Where(f => f.DimensionID == axisDimension.DimensionID).FirstOrDefault();
                    string axisAttributeId = axisFilter.AttributeIDs.First();
                    if (!groupedValues.ContainsKey(axisFilter.DimensionID))
                    {
                        DataSerieValues dataSerie = new DataSerieValues {
                            Value = 0,
                            AxisDimension = axisFilter,
                            SelectedDimensions = value.Filters
                        };

                        groupedValues.Add(axisAttributeId, dataSerie);
                    }

                    groupedValues[axisAttributeId].Value += value.Value;
                }

                serie = new DataSerie {
                    Values = groupedValues.Values.ToList()
                };

            }
            finally
            {
                channel.Close();
            }

            return serie;
        }
 public void ToDimensionFilterTest()
 {
     INEProvider.INEService.DimensionFilter filter = new INEProvider.INEService.DimensionFilter
     {
         Codes = new ArrayOfDimensionCode { "1", "2", "3" },
         Order = 1,
         AllFromLevel = 2
     };
     ProviderDataContracts.Filters.DimensionFilter expected = new ProviderDataContracts.Filters.DimensionFilter
     {
         DimensionID = "1",
         AttributeIDs = new List<string> { "1", "2", "3" }
     };
     ProviderDataContracts.Filters.DimensionFilter actual = DimensionFilterExtension.ToDimensionFilter(filter);
     Assert.AreEqual(expected, actual);
 }
 public void AggregateValuesTest()
 {
     DefaultAggregatorImpl target = new DefaultAggregatorImpl();
     IEnumerable<INEService.IndicatorValue> indicatorValueList = new INEService.IndicatorValue[]
     {
         new INEService.IndicatorValue {
             Value = 1,
             Dimensions = new List<INEService.DimensionFilter>{
                 new INEService.DimensionFilter { Order=1, Codes = new INEService.ArrayOfDimensionCode() { "2010" } },
                 new INEService.DimensionFilter { Order=2, Codes = new INEService.ArrayOfDimensionCode() { "PT" } },
                 new INEService.DimensionFilter { Order=3, Codes = new INEService.ArrayOfDimensionCode() { "M" } }
             }
         },
         new INEService.IndicatorValue {
             Value = 1,
             Dimensions = new List<INEService.DimensionFilter>{
                 new INEService.DimensionFilter { Order=1, Codes = new INEService.ArrayOfDimensionCode() { "2010" } },
                 new INEService.DimensionFilter { Order=2, Codes = new INEService.ArrayOfDimensionCode() { "PT" } },
                 new INEService.DimensionFilter { Order=3, Codes = new INEService.ArrayOfDimensionCode() { "F" } }
             }
         },
         new INEService.IndicatorValue {
             Value = 1,
             Dimensions = new List<INEService.DimensionFilter>{
                 new INEService.DimensionFilter { Order=1, Codes = new INEService.ArrayOfDimensionCode() { "2011" } },
                 new INEService.DimensionFilter { Order=2, Codes = new INEService.ArrayOfDimensionCode() { "PT" } },
                 new INEService.DimensionFilter { Order=3, Codes = new INEService.ArrayOfDimensionCode() { "M" } }
             }
         },
         new INEService.IndicatorValue {
             Value = 1,
             Dimensions = new List<INEService.DimensionFilter>{
                 new INEService.DimensionFilter { Order=1, Codes = new INEService.ArrayOfDimensionCode() { "2011" } },
                 new INEService.DimensionFilter { Order=2, Codes = new INEService.ArrayOfDimensionCode() { "PT" } },
                 new INEService.DimensionFilter { Order=3, Codes = new INEService.ArrayOfDimensionCode() { "F" } }
             }
         }
     };
     IEnumerable<DimensionFilter> projectedDimensions = new DimensionFilter[]
     {
         new DimensionFilter { DimensionID="3", AttributeIDs=new string[]{ "M", "F" } }
     };
     IEnumerable<IndicatorValue> expected = new IndicatorValue[]
     {
         new IndicatorValue {
             Value = 2,
             Filters = new DimensionFilter[]{
                 new DimensionFilter { DimensionID = "1", AttributeIDs = new string[]{ "2010", "2011" } },
                 new DimensionFilter { DimensionID = "2", AttributeIDs = new string[]{ "PT" } },
             },
             Projected = new DimensionFilter[]{
                 new DimensionFilter { DimensionID = "3", AttributeIDs = new string[]{ "M" } }
             }
         },
         new IndicatorValue {
             Value = 2,
             Filters = new DimensionFilter[]{
                 new DimensionFilter { DimensionID = "1", AttributeIDs = new string[]{ "2010", "2011" } },
                 new DimensionFilter { DimensionID = "2", AttributeIDs = new string[]{ "PT" } },
             },
             Projected = new DimensionFilter[]{
                 new DimensionFilter { DimensionID = "3", AttributeIDs = new string[]{ "F" } }
             }
         }
     };
     IEnumerable<IndicatorValue> actual = target.AggregateValues(indicatorValueList, projectedDimensions);
     Assert.IsTrue(Enumerable.SequenceEqual<IndicatorValue>(expected, actual));
 }
        public void JoinFiltersTest()
        {
            DefaultAggregatorImpl_Accessor target = new DefaultAggregatorImpl_Accessor();
            IEnumerable<DimensionFilter> dest = new DimensionFilter[]{
                new DimensionFilter { DimensionID = "1", AttributeIDs = new string[] { "1", "2" } },
                new DimensionFilter { DimensionID = "2", AttributeIDs = new string[] { "1", "2" } }
            };
            IEnumerable<DimensionFilter> source = new DimensionFilter[]{
                new DimensionFilter { DimensionID = "1", AttributeIDs = new string[] { "2", "3", "4" } },
                new DimensionFilter { DimensionID = "5", AttributeIDs = new string[] { "1", "2" } }
            };
            target.JoinFilters(dest, source);

            IEnumerable<DimensionFilter> expected = new DimensionFilter[]{
                new DimensionFilter { DimensionID = "1", AttributeIDs = new string[] { "1", "2", "3", "4" } },
                new DimensionFilter { DimensionID = "2", AttributeIDs = new string[] { "1", "2" } }
            };

            Assert.IsTrue(Enumerable.SequenceEqual<DimensionFilter>(dest, expected));
        }
 public void GetAggregatorKeyTest()
 {
     DefaultAggregatorImpl_Accessor target = new DefaultAggregatorImpl_Accessor();
     IEnumerable<DimensionFilter> filters = new DimensionFilter[]{
         new DimensionFilter { DimensionID = "1", AttributeIDs = new string[] { "1", "2" } },
         new DimensionFilter { DimensionID = "2", AttributeIDs = new string[] { "1", "2" } }
     }; ;
     string expected = "112212";
     string actual = target.GetAggregatorKey(filters);
     Assert.AreEqual(expected, actual);
 }
        private List<DimensionFilter> JoinFilters(List<DimensionFilter> selected, DimensionFilter axis)
        {
            bool merged = false;
            List<DimensionFilter> filters = new List<DimensionFilter>();
            foreach (var filter in selected)
            {
                if (filter.DimensionID == axis.DimensionID)
                {
                    IEnumerable<string> distinctValues = filter.AttributeIDs.Concat(axis.AttributeIDs).Distinct();
                    List<string> attrs = new List<string>(distinctValues);

                    filters.Add(new DimensionFilter {
                        AttributeIDs = attrs,
                        DimensionID = filter.DimensionID
                    });

                    merged = true;
                }
                else
                    filters.Add(filter);
            }

            if (!merged) {
                filters.Add(axis);
            }

            return filters;
        }
        public void GetDataProjectedBySpecifiedDimensionTest()
        {
            DefaultStatisticsProxyImpl target = new DefaultStatisticsProxyImpl(configKey, indicatorRepository, factory);
            int sourceid = 1;
            int indicatorid = 1;
            IEnumerable<DimensionFilter> projectedDimensions = new DimensionFilter[]
            {
                new DimensionFilter{ DimensionID = "3", AttributeIDs = new string[]{ "M", "F" } }
            };
            IEnumerable<DimensionFilter> filterDimensions = new DimensionFilter[]
            {
                new DimensionFilter{ DimensionID = "1", AttributeIDs = new string[]{ "2010", "2011" } },
                new DimensionFilter{ DimensionID = "2", AttributeIDs = new string[]{ "PT" } }
            };

            IEnumerable<IndicatorValue> expectedValues = new IndicatorValue[] {
                new IndicatorValue {
                    Value = 2,
                    Projected = new DimensionFilter[] {
                        new DimensionFilter { DimensionID = "3", AttributeIDs = new string[] { "M" } }
                    },
                    Filters = new DimensionFilter[] {
                        new DimensionFilter{ DimensionID = "1", AttributeIDs = new List<string>{ "2010", "2011" } },
                        new DimensionFilter{ DimensionID = "2", AttributeIDs = new List<string>{ "PT" } }
                    }
                },
                new IndicatorValue {
                    Value = 4,
                    Projected = new DimensionFilter[] {
                        new DimensionFilter { DimensionID = "3", AttributeIDs = new string[] { "F" } }
                    },
                    Filters = new DimensionFilter[] {
                        new DimensionFilter{ DimensionID = "1", AttributeIDs = new List<string>{ "2010", "2011" } },
                        new DimensionFilter{ DimensionID = "2", AttributeIDs = new List<string>{ "PT" } }
                    }
                }
            };
            IndicatorValues actual = target.GetIndicatorValues(sourceid, indicatorid, filterDimensions, projectedDimensions);
            Assert.IsTrue(Enumerable.SequenceEqual<IndicatorValue>(expectedValues, actual.Values));
        }