public LDLBOBase CreateItem(string[] definition, string id) { LDLBaliseGroup baliseGroup = new LDLBaliseGroup(id); int nLines = definition.GetUpperBound(0); listStateEnum listState = listStateEnum.OtherData; for (int idx = 0; idx <= nLines; idx++) { string trimmedOnly = definition[idx].Trim(); string parsed = ParseItem(trimmedOnly); switch (listState) { case listStateEnum.OtherData: //This is the normal, default, condition in which the code should fall through and process the line as normal break; /*All the bellow suggest that the current line is part of a multi-line list*/ case listStateEnum.inAssWith: baliseGroup.AssociatedWith.Add(parsed); break; case listStateEnum.inBaliseList: baliseGroup.BaliseStrs.Add(parsed); break; case listStateEnum.inTypeList: addBgType(baliseGroup, parsed); break; } if ((listState != listStateEnum.OtherData) && (trimmedOnly.EndsWith(LDLSeperators.TERMINATER))) { listState = listStateEnum.OtherData; continue; } if ((baliseGroup.RBCStr == null) && (definition[idx].Contains(RBCIdent))) { baliseGroup.RBCStr = parsed; continue; } if (trimmedOnly.StartsWith(ERTMSLevel)) { string ertmsLevelStr = parsed; if (char.IsDigit(ertmsLevelStr[0])) { baliseGroup.ERTMSLevel = byte.Parse(ertmsLevelStr); } else { baliseGroup.ERTMSLevel = 4;//STM = 4 } continue; } if (trimmedOnly.StartsWith(bgTypeList)) { if (trimmedOnly.EndsWith(LDLSeperators.MEASUREMENT_SEPERATOR.ToString())) { listState = listStateEnum.inTypeList; } addBgType(baliseGroup, parsed); continue; } if (trimmedOnly.StartsWith(baliseList)) { if (trimmedOnly.EndsWith(LDLSeperators.MEASUREMENT_SEPERATOR.ToString())) { listState = listStateEnum.inBaliseList; } baliseGroup.BaliseStrs.Add(parsed); continue; } if (trimmedOnly.StartsWith(associatedWith)) { baliseGroup.AssociatedWith.Add(parsed); if (trimmedOnly.EndsWith(LDLSeperators.MEASUREMENT_SEPERATOR.ToString())) { listState = listStateEnum.inAssWith; } } } return(baliseGroup); }
private static void addBgType(LDLBaliseGroup baliseGroup, string parsed) { baliseGroup.BaliseGroupTypes.Add((LDLBaliseGroupType)Enum.Parse(typeof(LDLBaliseGroupType), parsed)); }