import { readFileSync, writeFileSync } from "node:fs"; import BPMNError from "./v1/errors/BPMNError.js"; import Edge from "./v1/graph/edge/Edge.js"; import Graph from "./v1/graph/Graph.js"; import Node from "./v1/graph/node/Node.js"; import Deserializer from "./v1/io/deserialize/Deserializer.js"; import DefaultJsonDeserializer from "./v1/io/deserialize/json/DefaultJsonDeserializer.js"; import Serializer from "./v1/io/serialize/Serializer.js"; import DefaultJsonSerializer from "./v1/io/serialize/json/DefaultJsonSerializer.js"; import CoordinateAssignmentStep from "./v1/optimizer/siguiyama/CoordinateAssignmentStep.js"; import CycleRemoveStep from "./v1/optimizer/siguiyama/CycleRemoveStep.js"; import LayerAssignmentStep from "./v1/optimizer/siguiyama/LayerAssignmentStep.js"; import NodeOrderingStep from "./v1/optimizer/siguiyama/NodeOrderingStep.js"; import SiguiyamaAlgorithm from "./v1/optimizer/siguiyama/SiguiyamaAlgorithm.js"; import { SiguiyamaContext } from "./v1/optimizer/siguiyama/SiguiyamaContext.js"; class BPMNOptimizer { private _optimizationAlgorithm?: SiguiyamaAlgorithm; public setOptimizationAlgorithm(algorithm: SiguiyamaAlgorithm) : this { this._optimizationAlgorithm = algorithm; return this; } public run(graph: Graph>) : SiguiyamaContext { if(!this._optimizationAlgorithm) throw new BPMNError("Optimization algorithm not found, call \"setOptimizationAlgorithm\" method first!"); return this._optimizationAlgorithm.run(graph); } } function getDeserializer() : Deserializer>> { return new DefaultJsonDeserializer(); } function getSerializer() : Serializer>, string> { return new DefaultJsonSerializer(); } const algorithm = new SiguiyamaAlgorithm().addStep(new CycleRemoveStep()).addStep(new LayerAssignmentStep()).addStep(new NodeOrderingStep()).addStep(new CoordinateAssignmentStep(100, 50)); const optimizer = new BPMNOptimizer().setOptimizationAlgorithm(algorithm); const data = readFileSync("./data/graph.json").toString(); const graph = getDeserializer().deserialize(data); const result = optimizer.run(graph); writeFileSync(`./data/graph-${Date.now()}.json`, getSerializer().serialize(result.graph));