-
Notifications
You must be signed in to change notification settings - Fork 18
/
deserialize-all.ts
46 lines (43 loc) · 1.58 KB
/
deserialize-all.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
/*
* Copyright (C) 2019 Toshiba Corporation
* SPDX-License-Identifier: Apache-2.0
*/
import { DDiagramSerializedItem } from "../../d-diagram-serialized";
import { EShape } from "../e-shape";
import { EShapeOnDeserializeds } from "../e-shape-deserializers";
import { EShapeResourceManagerDeserialization } from "../e-shape-resource-manager-deserialization";
import { EShapeUuidMapping } from "../e-shape-uuid-mapping";
import { EShapeUuidMappingImpl } from "../e-shape-uuid-mapping-impl";
import { deserialize } from "./deserialize";
export const deserializeAll = (
serializeds: DDiagramSerializedItem[],
manager: EShapeResourceManagerDeserialization
): Promise<EShape[]> | null => {
const shapes: Array<Promise<EShape> | EShape> = [];
for (let i = 0, imax = serializeds.length; i < imax; ++i) {
shapes.push(deserialize(serializeds[i], manager));
}
if (0 < shapes.length) {
return Promise.all(shapes).then((resolved: EShape[]): EShape[] => {
callOnDeserialized(serializeds, resolved, new EShapeUuidMappingImpl(resolved), manager);
return resolved;
});
}
return null;
};
const callOnDeserialized = (
serializeds: DDiagramSerializedItem[],
shapes: EShape[],
mapping: EShapeUuidMapping,
manager: EShapeResourceManagerDeserialization
): void => {
for (let i = 0, imax = serializeds.length; i < imax; ++i) {
const serialized = serializeds[i];
const shape = shapes[i];
const onDeserialized = EShapeOnDeserializeds[serialized[0]];
if (onDeserialized) {
onDeserialized(serialized, shape, mapping, manager);
}
callOnDeserialized(serialized[20], shape.children, mapping, manager);
}
};