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
|
import { observable } from "mobx";
import { custom, serializable } from "serializr";
import { ColumnAttributeModel } from "../../../client/northstar/core/attribute/AttributeModel";
import { AttributeTransformationModel } from "../../../client/northstar/core/attribute/AttributeTransformationModel";
import { HistogramOperation } from "../../../client/northstar/operations/HistogramOperation";
import { ObjectField } from "../../../new_fields/ObjectField";
import { CurrentUserUtils } from "../../../server/authentication/models/current_user_utils";
import { OmitKeys } from "../../../Utils";
import { Deserializable } from "../../util/SerializationHelper";
import { Copy, ToScriptString, ToString } from "../../../new_fields/FieldSymbols";
function serialize(field: HistogramField) {
const obj = OmitKeys(field, ['Links', 'BrushLinks', 'Result', 'BrushColors', 'FilterModels', 'FilterOperand']).omit;
return obj;
}
function deserialize(jp: any) {
let X: AttributeTransformationModel | undefined;
let Y: AttributeTransformationModel | undefined;
let V: AttributeTransformationModel | undefined;
const schema = CurrentUserUtils.GetNorthstarSchema(jp.SchemaName);
if (schema) {
CurrentUserUtils.GetAllNorthstarColumnAttributes(schema).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 HistogramOperation(jp.SchemaName, X, Y, V, jp.Normalization);
}
}
return HistogramOperation.Empty;
}
@Deserializable("histogramField")
export class HistogramField extends ObjectField {
@serializable(custom(serialize, deserialize)) @observable public readonly HistoOp: HistogramOperation;
constructor(data?: HistogramOperation) {
super();
this.HistoOp = data ? data : HistogramOperation.Empty;
}
toString(): string {
return JSON.stringify(OmitKeys(this.HistoOp, ['Links', 'BrushLinks', 'Result', 'BrushColors', 'FilterModels', 'FilterOperand']).omit);
}
[Copy]() {
// const y = this.HistoOp;
// const z = this.HistoOp.Copy;
return new HistogramField(HistogramOperation.Duplicate(this.HistoOp));
}
[ToScriptString]() {
return this.toString();
}
[ToString]() {
return this.toString();
}
}
|