/// <summary> /// write the read descriptor word /// </summary> /// <param name="fields"></param> /// <param name="fieldsList"></param> /// <exception cref="IOException"> </exception> private void WriteRdw(List <object> fields, IFieldsList fieldsList) { if (_writeRdw) { int size = GetFieldsListSize(fields, fieldsList) + RdwSize; _stream.Write(new byte[] { (byte)(size >> 8), (byte)(size & 0xFF), 0, 0 }); } }
/// <summary> /// read a fields list /// </summary> /// <param name="fieldsList"></param> /// <returns></returns> /// <exception cref="IOException"></exception> /// <exception cref="EbcdicException"></exception> private List <object> ReadFields(IFieldsList fieldsList) { List <object> values = new List <object>(); IDictionary <string, decimal> readNumericValues = new Dictionary <string, decimal>(); foreach (CopybookElement fieldFormat in fieldsList.Elements) { var format = fieldFormat as FieldFormat; values.Add(format != null ? ReadField(format, readNumericValues) : ReadFieldsGroup((FieldsGroup)fieldFormat, readNumericValues)); } return(values); }
/// <summary> /// write list of fields /// </summary> /// <param name="fields"></param> /// <param name="fieldsList"></param> /// <exception cref="IOException"> </exception> /// <exception cref="EbcdicException"> </exception> private void WriteFields(List <object> fields, IFieldsList fieldsList) { for (int i = 0; i < fields.Count; i++) { object fieldFormat = fieldsList.Elements[i]; var format = fieldFormat as FieldFormat; if (format != null) { WriteField((dynamic)fields[i], format); } else { WriteFieldsGroup(fields[i], (FieldsGroup)fieldFormat); } } }
/// <summary> /// compute the fields list size /// </summary> /// <param name="fields"></param> /// <param name="fieldsList"></param> /// <returns></returns> private int GetFieldsListSize(List <object> fields, IFieldsList fieldsList) { int size = 0; for (int i = 0; i < fields.Count; i++) { object fieldFormat = fieldsList.Elements[i]; var format = fieldFormat as FieldFormat; if (format != null) { size += GetFieldSize(fields[i], format); } else { size += GetFieldsGroupSize(fields[i], (FieldsGroup)fieldFormat); } } return(size); }
/// <summary> /// Map fields list object /// </summary> /// <param name="item"></param> /// <param name="fieldsList"></param> /// <param name="writtenNumbers"></param> /// <returns></returns> private List <object> MapFieldsList(object item, IFieldsList fieldsList, IDictionary <string, decimal> writtenNumbers) { List <object> values = new List <object>(); PropertyAccessor wrapper = new PropertyAccessor(item); foreach (CopybookElement element in fieldsList.Elements) { var format = element as FieldFormat; if (format != null) { values.Add(Convert(wrapper.GetProperty(GetName(format)), format, writtenNumbers)); } else { values.Add(MapFieldsGroup(wrapper.GetProperty(GetName(element)), (FieldsGroup)element, writtenNumbers)); } } return(values); }
/// <summary> /// read a fields list /// </summary> /// <param name="fieldsList"></param> /// <returns></returns> /// <exception cref="IOException"> </exception> /// <exception cref="EbcdicException"> </exception> private List<object> ReadFields(IFieldsList fieldsList) { List<object> values = new List<object>(); IDictionary<string, decimal> readNumericValues = new Dictionary<string, decimal>(); foreach (CopybookElement fieldFormat in fieldsList.Elements) { var format = fieldFormat as FieldFormat; values.Add(format != null ? ReadField(format, readNumericValues) : ReadFieldsGroup((FieldsGroup) fieldFormat, readNumericValues)); } return values; }