index.ts 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. import SiguiyamaAlgorithm from "./optimizer/siguiyama/SiguiyamaAlgorithm.js";
  2. import Graph from "./graph/Graph.js";
  3. import Node from "./graph/node/Node.js";
  4. import Edge from "./graph/edge/Edge.js";
  5. import BPMNError from "./errors/BPMNError.js";
  6. import {SiguiyamaContext} from "./optimizer/siguiyama/SiguiyamaContext.js";
  7. import DzwfJsonDeserializer from "./io/deserialize/json/DzwfJsonDeserializer.js";
  8. import {readFileSync, writeFileSync} from "node:fs";
  9. import CycleRemoveStep from "./optimizer/steps/CycleRemoveStep.js";
  10. import LayerAssignmentStep from "./optimizer/steps/LayerAssignmentStep.js";
  11. import NodeOrderingStep from "./optimizer/steps/NodeOrderingStep.js";
  12. import CoordinateAssignmentStep from "./optimizer/steps/CoordinateAssignmentStep.js";
  13. import EdgeRoutingStep from "./optimizer/steps/EdgeRoutingStep.js";
  14. import CleanupStep from "./optimizer/steps/CleanupStep.js";
  15. import DzwfJsonSerializer from "./io/serialize/json/DzwfJsonSerializer.js";
  16. export 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. const deserializer = new DzwfJsonDeserializer();
  29. const data = deserializer.deserialize(readFileSync("./data/bpmn-graph.json", "utf8"));
  30. const algorithm = new SiguiyamaAlgorithm().addStep(new CycleRemoveStep()).addStep(new LayerAssignmentStep()).addStep(new NodeOrderingStep()).addStep(new CoordinateAssignmentStep()).addStep(new EdgeRoutingStep()).addStep(new CleanupStep());
  31. const optimizer = new BPMNOptimizer().setOptimizationAlgorithm(algorithm);
  32. optimizer.run(data.graph);
  33. const serializer = new DzwfJsonSerializer();
  34. writeFileSync("./data/document.dzwf", serializer.serialize(data));