| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- 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<Node, Edge<Node>>) : SiguiyamaContext {
- if(!this._optimizationAlgorithm)
- throw new BPMNError("Optimization algorithm not found, call \"setOptimizationAlgorithm\" method first!");
- return this._optimizationAlgorithm.run(graph);
- }
- }
- function getDeserializer() : Deserializer<string, Graph<Node, Edge<Node>>> {
- return new DefaultJsonDeserializer();
- }
- function getSerializer() : Serializer<Graph<Node, Edge<Node>>, 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));
|