toXml method

  1. @override
XmlElement toXml()
override

must only be called to save this object.

Implementation

@override
XmlElement toXml() {
  final el = super.toXml()..replaceSingle(customData.toXml());
  XmlUtils.removeChildrenByName(el, KdbxXml.NODE_STRING);
  XmlUtils.removeChildrenByName(el, KdbxXml.NODE_HISTORY);
  XmlUtils.removeChildrenByName(el, KdbxXml.NODE_BINARY);
  el.children.addAll(stringEntries.map((stringEntry) {
    final value = XmlElement(XmlName(KdbxXml.NODE_VALUE));
    if (stringEntry.value is ProtectedValue) {
      value.attributes.add(
          XmlAttribute(XmlName(KdbxXml.ATTR_PROTECTED), KdbxXml.VALUE_TRUE));
      KdbxFile.setProtectedValueForNode(
          value, stringEntry.value as ProtectedValue?);
    } else if (stringEntry.value is StringValue) {
      value.children.add(XmlText(stringEntry.value!.getText()!));
    }
    return XmlElement(XmlName(KdbxXml.NODE_STRING))
      ..children.addAll([
        XmlElement(XmlName(KdbxXml.NODE_KEY))
          ..children.add(XmlText(stringEntry.key.key)),
        value,
      ]);
  }));
  el.children.addAll(binaryEntries.map((binaryEntry) {
    final key = binaryEntry.key;
    final binary = binaryEntry.value;
    final value = XmlElement(XmlName(KdbxXml.NODE_VALUE));
    if (binary.isInline) {
      binary.saveToXml(value);
    } else {
      final binaryIndex = ctx.findBinaryId(binary);
      value.addAttribute(KdbxXml.ATTR_REF, binaryIndex.toString());
    }
    return XmlElement(XmlName(KdbxXml.NODE_BINARY))
      ..children.addAll([
        XmlElement(XmlName(KdbxXml.NODE_KEY))..children.add(XmlText(key.key)),
        value,
      ]);
  }));
  if (!isHistoryEntry) {
    el.children.add(
      XmlElement(XmlName(KdbxXml.NODE_HISTORY))
        ..children.addAll(history.map((e) => e.toXml())),
    );
  }
  return el;
}