public async Task<ActionResult> UpdateRuleProperties(EditDeviceRuleModel model)
        {
            string errorMessage = model.CheckForErrorMessage();
            if(!string.IsNullOrWhiteSpace(errorMessage))
            {
                return Json(new { error = errorMessage });
            }

            DeviceRule rule = CreateDeviceRuleFromEditModel(model);
            TableStorageResponse<DeviceRule> response = await _deviceRulesLogic.SaveDeviceRuleAsync(rule);

            return BuildRuleUpdateResponse(response);
        }
        public async Task<ActionResult> UpdateRuleEnabledState(EditDeviceRuleModel ruleModel)
        {
            TableStorageResponse<DeviceRule> response = await _deviceRulesLogic.UpdateDeviceRuleEnabledStateAsync(ruleModel.DeviceID, 
                ruleModel.RuleId, ruleModel.EnabledState);

            return BuildRuleUpdateResponse(response);
        }
        private DeviceRule CreateDeviceRuleFromEditModel(EditDeviceRuleModel editModel)
        {
            DeviceRule rule = new DeviceRule(editModel.RuleId);
            rule.DataField = editModel.DataField;
            rule.DeviceID = editModel.DeviceID;
            rule.EnabledState = editModel.EnabledState;
            rule.Etag = editModel.Etag;
            rule.Operator = editModel.Operator;
            rule.RuleOutput = editModel.RuleOutput;
            if (!string.IsNullOrWhiteSpace(editModel.Threshold))
            {
                rule.Threshold =
                    double.Parse(
                        editModel.Threshold,
                        NumberStyles.Float,
                        CultureInfo.CurrentCulture);
            }

            return rule;
        }
        private EditDeviceRuleModel CreateEditModelFromDeviceRule(DeviceRule rule)
        {
            EditDeviceRuleModel editModel = new EditDeviceRuleModel();
            editModel.RuleId = rule.RuleId;
            editModel.DataField = rule.DataField;
            editModel.DeviceID = rule.DeviceID;
            editModel.EnabledState = rule.EnabledState;
            editModel.Etag = rule.Etag;
            editModel.Operator = rule.Operator;
            editModel.RuleOutput = rule.RuleOutput;
            if (rule.Threshold != null)
            {
                editModel.Threshold = rule.Threshold.ToString();
            }

            return editModel;
        }
        public async Task<ActionResult> EditRuleProperties(string deviceId, string ruleId)
        {
            EditDeviceRuleModel editModel = null;
            //empty ruleId implies that we are creating new
            if (string.IsNullOrWhiteSpace(ruleId))
            {
                bool canCreate = await _deviceRulesLogic.CanNewRuleBeCreatedForDeviceAsync(deviceId);
                if (!canCreate)
                {
                    editModel = new EditDeviceRuleModel()
                    {
                        DeviceID = deviceId
                    };
                    return View("AllRulesAssigned", editModel);
                }
            }

            DeviceRule ruleModel = await _deviceRulesLogic.GetDeviceRuleOrDefaultAsync(deviceId, ruleId);
            Dictionary<string, List<string>> availableFields = await _deviceRulesLogic.GetAvailableFieldsForDeviceRuleAsync(ruleModel.DeviceID, ruleModel.RuleId);

            List<SelectListItem> availableDataFields = MvcDataHelper.ConvertStringListToSelectList(availableFields["availableDataFields"]);
            List<SelectListItem> availableOperators = MvcDataHelper.ConvertStringListToSelectList(availableFields["availableOperators"]);
            List<SelectListItem> availableRuleOutputs = MvcDataHelper.ConvertStringListToSelectList(availableFields["availableRuleOutputs"]);

            editModel = CreateEditModelFromDeviceRule(ruleModel);
            editModel.AvailableDataFields = availableDataFields;
            editModel.AvailableOperators = availableOperators;
            editModel.AvailableRuleOutputs = availableRuleOutputs;

            return View("EditDeviceRuleProperties", editModel);
        }