|
@@ -3,9 +3,29 @@ import Graph from "../../../graph/Graph.js";
|
|
|
import Node from "../../../graph/node/Node.js";
|
|
import Node from "../../../graph/node/Node.js";
|
|
|
import { JsonSerializer } from "./JsonSerializer.js";
|
|
import { JsonSerializer } from "./JsonSerializer.js";
|
|
|
|
|
|
|
|
|
|
+type JsonNode = { x: number, y: number, width: number, height: number, type: string, id: string };
|
|
|
|
|
+
|
|
|
|
|
+type JsonEdge = { from: JsonNode["id"], to: JsonNode["id"], waypoints: { x: number, y: number }[], id: string };
|
|
|
|
|
+
|
|
|
|
|
+/**
|
|
|
|
|
+ * Стандартный JSON-сериализатор, преобразующий объект типа {@link Graph} в JSON
|
|
|
|
|
+ */
|
|
|
export default class DefaultJsonSerializer implements JsonSerializer<Graph<Node, Edge<Node>>> {
|
|
export default class DefaultJsonSerializer implements JsonSerializer<Graph<Node, Edge<Node>>> {
|
|
|
|
|
+ /**
|
|
|
|
|
+ * Преобразование объекта типа {@link Graph} в JSON
|
|
|
|
|
+ * @param data Объект, который необходимо сериализовать
|
|
|
|
|
+ */
|
|
|
serialize(data: Graph<Node, Edge<Node>>): string {
|
|
serialize(data: Graph<Node, Edge<Node>>): string {
|
|
|
- const nodes = data.getNodes(), edges = data.getEdges();
|
|
|
|
|
- return JSON.stringify({ nodes, edges }, null, 2);
|
|
|
|
|
|
|
+ const nodes: JsonNode[] = [];
|
|
|
|
|
+ data.getNodes().forEach((node) => {
|
|
|
|
|
+ nodes.push({ x: node.getX(), y: node.getY(), width: node.getWidth(), height: node.getHeight(), type: node.getType(), id: node.getId() })
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
|
|
+ const edges: JsonEdge[] = [];
|
|
|
|
|
+ data.getEdges().forEach((edge) => {
|
|
|
|
|
+ edges.push({ from: edge.getFrom().getId(), to: edge.getTo().getId(), waypoints: edge.getWaypoints(), id: edge.getId() });
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
|
|
+ return JSON.stringify({ nodes, edges });
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|