aboutsummaryrefslogtreecommitdiff
path: root/src/fields/HistogramField.ts
blob: bb0014ab3ee89ad7506b25d6d05579b8d961b463 (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
import { BasicField } from "./BasicField";
import { Field, FieldId } from "./Field";
import { Types } from "../server/Message";
import { HistogramOperation } from "../client/northstar/operations/HistogramOperation";
import { action } from "mobx";
import { AttributeTransformationModel } from "../client/northstar/core/attribute/AttributeTransformationModel";
import { ColumnAttributeModel } from "../client/northstar/core/attribute/AttributeModel";
import { CurrentUserUtils } from "../server/authentication/models/current_user_utils";


export class HistogramField extends BasicField<HistogramOperation> {
    constructor(data?: HistogramOperation, id?: FieldId, save: boolean = true) {
        super(data ? data : HistogramOperation.Empty, save, id);
    }

    toString(): string {
        return JSON.stringify(this.Data);
    }

    Copy(): Field {
        return new HistogramField(this.Data);
    }

    ToScriptString(): string {
        return `new HistogramField("${this.Data}")`;
    }

    ToJson(): { type: Types, data: string, _id: string } {
        return {
            type: Types.HistogramOp,
            data: JSON.stringify(this.Data),
            _id: this.Id
        }
    }

    @action
    static FromJson(id: string, data: any): HistogramField {
        let jp = JSON.parse(data);
        let X: AttributeTransformationModel | undefined;
        let Y: AttributeTransformationModel | undefined;
        let V: AttributeTransformationModel | undefined;

        CurrentUserUtils.GetAllNorthstarColumnAttributes().map(attr => {
            if (attr.displayName == jp.X.AttributeModel.Attribute.DisplayName) {
                X = new AttributeTransformationModel(new ColumnAttributeModel(attr), jp.X.AggregateFunction);
            }
            if (attr.displayName == jp.Y.AttributeModel.Attribute.DisplayName) {
                Y = new AttributeTransformationModel(new ColumnAttributeModel(attr), jp.Y.AggregateFunction);
            }
            if (attr.displayName == jp.V.AttributeModel.Attribute.DisplayName) {
                V = new AttributeTransformationModel(new ColumnAttributeModel(attr), jp.V.AggregateFunction);
            }
        });
        if (X && Y && V) {
            return new HistogramField(new HistogramOperation(X, Y, V, jp.Normalization), id, false);
        }
        return new HistogramField(HistogramOperation.Empty, id, false);
    }
}