encode method

String encode(
  1. MachineBlueprint<S, E> blueprint
)

Encodes the given blueprint into a PlantUML string.

Implementation

String encode(MachineBlueprint<S, E> blueprint) {
  _hasForks = false;

  scanForForks(BasicBlueprint<S, E> bp) {
    if (bp is ForkBlueprint) {
      return _hasForks = true;
    }
    if (bp is CompositeBlueprint) {
      for (final child in (bp as CompositeBlueprint<S, E>).children) {
        scanForForks(child);
      }
    } else if (bp is ParallelBlueprint) {
      for (final child in (bp as ParallelBlueprint<S, E>).children) {
        scanForForks(child);
      }
    }
  }

  scanForForks(blueprint.root);

  final buffer = StringBuffer();
  buffer.writeln('@startuml');

  if (blueprint.name != null) {
    buffer.writeln('title ${blueprint.name}');
  }

  if (direction != null) {
    buffer.writeln('$direction direction');
  }

  for (final param in skinparams) {
    buffer.writeln('skinparam $param');
  }

  _encodeState(blueprint.root, buffer, 0);
  _encodeTransitions(blueprint.root, buffer);

  buffer.writeln('@enduml');
  return buffer.toString();
}