| Index: packages/charted/lib/charts/data_transformers/aggregation_item.dart
|
| diff --git a/packages/charted/lib/charts/data_transformers/aggregation_item.dart b/packages/charted/lib/charts/data_transformers/aggregation_item.dart
|
| index 17c641390b61efbd354453cf19fda302bf91aa99..1c9f564991668f7a5c6f122c492d6ae5be303f0f 100644
|
| --- a/packages/charted/lib/charts/data_transformers/aggregation_item.dart
|
| +++ b/packages/charted/lib/charts/data_transformers/aggregation_item.dart
|
| @@ -1,59 +1,44 @@
|
| -/*
|
| - * Copyright 2014 Google Inc. All rights reserved.
|
| - *
|
| - * Use of this source code is governed by a BSD-style
|
| - * license that can be found in the LICENSE file or at
|
| - * https://developers.google.com/open-source/licenses/bsd
|
| - */
|
| +//
|
| +// Copyright 2014 Google Inc. All rights reserved.
|
| +//
|
| +// Use of this source code is governed by a BSD-style
|
| +// license that can be found in the LICENSE file or at
|
| +// https://developers.google.com/open-source/licenses/bsd
|
| +//
|
|
|
| part of charted.charts;
|
|
|
| -/**
|
| - * AggregationItem is created by [AggregationModel] to make access to facts
|
| - * observable. Users must use AggregationItem.isValid before trying to access
|
| - * the aggregations.
|
| - */
|
| +/// AggregationItem is created by [AggregationModel] to make access to facts
|
| +/// observable. Users must use AggregationItem.isValid before trying to access
|
| +/// the aggregations.
|
| abstract class AggregationItem extends ChangeNotifier {
|
| - /**
|
| - * List of dimension fields in effect
|
| - */
|
| + /// List of dimension fields in effect
|
| List<String> dimensions;
|
|
|
| - /**
|
| - * Check if this entity is valid.
|
| - * Currently the only case where an entity becomes invalid
|
| - * is when a groupBy is called on the model.
|
| - */
|
| + /// Check if this entity is valid.
|
| + /// Currently the only case where an entity becomes invalid
|
| + /// is when a groupBy is called on the model.
|
| bool get isValid;
|
|
|
| - /**
|
| - * Fetch the fact from AggregationModel and return it
|
| - * Currently takes keys in the form of "sum(spend)", where sum is
|
| - * the aggregation type and spend is fact's field name.
|
| - *
|
| - * Currently, "sum", "count", "min", "max", "avg", "valid" and "avgOfValid"
|
| - * are supported as the operators.
|
| - */
|
| + /// Fetch the fact from AggregationModel and return it
|
| + /// Currently takes keys in the form of "sum(spend)", where sum is
|
| + /// the aggregation type and spend is fact's field name.
|
| + ///
|
| + /// Currently, "sum", "count", "min", "max", "avg", "valid" and "avgOfValid"
|
| + /// are supported as the operators.
|
| + operator [](String key);
|
|
|
| - operator[](String key);
|
| -
|
| - /**
|
| - * Check if we support a given key.
|
| - */
|
| + /// Check if we support a given key.
|
| bool containsKey(String key);
|
|
|
| - /**
|
| - * List of valid field names for this entity.
|
| - * It's the combined list of accessors for individual items, items in
|
| - * the next dimension and all possible facts defined on the view.
|
| - */
|
| + /// List of valid field names for this entity.
|
| + /// It's the combined list of accessors for individual items, items in
|
| + /// the next dimension and all possible facts defined on the view.
|
| Iterable<String> get fieldNames;
|
| }
|
|
|
| -/*
|
| - * Implementation of AggregationItem
|
| - * Instances of _AggregationItemImpl are created only by AggregationModel
|
| - */
|
| +/// Implementation of AggregationItem
|
| +/// Instances of _AggregationItemImpl are created only by AggregationModel
|
| class _AggregationItemImpl extends ChangeNotifier implements AggregationItem {
|
| static final List<String> derivedAggregationTypes = ['count', 'avg'];
|
|
|
| @@ -64,9 +49,7 @@ class _AggregationItemImpl extends ChangeNotifier implements AggregationItem {
|
|
|
| int _factsOffset;
|
|
|
| - /*
|
| - * Currently entities are created only when they have valid aggregations
|
| - */
|
| + /// Currently entities are created only when they have valid aggregations
|
| _AggregationItemImpl(this.model, this.dimensions, this._key) {
|
| if (model == null) {
|
| throw new ArgumentError('Model cannot be null');
|
| @@ -79,23 +62,19 @@ class _AggregationItemImpl extends ChangeNotifier implements AggregationItem {
|
| _factsOffset = model._dimToAggrMap[_key];
|
| }
|
|
|
| - /**
|
| - * _dimToAggrMap got updated on the model, update ourselves accordingly
|
| - */
|
| + /// _dimToAggrMap got updated on the model, update ourselves accordingly
|
| void update() {
|
| _factsOffset = model._dimToAggrMap[_key];
|
| }
|
|
|
| - /*
|
| - * Mark this entity as invalid.
|
| - */
|
| + /// Mark this entity as invalid.
|
| void clear() {
|
| _factsOffset = null;
|
| }
|
|
|
| bool get isValid => _factsOffset != null;
|
|
|
| - dynamic operator[](String key) {
|
| + dynamic operator [](String key) {
|
| if (!isValid) {
|
| throw new StateError('Entity is not valid anymore');
|
| }
|
| @@ -116,11 +95,10 @@ class _AggregationItemImpl extends ChangeNotifier implements AggregationItem {
|
|
|
| // Try parsing int if every element in factFields is int.
|
| if (model._factFields.every((e) => e is int)) {
|
| - factIndex = model._factFields.indexOf(int.parse(factName,
|
| - onError: (e) {
|
| - throw new ArgumentError('Type of factFields are int but factName' +
|
| - 'contains non int value');
|
| - }));
|
| + factIndex = model._factFields.indexOf(int.parse(factName, onError: (e) {
|
| + throw new ArgumentError('Type of factFields are int but factName' +
|
| + 'contains non int value');
|
| + }));
|
| }
|
| if (factIndex == -1) {
|
| throw new ArgumentError('Model not configured for ${factName}');
|
| @@ -128,7 +106,8 @@ class _AggregationItemImpl extends ChangeNotifier implements AggregationItem {
|
|
|
| int offset = _factsOffset + factIndex * model._aggregationTypesCount;
|
| // No items for the corresponding fact, so return null.
|
| - if (aggrFunc != 'count' && aggrFunc != 'avg' &&
|
| + if (aggrFunc != 'count' &&
|
| + aggrFunc != 'avg' &&
|
| model._aggregations[offset + model._offsetCnt].toInt() == 0) {
|
| return null;
|
| }
|
| @@ -136,13 +115,13 @@ class _AggregationItemImpl extends ChangeNotifier implements AggregationItem {
|
| if (aggrFuncIndex != -1) {
|
| return model._aggregations[offset + aggrFuncIndex];
|
| } else if (aggrFunc == 'count') {
|
| - return model._aggregations[_factsOffset +
|
| - model._offsetFilteredCount].toInt();
|
| + return model._aggregations[_factsOffset + model._offsetFilteredCount]
|
| + .toInt();
|
| } else if (aggrFunc == 'avg') {
|
| return model._aggregations[offset + model._offsetSum] /
|
| - model._aggregations[_factsOffset + model._offsetFilteredCount].
|
| - toInt();
|
| - } else if (aggrFunc == 'avgOfValid') {
|
| + model._aggregations[_factsOffset + model._offsetFilteredCount]
|
| + .toInt();
|
| + } else if (aggrFunc == 'avgOfValid') {
|
| return model._aggregations[offset + model._offsetSum] /
|
| model._aggregations[offset + model._offsetCnt].toInt();
|
| }
|
| @@ -198,9 +177,7 @@ class _AggregationItemImpl extends ChangeNotifier implements AggregationItem {
|
| return model._itemFieldNamesCache;
|
| }
|
|
|
| - /*
|
| - * TODO(prsd): Implementation of [Observable]
|
| - */
|
| + // TODO(prsd): Implementation of [Observable]
|
| Stream<List<ChangeRecord>> get changes {
|
| throw new UnimplementedError();
|
| }
|
| @@ -218,12 +195,12 @@ class _AggregationItemsIterator implements Iterator {
|
| int _count;
|
| int _endOfRows;
|
|
|
| - _AggregationItemsIterator(this.model, List<String> this.dimensions,
|
| - String this.key) {
|
| + _AggregationItemsIterator(
|
| + this.model, List<String> this.dimensions, String this.key) {
|
| int offset = model._dimToAggrMap[key];
|
| if (offset != null) {
|
| - int factsEndOffset = offset +
|
| - model._factFields.length * model._aggregationTypesCount;
|
| + int factsEndOffset =
|
| + offset + model._factFields.length * model._aggregationTypesCount;
|
| _start = model._aggregations[factsEndOffset].toInt();
|
| _count = model._aggregations[factsEndOffset + 1].toInt();
|
| _endOfRows = model._rows.length;
|
| @@ -241,15 +218,14 @@ class _AggregationItemsIterator implements Iterator {
|
| return false;
|
| }
|
|
|
| - /*
|
| - * If model had a filter applied, then check if _current points to a
|
| - * filtered-in row, else skip till we find one.
|
| - * Also, make sure (even if something else went wrong) we don't go
|
| - * beyond the number of items in the model.
|
| - */
|
| + // If model had a filter applied, then check if _current points to a
|
| + // filtered-in row, else skip till we find one.
|
| + // Also, make sure (even if something else went wrong) we don't go
|
| + // beyond the number of items in the model.
|
| if (this.model._filterResults != null) {
|
| while ((this.model._filterResults[_current ~/ AggregationModel.SMI_BITS] &
|
| - (1 << _current % AggregationModel.SMI_BITS)) == 0 &&
|
| + (1 << _current % AggregationModel.SMI_BITS)) ==
|
| + 0 &&
|
| _current <= _endOfRows) {
|
| ++_current;
|
| }
|
|
|