public string SelectPart(string partQuery) { // Part can be specified directly wth a part name, or through a query expression to dynamically select a part at runtime // Lists of parts to choose from can be specified by a comma seperated list // the + character prepended means choose the part from the list with the most data // the - character prepended means choose the part from the list with the least data // the ! character prepended means choose the first part from the list with no data // The + and - options can also be used without a list, in which case they mean simply choose the part with the most or least data of all parts // If no operator is specified, then a random part from the list is chosen if (partQuery.Contains(",")) { // we have a list if (partQuery[0] == '+') { string newQuery = partQuery.Substring(1); float maxData = 0f; string maxPart = ""; TestFlightPartData partData = null; string[] parts = newQuery.Split(new char[1] { ',' }); foreach (string partName in parts) { partData = TestFlightUtil.GetPartDataForPart(partName); if (partData == null) { continue; } float partFlightData = float.Parse(partData.GetValue("flightData")); if (partFlightData > maxData) { maxData = partFlightData; maxPart = partData.PartName; } } return(maxPart); } else if (partQuery[0] == '-') { string newQuery = partQuery.Substring(1); float minData = float.MaxValue; string minPart = ""; TestFlightPartData partData = null; string[] parts = newQuery.Split(new char[1] { ',' }); foreach (string partName in parts) { partData = TestFlightUtil.GetPartDataForPart(partName); if (partData == null) { continue; } float partFlightData = float.Parse(partData.GetValue("flightData")); if (partFlightData < minData) { minData = partFlightData; minPart = partData.PartName; } } return(minPart); } else if (partQuery[0] == '!') { return(TestFlightUtil.PartWithNoData(partQuery.Substring(1))); } else { // TODO not yet implemented return(""); } } else { // no list, so this is either a direct part name, or a simple +/- operator if (partQuery == "+") { return(TestFlightUtil.PartWithMostData()); } else if (partQuery == "-") { return(TestFlightUtil.PartWithLeastData()); } else { TestFlightPartData partData = TestFlightUtil.GetPartDataForPart(partQuery); if (partData == null) { return(""); } return(partQuery); } } }