import SiguiyamaAlgorithm from "./optimizer/siguiyama/SiguiyamaAlgorithm.js"; import Graph from "./graph/Graph.js"; import Node from "./graph/node/Node.js"; import Edge from "./graph/edge/Edge.js"; import BPMNError from "./errors/BPMNError.js"; import {SiguiyamaContext} from "./optimizer/siguiyama/SiguiyamaContext.js"; import DzwfJsonDeserializer from "./io/deserialize/json/DzwfJsonDeserializer.js"; import {readFileSync, writeFileSync} from "node:fs"; import CycleRemoveStep from "./optimizer/steps/CycleRemoveStep.js"; import LayerAssignmentStep from "./optimizer/steps/LayerAssignmentStep.js"; import NodeOrderingStep from "./optimizer/steps/NodeOrderingStep.js"; import CoordinateAssignmentStep from "./optimizer/steps/CoordinateAssignmentStep.js"; import EdgeRoutingStep from "./optimizer/steps/EdgeRoutingStep.js"; import CleanupStep from "./optimizer/steps/CleanupStep.js"; import DzwfJsonSerializer from "./io/serialize/json/DzwfJsonSerializer.js"; export 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); } } const deserializer = new DzwfJsonDeserializer(); const data = deserializer.deserialize(readFileSync("./data/bpmn-graph.json", "utf8")); const algorithm = new SiguiyamaAlgorithm().addStep(new CycleRemoveStep()).addStep(new LayerAssignmentStep()).addStep(new NodeOrderingStep()).addStep(new CoordinateAssignmentStep()).addStep(new EdgeRoutingStep()).addStep(new CleanupStep()); const optimizer = new BPMNOptimizer().setOptimizationAlgorithm(algorithm); optimizer.run(data.graph); const serializer = new DzwfJsonSerializer(); writeFileSync("./data/document.dzwf", serializer.serialize(data));