Adf.Base.Messaging.XmlMessageDefinitionProvider.Read C# (CSharp) Method

Read() public method

public Read ( string messageName, string section = null ) : MessageDefinition
messageName string
section string
return Adf.Core.Messaging.MessageDefinition
        public MessageDefinition Read(string messageName, string section = null)
        {
            var filename = messageName;

            if (!File.Exists(filename)) throw new FileNotFoundException(string.Format("Unable to locate message definition file {0}", filename), filename);

            var definition = XDocument.Load(filename);
            var message = definition.Element("message");

            if (message == null) return null;

            var messageDefinition = new MessageDefinition
                                        {
                                            Name = message.GetAttributeOrDefault("name"),
                                            FileName = filename,
                                            RecordSeparator = message.GetAttributeOrDefault("recordSeparator", ","),
                                            HasHeader = message.GetAttributeOrDefault<bool>("hasHeader"),
                                        };

            var encoding = message.GetAttributeOrDefault("encoding");

            if(!encoding.IsNullOrEmpty())
            {
                try { messageDefinition.Encoding = Encoding.GetEncoding(encoding); }
                catch(ArgumentException)
                {
                    throw new MessagingException(string.Format("Invalid encoding specified: {0}", encoding));
                }
            }

            foreach (XElement record in message.Elements("record"))
            {
                var newRecord = new RecordDefinition
                {
                    Name = record.GetAttributeOrDefault("name"),
                    DomainObjectName = record.GetAttributeOrDefault("domainobjectname"),
                    FieldSeparator = record.GetAttributeOrDefault("fieldSeparator", ","),
                };

                int defaultStartPos = 0;
                foreach (XElement field in record.Elements("field"))
                {
                    var newField = new FieldDefinition
                    {
                        Format = field.GetAttributeOrDefault("format"),
                        IsOptional = field.GetAttributeOrDefault<bool>("optional"),
                        StartPosition = field.GetAttributeOrDefault<int>("position", defaultStartPos),
                        Name = field.GetAttributeOrDefault("name"),
                        Type = field.GetAttributeFromDescriptorOrDefault<FieldDefinitionType>("type"),
                        Label = field.GetAttributeOrDefault("label", field.GetAttributeOrDefault("name")),
                        Table = field.GetAttributeOrDefault("table", newRecord.DomainObjectName),
                        Default = field.GetAttributeOrDefault("default")
                    };
                    defaultStartPos = newField.StartPosition + 1;

                    if (newField.Name.IsNullOrEmpty() || newField.Type.IsNullOrEmpty()) throw new MessagingException("Error reading message definition " + messageDefinition.Name);

                    newRecord.Fields.Add(newField);
                }
                messageDefinition.Records.Add(newRecord);
            }

            return messageDefinition;
        }
XmlMessageDefinitionProvider