aboutsummaryrefslogtreecommitdiff
path: root/src/client/northstar/model/binRanges/VisualBinRangeHelper.ts
blob: a9241268616596aaa08db02c81c8fb096c518a41 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
import { BinRange, NominalBinRange, QuantitativeBinRange, Exception, AlphabeticBinRange, DateTimeBinRange, AggregateBinRange, DoubleValueAggregateResult, HistogramResult, AttributeParameters } from "../idea/idea";
import { VisualBinRange, ChartType } from "./VisualBinRange";
import { NominalVisualBinRange } from "./NominalVisualBinRange";
import { QuantitativeVisualBinRange } from "./QuantitativeVisualBinRange";
import { AlphabeticVisualBinRange } from "./AlphabeticVisualBinRange";
import { DateTimeVisualBinRange } from "./DateTimeVisualBinRange";
import { NorthstarSettings } from "../../manager/Gateway";
import { ModelHelpers } from "../ModelHelpers";
import { AttributeTransformationModel } from "../../core/attribute/AttributeTransformationModel";

export const SETTINGS_X_BINS = 15;
export const SETTINGS_Y_BINS = 15;
export const SETTINGS_SAMPLE_SIZE = 100000;

export class VisualBinRangeHelper {

    public static GetNonAggregateVisualBinRange(dataBinRange: BinRange): VisualBinRange {
        if (dataBinRange instanceof NominalBinRange) {
            return new NominalVisualBinRange(dataBinRange);
        }
        else if (dataBinRange instanceof QuantitativeBinRange) {
            return new QuantitativeVisualBinRange(dataBinRange);
        }
        else if (dataBinRange instanceof AlphabeticBinRange) {
            return new AlphabeticVisualBinRange(dataBinRange);
        }
        else if (dataBinRange instanceof DateTimeBinRange) {
            return new DateTimeVisualBinRange(dataBinRange);
        }
        throw new Exception();
    }

    public static GetVisualBinRange(distinctAttributeParameters: AttributeParameters | undefined, dataBinRange: BinRange, histoResult: HistogramResult, attr: AttributeTransformationModel, chartType: ChartType): VisualBinRange {

        if (!(dataBinRange instanceof AggregateBinRange)) {
            return VisualBinRangeHelper.GetNonAggregateVisualBinRange(dataBinRange);
        }
        else {
            var aggregateKey = ModelHelpers.CreateAggregateKey(distinctAttributeParameters, attr, histoResult, ModelHelpers.AllBrushIndex(histoResult));
            var minValue = Number.MAX_VALUE;
            var maxValue = Number.MIN_VALUE;
            for (const brush of histoResult.brushes!) {
                aggregateKey.brushIndex = brush.brushIndex;
                for (var key in histoResult.bins) {
                    if (histoResult.bins.hasOwnProperty(key)) {
                        var bin = histoResult.bins[key];
                        var res = <DoubleValueAggregateResult>ModelHelpers.GetAggregateResult(bin, aggregateKey);
                        if (res && res.hasResult && res.result) {
                            minValue = Math.min(minValue, res.result);
                            maxValue = Math.max(maxValue, res.result);
                        }
                    }
                }
            }

            let visualBinRange = QuantitativeVisualBinRange.Initialize(minValue, maxValue, 10, false);

            if (chartType === ChartType.HorizontalBar || chartType === ChartType.VerticalBar) {
                visualBinRange = QuantitativeVisualBinRange.Initialize(Math.min(0, minValue),
                    Math.max(0, (visualBinRange).DataBinRange.maxValue!),
                    SETTINGS_X_BINS, false);
            }
            else if (chartType === ChartType.SinglePoint) {
                visualBinRange = QuantitativeVisualBinRange.Initialize(Math.min(0, minValue), Math.max(0, maxValue),
                    SETTINGS_X_BINS, false);
            }
            return visualBinRange;
        }
    }
}