|
|
@@ -3,40 +3,27 @@ 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;
|
|
|
+ private _graph?: Graph<Node, Edge<Node>>;
|
|
|
|
|
|
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);
|
|
|
+ public setGraph(graph: Graph<Node, Edge<Node>>) : this {
|
|
|
+ this._graph = graph;
|
|
|
+ return this;
|
|
|
}
|
|
|
-}
|
|
|
-
|
|
|
-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);
|
|
|
+ public run() : void {
|
|
|
+ if(!this._optimizationAlgorithm)
|
|
|
+ throw new BPMNError("Optimization algorithm not found, call \"setOptimizationAlgorithm\" method first!");
|
|
|
+ if(!this._graph)
|
|
|
+ throw new BPMNError("Graph graph not found, call \"setGraph\" method first!");
|
|
|
|
|
|
-const serializer = new DzwfJsonSerializer();
|
|
|
-writeFileSync("./data/document.dzwf", serializer.serialize(data));
|
|
|
+ this._optimizationAlgorithm.run(this._graph);
|
|
|
+ }
|
|
|
+}
|