/// <summary> /// If <paramref name="field"/> is a group-counter for <paramref name="msgType"/>, check that it is accurate, else do nothing. /// </summary> /// <param name="field">a group's counter field</param> /// <param name="map">the FieldMap that contains the group being checked</param> /// <param name="msgType">msg type of message that is/contains <paramref name="map"/></param> public void CheckGroupCount(Fields.IField field, FieldMap map, string msgType) { if (IsGroup(msgType, field.Tag) && map.GetInt(field.Tag) != map.GroupCount(field.Tag)) { throw new RepeatingGroupCountMismatch(field.Tag); } }
private void ProcessFieldMapToJSON(string sNode, StringBuilder sb, FieldMap fieldMap, string origChkSum = null) { Type fieldType; sb.Append($@"""{sNode}"":"); foreach (var field in fieldMap) { if (dataDictionary.TryGetFieldType(field.Key, out fieldType)) { FIXDictionary.DDField ddField = dataDictionary.FieldsByTag[field.Key]; child = new XElement(ddField.Name); child.Add(new XAttribute("Tag", field.Key)); child.Add(new XAttribute("Value", field.Value)); if (ddField.HasEnums()) { child.Add(new XAttribute("HasEnums", true)); string enumTranslation = ddField.EnumDict.FirstOrDefault(t => t.Key == field.Value.ToString()).Value; if (!string.IsNullOrEmpty(enumTranslation)) { child.Add(new XAttribute("EnumTranslation", enumTranslation)); } } if (field.Key == Tags.CheckSum && origChkSum != null) { child.Add(new XAttribute("OrigChks", origChkSum)); } int groupCount = fieldMap.GroupCount(field.Key); if (groupCount > 0) { child.Add(new XAttribute("IsGroup", "Y")); child.Add(new XAttribute("GroupsCount", groupCount)); for (int i = 1; i <= groupCount; i++) { Group currGroup = fieldMap.GetGroup(i, field.Key); ProcessFieldMapToXML(child, currGroup); } } } else { child = new XElement("UserDefined_" + field.Key.ToString()); child.Add(new XAttribute("Tag", field.Key)); child.Add(new XAttribute("Value", field.Value)); } parent.Add(child); } sb.Append("}"); }
public void Iterate(FieldMap map, string msgType) { DataDictionary.CheckHasNoRepeatedTags(map); // check non-group fields int lastField = 0; foreach (KeyValuePair <int, Fields.IField> kvp in map) { Fields.IField field = kvp.Value; if (lastField != 0 && field.Tag == lastField) { throw new RepeatedTag(lastField); } CheckHasValue(field); if (!string.IsNullOrEmpty(this.Version)) { CheckValidFormat(field); if (ShouldCheckTag(field)) { CheckValidTagNumber(field.Tag); CheckValue(field); if (!Message.IsHeaderField(field.Tag, this) && !Message.IsTrailerField(field.Tag, this)) { CheckIsInMessage(field, msgType); CheckGroupCount(field, map, msgType); } } } lastField = field.Tag; } // check contents of each group foreach (int groupTag in map.GetGroupTags()) { if (!Message.IsHeaderField(groupTag, this) && !Message.IsTrailerField(groupTag, this)) { for (int i = 1; i <= map.GroupCount(groupTag); i++) { Group g = map.GetGroup(i, groupTag); DDGrp ddg = this.Messages[msgType].GetGroup(groupTag); IterateGroup(g, ddg, msgType); } } } }
public void Iterate(FieldMap map, string msgType) { DataDictionary.CheckHasNoRepeatedTags(map); // check non-group fields int lastField = 0; foreach (KeyValuePair<int, Fields.IField> kvp in map) { Fields.IField field = kvp.Value; if (lastField != 0 && field.Tag == lastField) throw new RepeatedTag(lastField); CheckHasValue(field); if (null != this.Version && this.Version.Length > 0) { CheckValidFormat(field); if (ShouldCheckTag(field)) { CheckValidTagNumber(field.Tag); CheckValue(field); if (!Message.IsHeaderField(field.Tag, this) && !Message.IsTrailerField(field.Tag, this)) { CheckIsInMessage(field, msgType); CheckGroupCount(field, map, msgType); } } } lastField = field.Tag; } // check contents of each group foreach (int groupTag in map.GetGroupTags()) { for (int i = 1; i <= map.GroupCount(groupTag); i++) { Group g = map.GetGroup(i, groupTag); DDGrp ddg = this.Messages[msgType].GetGroup(groupTag); IterateGroup(g, ddg, msgType); } } }
/// <summary> /// If <paramref name="field"/> is a group-counter for <paramref name="msgType"/>, check that it is accurate, else do nothing. /// </summary> /// <param name="field">a group's counter field</param> /// <param name="map">the FieldMap that contains the group being checked</param> /// <param name="msgType">msg type of message that is/contains <paramref name="map"/></param> public void CheckGroupCount(Fields.IField field, FieldMap map, string msgType) { if(IsGroup(msgType, field.Tag)) { if (map.GetInt(field.Tag) != map.GroupCount(field.Tag)) { throw new RepeatingGroupCountMismatch(field.Tag); } } }
public string toXMLFields(FieldMap fields, int space) { StringBuilder s = new StringBuilder(); string name = string.Empty; // fields foreach (var f in fields) { s.Append("<field "); if ((dataDictionary_ != null) && ( dataDictionary_.FieldsByTag.ContainsKey(f.Key))) { s.Append("name=\"" + dataDictionary_.FieldsByTag[f.Key].Name + "\" "); } s.Append("number=\"" + f.Key.ToString() + "\">"); s.Append("<![CDATA[" + f.Value.ToString() + "]]>"); s.Append("</field>"); } // now groups List<int> groupTags = fields.GetGroupTags(); foreach (int groupTag in groupTags) { for (int counter = 1; counter <= fields.GroupCount(groupTag); counter++) { s.Append("<group>"); s.Append( toXMLFields( fields.GetGroup(counter, groupTag), space+1)); s.Append("</group>"); } } return s.ToString(); }