importDiagramFromJson method

dynamic importDiagramFromJson(
  1. BuildContext context,
  2. dynamic jsonDiagram,
  3. BuilderStyle styleProvider
)

Implementation

importDiagramFromJson(
    BuildContext context, dynamic jsonDiagram, BuilderStyle styleProvider) {
  deleteAllComponents();
  styleProvider.fromJson(jsonDiagram["entry"]);
  for (var componentJson in jsonDiagram["components"]) {
    var mainComponent = ComponentData(
      id: componentJson["id"],
      type: componentJson["type"],
      data: BuilderComponentData(
        parameters: (componentJson["parameters"] as List)
            .map((param) => ComponentParameter.fromJson(param))
            .toList(),
        inputData: [], // Non utilisé lors du chargement
        outputData: [], // Non utilisé lors du chargement
        isOnMenu: false,
        color: Color(int.parse(componentJson["color"], radix: 16)),
        name: componentJson["name"],
      ),
      position: Offset(
        componentJson["position"]["x"],
        componentJson["position"]["y"],
      ),
      size: Size(
        componentJson["size"]["width"],
        componentJson["size"]["height"],
      ),
    );

    canvasWriter.model.addComponent(mainComponent);
    componentList.add(mainComponent.id);

    for (var portJson in componentJson["ports"]) {
      var portData = PortData(
        id: portJson["id"],
        type: portJson["type"],
        name: portJson["name"],
        isMandatory: portJson["isMandatory"],
        isInput: portJson["isInput"],
        size: Size(20, 20), // Taille fixe comme dans le code original
        alignmentOnComponent: Alignment(
          portJson["alignment"]["x"],
          portJson["alignment"]["y"],
        ),
        builderStyle: styleProvider,
      );

      // Calcul de la position relative au parent
      final portPosition = mainComponent.position +
          mainComponent.getPointOnComponent(portData.alignmentOnComponent) -
          portData.size.center(Offset.zero);

      var portComponent = ComponentData(
        id: portJson["id"],
        type: 'port',
        data: portData,
        position: portPosition,
        size: portData.size,
      );
      portComponent.zOrder -= 1;

      canvasWriter.model.addComponent(portComponent);
      canvasWriter.model
          .setComponentParent(portComponent.id, mainComponent.id);
    }
  }

  for (var connectionJson in jsonDiagram["connections"]) {
    final sourcePortId = connectionJson["source"]["port_id"];
    final targetPortId = connectionJson["target"]["port_id"];
    final color = Color(int.parse(connectionJson["color"], radix: 16));

    connectComponents(sourcePortId, targetPortId, color);
  }

  updateAllComponentStyle();
}