/
entityDataMap.ts
130 lines (112 loc) · 4.25 KB
/
entityDataMap.ts
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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
/*
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*/
import { IAttributePath } from "../common/interfaces";
import { EntityData } from "./entityData";
export class EntityDataMap {
private entityMap: Map<string, EntityData> = new Map<string, EntityData>();
private updateEntityContent(
entityId: string,
columnName: string,
columnContent: string
) {
const existingEntity = this.entityMap.get(entityId);
if (existingEntity) {
existingEntity.entityColumn.set(columnName, columnContent);
this.entityMap.set(entityId, existingEntity);
return;
}
throw Error("Entity does not exist in the map"); // TODO - Revisit errors and dialog experience here
}
public get getEntityMap(): Map<string, EntityData> {
return this.entityMap;
}
public setEntity(
entityId: string,
entityName: string,
odataEtag: string,
attributePath: IAttributePath,
attributeContent: string,
mappingEntityId?: string
) {
let entityColumnMap = new Map<string, string>();
const existingEntity = this.entityMap.get(entityId);
if (existingEntity) {
entityColumnMap = existingEntity.entityColumn;
}
entityColumnMap.set(attributePath.source, attributeContent);
const entityData = new EntityData(
entityId,
entityName,
odataEtag,
entityColumnMap,
mappingEntityId
);
this.entityMap.set(entityId, entityData);
}
public getColumnContent(entityId: string, columnName: string) {
const existingEntity = this.entityMap.get(entityId);
if (existingEntity) {
return existingEntity.entityColumn.get(columnName);
}
throw Error("Entity does not exist in the map"); // TODO - Revisit errors and dialog experience here
}
public getEntityColumnContent(
entityId: string,
columnName: IAttributePath
) {
const existingColumnContent = this.getColumnContent(
entityId,
columnName.source
) as string;
if (columnName.relativePath.length) {
const jsonFromOriginalContent = JSON.parse(existingColumnContent);
return jsonFromOriginalContent[columnName.relativePath];
} else if (columnName.source.length) {
return existingColumnContent;
}
throw Error("Entity does not exist in the map"); // TODO - Revisit errors and dialog experience here
}
public updateEntityColumnContent(
entityId: string,
columnName: IAttributePath,
columnAttributeContent: string
) {
const existingEntity = this.entityMap.get(entityId);
if (existingEntity) {
const existingColumnContent = existingEntity.entityColumn.get(
columnName.source
) as string;
if (columnName.relativePath.length) {
const jsonFromOriginalContent = JSON.parse(
existingColumnContent
);
jsonFromOriginalContent[columnName.relativePath] =
columnAttributeContent;
existingEntity.entityColumn.set(
columnName.source,
JSON.stringify(jsonFromOriginalContent)
);
this.entityMap.set(entityId, existingEntity);
return;
} else if (columnName.source.length) {
this.updateEntityContent(
entityId,
columnName.source,
columnAttributeContent
);
return;
}
}
throw Error("Entity does not exist in the map"); // TODO - Revisit errors and dialog experience here
}
public updateEtagValue(entityId: string, etag: string) {
const existingEntity = this.entityMap.get(entityId);
if (existingEntity) {
existingEntity.setEntityEtag = etag;
return;
}
throw Error("Entity does not exist in the map"); // TODO - Revisit errors and dialog experience here
}
}