private static void CheckIndexesInMsg(IEnumerable <messageType> allMessages, messageType msg) { if (msg.index == null) { return; } foreach (var index in msg.index) { var indexedField = msg.field.SingleOrDefault(field => field.id == index.forField); if (indexedField == null) { Logger.Fatal("Message {0}: index {1} references unknown field {2}", msg.name, index.id, index.forField); continue; } if (indexedField.modifier != modifierType.repeated) { Logger.Fatal("Message {0}: index {1} references non repeated field {2}", msg.name, index.id, indexedField.name); continue; } if (!new[] { typeType.nestedMessage, typeType.referenceMessage }.Contains(indexedField.type)) { Logger.Fatal("Message {0}: index {1} references non message field {2}", msg.name, index.id, indexedField.name); continue; } // get the pointed message and check if it contains the wanted field var referencedFieldMessageType = allMessages.SingleOrDefault(m => m.name == indexedField.messageType); Debug.Assert(referencedFieldMessageType != null); var sortingField = referencedFieldMessageType.field.SingleOrDefault(field => field.name == index.sortBy); if (sortingField == null) { Logger.Fatal("Message {0}: index {1}'s sortBy ({2}) isn't a field of message {3}", msg.name, index.id, index.sortBy, referencedFieldMessageType.name); continue; } if (sortingField.modifier != modifierType.required) { Logger.Fatal("Message {0}: index {1}'s sortBy ({2}) isn't a required field of message {3}", msg.name, index.id, index.sortBy, referencedFieldMessageType.name); continue; } if (new[] { typeType.nestedMessage, typeType.referenceMessage }.Contains(sortingField.type)) { Logger.Fatal("Message {0}: index {1}'s sortBy ({2}) can't be a message", msg.name, index.id, index.sortBy); } } }
public void Visit(messageType node) { _strm.WriteLine("message {0}Header", node.name); _strm.WriteLine("{"); foreach (var field in node.field) { field.Accept(this); } foreach (var index in node.index) { index.Accept(this); } _strm.WriteLine("}"); }
private static void CheckFieldsInMsg(IEnumerable <messageType> allMessages, messageType msg) { if (msg.field == null) { return; } foreach (var field in msg.field) { if (field.id < 1) { Logger.Fatal("Message {0}: field {1}'s id should be >= 1", msg.name, field.name); continue; } if (field.messageType != null && allMessages.SingleOrDefault(m => m.name == field.messageType) == null) { Logger.Fatal("Message {0}: field {1} references unknown message {2}", msg.name, field.name, field.messageType); } } }
private static void CheckIndexesInMsg(IEnumerable<messageType> allMessages, messageType msg) { if (msg.index == null) return; foreach (var index in msg.index) { var indexedField = msg.field.SingleOrDefault(field => field.id == index.forField); if (indexedField == null) { Logger.Fatal("Message {0}: index {1} references unknown field {2}", msg.name, index.id, index.forField); continue; } if (indexedField.modifier != modifierType.repeated) { Logger.Fatal("Message {0}: index {1} references non repeated field {2}", msg.name, index.id, indexedField.name); continue; } if (!new[] { typeType.nestedMessage, typeType.referenceMessage }.Contains(indexedField.type)) { Logger.Fatal("Message {0}: index {1} references non message field {2}", msg.name, index.id, indexedField.name); continue; } // get the pointed message and check if it contains the wanted field var referencedFieldMessageType = allMessages.SingleOrDefault(m => m.name == indexedField.messageType); Debug.Assert(referencedFieldMessageType != null); var sortingField = referencedFieldMessageType.field.SingleOrDefault(field => field.name == index.sortBy); if (sortingField == null) { Logger.Fatal("Message {0}: index {1}'s sortBy ({2}) isn't a field of message {3}", msg.name, index.id, index.sortBy, referencedFieldMessageType.name); continue; } if (sortingField.modifier != modifierType.required) { Logger.Fatal("Message {0}: index {1}'s sortBy ({2}) isn't a required field of message {3}", msg.name, index.id, index.sortBy, referencedFieldMessageType.name); continue; } if (new[] { typeType.nestedMessage, typeType.referenceMessage }.Contains(sortingField.type)) { Logger.Fatal("Message {0}: index {1}'s sortBy ({2}) can't be a message", msg.name, index.id, index.sortBy); } } }
private static void CheckFieldsInMsg(IEnumerable<messageType> allMessages, messageType msg) { if (msg.field == null) return; foreach (var field in msg.field) { if (field.id < 1) { Logger.Fatal("Message {0}: field {1}'s id should be >= 1", msg.name, field.name); continue; } if (field.messageType != null && allMessages.SingleOrDefault(m => m.name == field.messageType) == null) { Logger.Fatal("Message {0}: field {1} references unknown message {2}", msg.name, field.name, field.messageType); } } }