public void GetFirmwareCollection(HttpContext context) { FirmwareCollection firmwareCollection = _firmwareHandler.GetFirmwareCollection(context.Request.ParsedQuery); string json = JsonSerializer.SerializeJson(firmwareCollection); context.Response.Payload.Write(json); context.Response.Status = HttpStatus.OK; }
/// <summary> /// Returns an instance of <see cref="FirmwareCollection"/> which contains all <see cref="Firmware"/> matching the passed query. The following query parameters can be applied: ///<list type="number"> /// <item>query parameter <code>id</code>: returns only the <see cref="Firmware"/> having the passed <see cref="Firmware.Id"/></item> /// <item>query parameter <code>device</code>: returns all <see cref="Firmware"/> whose <see cref="Firmware.DeviceName"/> contains the passed value (case invariant)</item> /// <item>query parameter <code>maj</code>: returns all <see cref="Firmware"/> having the passed <see cref="Firmware.MajorVersion"/></item> /// <item>query parameter <code>min</code>: returns all <see cref="Firmware"/> having the passed <see cref="Firmware.MinorVersion"/></item> /// </list> /// If multiple query parameters are applied, the respective <see cref="Firmware"/> must match all query criterion in order to be in the returned list of <see cref="FirmwareCollection"/>. /// If the query is 'null' or empty (i.e. query.Count == 0), all <see cref="Firmware"/> handled by this class are returned. /// Unknown query parameters will be ignored. /// Additionally, the <code>uuid</code> and <code>leds</code> query parameter can be set. These parameter values will be added as query parameters in all hyperlinks of the returned resource representation such that /// a consumer of the REST API is navigated to an individual firmware file where these values are already injected. /// </summary> /// <param name="query">query (can be null or empty)</param> /// <returns>instance of <see cref="FirmwareCollection"/> containing all <see cref="Firmware"/> matching the passed query</returns> public FirmwareCollection GetFirmwareCollection(IDictionary <string, string> query) { FirmwareCollection firmwareCollection = new FirmwareCollection(); //return all firmware, if no query parameters are specified if (query == null || query.Count == 0) { foreach (IFirmwareDataSet fds in _firmwareStorage.GetAllFirmwares()) { Firmware fw = new Firmware(); fw.FirmwareId = fds.Id; fw.MajorVersion = fds.MajorVersion; fw.MinorVersion = fds.MinorVersion; fw.DeviceName = fds.DeviceName; fw.FileExtension = fds.FirmwareFileExtension; if (query.ContainsKey("uuid") && query.ContainsKey("leds")) { fw.Uuid = query["uuid"]; fw.LedCount = query["leds"]; } fw.HasRawData = _firmwareStorage.HasRawData(fds.Id); firmwareCollection.FirmwareList.Add(fw); } } //filter firmware based on given query parameters else { foreach (IFirmwareDataSet fds in _firmwareStorage.GetAllFirmwares()) { if (query.ContainsKey("id")) { if (fds.Id.CompareTo(query["id"]) != 0) { continue; } } if (query.ContainsKey("device")) { if (String.IsNullOrWhiteSpace(fds.DeviceName) || !fds.DeviceName.ToLower().Contains(query["device"].ToLower())) { continue; } } if (query.ContainsKey("min")) { if (fds.MinorVersion != ApiBase.ParseInt(query["min"], BadRequestException.MSG_INVALID_MIN_MAJ_VERSION)) { continue; } } if (query.ContainsKey("maj")) { if (fds.MinorVersion != ApiBase.ParseInt(query["maj"], BadRequestException.MSG_INVALID_MIN_MAJ_VERSION)) { continue; } } Firmware fw = new Firmware(); fw.FirmwareId = fds.Id; fw.MajorVersion = fds.MajorVersion; fw.MinorVersion = fds.MinorVersion; fw.DeviceName = fds.DeviceName; fw.FileExtension = fds.FirmwareFileExtension; if (query.ContainsKey("uuid") && query.ContainsKey("leds")) { fw.Uuid = query["uuid"]; fw.LedCount = query["leds"]; } fw.HasRawData = _firmwareStorage.HasRawData(fds.Id); firmwareCollection.FirmwareList.Add(fw); } } return(firmwareCollection); }