parseWithReload method

Future<(TreeElement, TreeElement Function())> parseWithReload(
  1. ResourceResolver resolver,
  2. String instanceId,
  3. String instanceSrc, {
  4. bool partial = false,
})

Like parse, also returning a synchronous function that produces the complete instance (used to fill in partial elements, as JavaRosa's ExternalDataInstance.parseExternalFile(false) does). File instances are re-parsed from the bytes already read.

Implementation

Future<(TreeElement, TreeElement Function())> parseWithReload(
  ResourceResolver resolver,
  String instanceId,
  String instanceSrc, {
  bool partial = false,
}) async {
  final provider = providerFor(instanceId, instanceSrc);
  if (provider != null) {
    return (
      provider.get(instanceId, instanceSrc, partial: partial),
      () => provider.get(instanceId, instanceSrc),
    );
  }
  final bytes = await resolver.read(instanceSrc);
  for (final parser in _fileParsers) {
    if (parser.isSupported(instanceId, instanceSrc)) {
      return (
        parser.parse(instanceId, bytes, partial: partial),
        () => parser.parse(instanceId, bytes),
      );
    }
  }
  return (
    parseXmlExternalInstance(instanceId, bytes),
    () => parseXmlExternalInstance(instanceId, bytes),
  );
}