protected override object CoreGetModelObject(IDictionary <string, IList <string> > properties) { const string PROP_TOKEN_SOURCE_FILE_PATH = "SourceFilePath"; string sourceFilePath = null; IList <string> values; IConfigurationObject sourceObject; ICommonSerializationStrategy nativeXmlSerializationStrategy; IXyzlSerializer xyzlSerializer; if ((object)properties == null) { throw new ArgumentNullException(nameof(properties)); } if (properties.TryGetValue(PROP_TOKEN_SOURCE_FILE_PATH, out values)) { if ((object)values != null && values.Count == 1) { sourceFilePath = values[0]; } } if (SolderFascadeAccessor.DataTypeFascade.IsWhiteSpace(sourceFilePath)) { throw new InvalidOperationException(String.Format("The source file path cannot be null or whitespace.")); } sourceFilePath = Path.GetFullPath(sourceFilePath); xyzlSerializer = this.CoreGetXyzlSerializer(properties); nativeXmlSerializationStrategy = new NativeXyzlSerializationStrategy(xyzlSerializer); sourceObject = nativeXmlSerializationStrategy.DeserializeObjectFromFile <IConfigurationObject>(sourceFilePath); return(sourceObject); }
public async ValueTask <EmailMessage> HostAsync(bool strictMatching, EmailPrototype emailPrototype, object textMetalModel) { ITextMetalTemplateObject textMetalTemplate; EmailMessage emailMessage; INativeXmlSerializationStrategy nativeXmlSerializationStrategy; IXyzlSerializer xyzlSerializer; XmlTextReader templateXmlTextReader; if ((object)emailPrototype == null) { throw new ArgumentNullException(nameof(emailPrototype)); } emailMessage = new EmailMessage(); xyzlSerializer = new XyzlSerializer(SolderFascadeAccessor.DataTypeFascade, SolderFascadeAccessor.ReflectionFascade); xyzlSerializer.RegisterKnownObject <EmailTemplateEchoFragment>(new XyzlName() { LocalName = "From", NamespaceUri = "http://textmetal.wellengineered.us/stdlib/v6.0.0" }); xyzlSerializer.RegisterKnownObject <EmailTemplateEchoFragment>(new XyzlName() { LocalName = "To", NamespaceUri = "http://textmetal.wellengineered.us/stdlib/v6.0.0" }); xyzlSerializer.RegisterKnownObject <EmailTemplateEchoFragment>(new XyzlName() { LocalName = "ReplyTo", NamespaceUri = "http://textmetal.wellengineered.us/stdlib/v6.0.0" }); xyzlSerializer.RegisterKnownObject <EmailTemplateEchoFragment>(new XyzlName() { LocalName = "Sender", NamespaceUri = "http://textmetal.wellengineered.us/stdlib/v6.0.0" }); xyzlSerializer.RegisterKnownObject <EmailTemplateEchoFragment>(new XyzlName() { LocalName = "CarbonCopy", NamespaceUri = "http://textmetal.wellengineered.us/stdlib/v6.0.0" }); xyzlSerializer.RegisterKnownObject <EmailTemplateEchoFragment>(new XyzlName() { LocalName = "BlindCarbonCopy", NamespaceUri = "http://textmetal.wellengineered.us/stdlib/v6.0.0" }); xyzlSerializer.RegisterKnownObject <EmailTemplateEchoFragment>(new XyzlName() { LocalName = "Subject", NamespaceUri = "http://textmetal.wellengineered.us/stdlib/v6.0.0" }); xyzlSerializer.RegisterKnownObject <EmailTemplateEchoFragment>(new XyzlName() { LocalName = "Body", NamespaceUri = "http://textmetal.wellengineered.us/stdlib/v6.0.0" }); //xyzlSerializer.RegisterKnownValueObject<TextMetalTemplateTextObject>(); nativeXmlSerializationStrategy = new NativeXyzlSerializationStrategy(xyzlSerializer); await using (ITextMetalContext textMetalContext = this.CreateContext()) { textMetalContext.IteratorModels.Push(textMetalModel); // FROM if ((object)emailPrototype.FromXml != null) { using (templateXmlTextReader = new XmlTextReader(new StringReader(emailPrototype.FromXml.OuterXml))) textMetalTemplate = await nativeXmlSerializationStrategy.DeserializeObjectFromNativeAsync <ITextMetalTemplateObject>(templateXmlTextReader); await textMetalTemplate.ExpandTemplateAsync(textMetalContext); emailMessage.From = this.StringWriter.ToString(); this.StringWriter.GetStringBuilder().Clear(); } // SENDER if ((object)emailPrototype.SenderXml != null) { using (templateXmlTextReader = new XmlTextReader(new StringReader(emailPrototype.SenderXml.OuterXml))) textMetalTemplate = await nativeXmlSerializationStrategy.DeserializeObjectFromNativeAsync <ITextMetalTemplateObject>(templateXmlTextReader); await textMetalTemplate.ExpandTemplateAsync(textMetalContext); emailMessage.Sender = this.StringWriter.ToString(); this.StringWriter.GetStringBuilder().Clear(); } // REPLY_TO if ((object)emailPrototype.ReplyToXml != null) { using (templateXmlTextReader = new XmlTextReader(new StringReader(emailPrototype.ReplyToXml.OuterXml))) textMetalTemplate = await nativeXmlSerializationStrategy.DeserializeObjectFromNativeAsync <ITextMetalTemplateObject>(templateXmlTextReader); await textMetalTemplate.ExpandTemplateAsync(textMetalContext); emailMessage.ReplyTo = this.StringWriter.ToString(); this.StringWriter.GetStringBuilder().Clear(); } // TO if ((object)emailPrototype.ToXml != null) { using (templateXmlTextReader = new XmlTextReader(new StringReader(emailPrototype.ToXml.OuterXml))) textMetalTemplate = await nativeXmlSerializationStrategy.DeserializeObjectFromNativeAsync <ITextMetalTemplateObject>(templateXmlTextReader); await textMetalTemplate.ExpandTemplateAsync(textMetalContext); emailMessage.To = this.StringWriter.ToString(); this.StringWriter.GetStringBuilder().Clear(); } // CC if ((object)emailPrototype.CarbonCopyXml != null) { using (templateXmlTextReader = new XmlTextReader(new StringReader(emailPrototype.CarbonCopyXml.OuterXml))) textMetalTemplate = await nativeXmlSerializationStrategy.DeserializeObjectFromNativeAsync <ITextMetalTemplateObject>(templateXmlTextReader); await textMetalTemplate.ExpandTemplateAsync(textMetalContext); emailMessage.CarbonCopy = this.StringWriter.ToString(); this.StringWriter.GetStringBuilder().Clear(); } // BCC if ((object)emailPrototype.BlindCarbonCopyXml != null) { using (templateXmlTextReader = new XmlTextReader(new StringReader(emailPrototype.BlindCarbonCopyXml.OuterXml))) textMetalTemplate = await nativeXmlSerializationStrategy.DeserializeObjectFromNativeAsync <ITextMetalTemplateObject>(templateXmlTextReader); await textMetalTemplate.ExpandTemplateAsync(textMetalContext); emailMessage.BlindCarbonCopy = this.StringWriter.ToString(); this.StringWriter.GetStringBuilder().Clear(); } // SUBJECT if ((object)emailPrototype.SubjectXml != null) { using (templateXmlTextReader = new XmlTextReader(new StringReader(emailPrototype.SubjectXml.OuterXml))) textMetalTemplate = await nativeXmlSerializationStrategy.DeserializeObjectFromNativeAsync <ITextMetalTemplateObject>(templateXmlTextReader); await textMetalTemplate.ExpandTemplateAsync(textMetalContext); emailMessage.Subject = this.StringWriter.ToString(); this.StringWriter.GetStringBuilder().Clear(); } // IS_BODY_HTML emailMessage.IsBodyHtml = emailPrototype.IsBodyHtml; // BODY if ((object)emailPrototype.BodyXml != null) { using (templateXmlTextReader = new XmlTextReader(new StringReader(emailPrototype.BodyXml.OuterXml))) textMetalTemplate = await nativeXmlSerializationStrategy.DeserializeObjectFromNativeAsync <ITextMetalTemplateObject>(templateXmlTextReader); await textMetalTemplate.ExpandTemplateAsync(textMetalContext); emailMessage.Body = this.StringWriter.ToString(); this.StringWriter.GetStringBuilder().Clear(); } textMetalContext.IteratorModels.Pop(); } return(emailMessage); }