index.ts 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. import { readFileSync, writeFileSync } from "node:fs";
  2. import BPMNError from "./v1/errors/BPMNError.js";
  3. import Edge from "./v1/graph/edge/Edge.js";
  4. import Graph from "./v1/graph/Graph.js";
  5. import Node from "./v1/graph/node/Node.js";
  6. import Deserializer from "./v1/io/deserialize/Deserializer.js";
  7. import DefaultJsonDeserializer from "./v1/io/deserialize/json/DefaultJsonDeserializer.js";
  8. import Serializer from "./v1/io/serialize/Serializer.js";
  9. import DefaultJsonSerializer from "./v1/io/serialize/json/DefaultJsonSerializer.js";
  10. import CoordinateAssignmentStep from "./v1/optimizer/siguiyama/CoordinateAssignmentStep.js";
  11. import CycleRemoveStep from "./v1/optimizer/siguiyama/CycleRemoveStep.js";
  12. import LayerAssignmentStep from "./v1/optimizer/siguiyama/LayerAssignmentStep.js";
  13. import NodeOrderingStep from "./v1/optimizer/siguiyama/NodeOrderingStep.js";
  14. import SiguiyamaAlgorithm from "./v1/optimizer/siguiyama/SiguiyamaAlgorithm.js";
  15. import { SiguiyamaContext } from "./v1/optimizer/siguiyama/SiguiyamaContext.js";
  16. class BPMNOptimizer {
  17. private _optimizationAlgorithm?: SiguiyamaAlgorithm;
  18. public setOptimizationAlgorithm(algorithm: SiguiyamaAlgorithm) : this {
  19. this._optimizationAlgorithm = algorithm;
  20. return this;
  21. }
  22. public run(graph: Graph<Node, Edge<Node>>) : SiguiyamaContext {
  23. if(!this._optimizationAlgorithm)
  24. throw new BPMNError("Optimization algorithm not found, call \"setOptimizationAlgorithm\" method first!");
  25. return this._optimizationAlgorithm.run(graph);
  26. }
  27. }
  28. function getDeserializer() : Deserializer<string, Graph<Node, Edge<Node>>> {
  29. return new DefaultJsonDeserializer();
  30. }
  31. function getSerializer() : Serializer<Graph<Node, Edge<Node>>, string> {
  32. return new DefaultJsonSerializer();
  33. }
  34. const algorithm = new SiguiyamaAlgorithm().addStep(new CycleRemoveStep()).addStep(new LayerAssignmentStep()).addStep(new NodeOrderingStep()).addStep(new CoordinateAssignmentStep(100, 50));
  35. const optimizer = new BPMNOptimizer().setOptimizationAlgorithm(algorithm);
  36. const data = readFileSync("./data/graph.json").toString();
  37. const graph = getDeserializer().deserialize(data);
  38. const result = optimizer.run(graph);
  39. writeFileSync(`./data/graph-${Date.now()}.json`, getSerializer().serialize(result.graph));