DisplayAlarmComponent.fromCrawledBlock constructor

DisplayAlarmComponent.fromCrawledBlock(
  1. CrawledBlock block
)

Implementation

factory DisplayAlarmComponent.fromCrawledBlock(CrawledBlock block) {
  assert(
    block.blockName.toUpperCase() == "VALARM",
    "Received invalid block: ${block.blockName}",
  );

  DateTimeTriggerProperty? dateTimeTrigger;
  DurationTriggerProperty? durationTrigger;
  DurationProperty? duration;
  RepeatCountProperty? repeatCount;

  for (var e in block.properties) {
    switch (e.name.toUpperCase()) {
      case "TRIGGER":
        {
          final isDuration = e.parameters.any(
            (element) =>
                element.name.toUpperCase() == "VALUE" &&
                ValueDataTypeParameter.fromCrawledParameter(element).type ==
                    ValueType.duration,
          );

          if (isDuration) {
            durationTrigger = DurationTriggerProperty.fromCrawledProperty(e);
          } else {
            dateTimeTrigger = DateTimeTriggerProperty.fromCrawledProperty(e);
          }
          break;
        }
      case "DURATION":
        duration = DurationProperty.fromCrawledProperty(e);
        break;
      case "REPEAT":
        repeatCount = RepeatCountProperty.fromCrawledProperty(e);
        break;

      default:
        print(
            "Unknown property encountered in DisplayAlarmComponent: ${e.name}");
    }
  }

  return DisplayAlarmComponent(
    dateTimeTrigger: dateTimeTrigger,
    durationTrigger: durationTrigger,
    duration: duration,
    repeatCount: repeatCount,
  );
}