exportDiagramToJson method

dynamic exportDiagramToJson(
  1. BuilderStyle context
)

Implementation

exportDiagramToJson(BuilderStyle context) {
  Map<String, dynamic> jsonDiagram = {
    "components": [],
    "connections": [],
  };
  for (ComponentData component
      in canvasReader.model.getAllComponents().values) {
    if (component.type != 'port') {
      BuilderComponentData componentData = component.data;

      List<Map<String, dynamic>> ports = [];
      for (String portId in component.childrenIds) {
        var portComponent = canvasReader.model.getComponent(portId);
        PortData portData = portComponent.data as PortData;
        ports.add({
          "id": portId,
          "name": portData.name,
          "type": portData.type,
          "isInput": portData.isInput,
          "isMandatory": portData.isMandatory,
          "alignment": {
            "x": portData.alignmentOnComponent.x,
            "y": portData.alignmentOnComponent.y,
          },
        });
      }

      jsonDiagram["components"].add({
        "id": component.id,
        "name": componentData.name,
        "type": component.type,
        "parameters":
            componentData.parameters.map((param) => param.toJson()).toList(),
        "position": {"x": component.position.dx, "y": component.position.dy},
        "size": {
          "width": component.size.width,
          "height": component.size.height
        },
        "color": componentData.color.value.toRadixString(16),
        "ports": ports,
      });
    }
  }
  if (componentList.isNotEmpty) {
    var allLinks = canvasReader.model.getAllLinks().values;
    for (var link in allLinks) {
      String sourcePortId = link.sourceComponentId;
      String targetPortId = link.targetComponentId;

      var sourcePort = canvasReader.model.getComponent(sourcePortId);
      var targetPort = canvasReader.model.getComponent(targetPortId);

      jsonDiagram["connections"].add({
        "source": {
          "block_id": sourcePort.parentId,
          "port_id": sourcePortId,
          "port_name": (sourcePort.data as PortData).name,
        },
        "target": {
          "block_id": targetPort.parentId,
          "port_id": targetPortId,
          "port_name": (targetPort.data as PortData).name,
        },
        "color": link.linkStyle.color.value.toRadixString(16),
      });
    }
  }

  jsonDiagram["entry"] = context.toJson();

  return jsonDiagram;
}