// Note: this modifies an SD that is passed to us and will alter a possibly cached // object shared amongst other threads. This is generally useful and saves considerable // time when the same snapshot is needed again, but may result in side-effects private OperationOutcome snapshotGenerationNeeded(StructureDefinition definition) { if (!Settings.GenerateSnapshot) { return(new OperationOutcome()); } // Default implementation: call event if (OnSnapshotNeeded != null) { var eventData = new OnSnapshotNeededEventArgs(definition, Settings.ResourceResolver); OnSnapshotNeeded(this, eventData); return(eventData.Result); } // Else, expand, depending on our configuration #if REUSE_SNAPSHOT_GENERATOR var generator = this.SnapshotGenerator; if (generator != null) { generator.Update(definition); #if DEBUG string xml = (new FhirXmlSerializer()).SerializeToString(definition); string name = definition.Id ?? definition.Name.Replace(" ", "").Replace("/", ""); var dir = Path.Combine(Path.GetTempPath(), "validation"); if (!Directory.Exists(dir)) { Directory.CreateDirectory(dir); } File.WriteAllText(Path.Combine(dir, name) + ".StructureDefinition.xml", xml); #endif return(generator.Outcome ?? new OperationOutcome()); #else if (Settings.ResourceResolver != null) { SnapshotGeneratorSettings settings = Settings.GenerateSnapshotSettings ?? SnapshotGeneratorSettings.Default; (new SnapshotGenerator(Settings.ResourceResolver, settings)).Update(definition); #endif } return(new OperationOutcome()); } }
// Note: this modifies an SD that is passed to us and will alter a possibly cached // object shared amongst other threads. This is generally useful and saves considerable // time when the same snapshot is needed again, but may result in side-effects private OperationOutcome snapshotGenerationNeeded(StructureDefinition definition) { if (!Settings.GenerateSnapshot) { return(new OperationOutcome()); } // Default implementation: call event if (OnSnapshotNeeded != null) { var eventData = new OnSnapshotNeededEventArgs(definition, Settings.ResourceResolver); OnSnapshotNeeded(this, eventData); return(eventData.Result); } // Else, expand, depending on our configuration #if REUSE_SNAPSHOT_GENERATOR var generator = this.SnapshotGenerator; if (generator != null) { generator.Update(definition); #if DUMP_SNAPSHOTS string xml = FhirSerializer.SerializeResourceToXml(definition); string name = definition.Id ?? definition.Name.Replace(" ", ""); File.WriteAllText(@"c:\temp\validation\" + name + ".StructureDefinition.xml", xml); #endif return(generator.Outcome ?? new OperationOutcome()); #else if (Settings.ResourceResolver != null) { SnapshotGeneratorSettings settings = Settings.GenerateSnapshotSettings ?? SnapshotGeneratorSettings.Default; (new SnapshotGenerator(Settings.ResourceResolver, settings)).Update(definition); #endif } return(new OperationOutcome()); } }