Ejemplo n.º 1
0
        public IActionResult Create([Required] string deviceId, TraitViewModel viewModel)
        {
            if (!_deviceRepository.Contains(deviceId))
            {
                return(NotFound());
            }

            var device = _deviceRepository.GetDetached(deviceId);

            if (device.Traits.Any(x => x.Trait == viewModel.Trait))
            {
                ModelState.AddModelError("Trait", "Device already contains trait");
            }

            // Set values
            var trait = new DeviceTrait
            {
                Trait      = viewModel.Trait,
                Attributes = !string.IsNullOrEmpty(viewModel.Attributes) ? JsonConvert.DeserializeObject <Dictionary <string, object> >(viewModel.Attributes, new ObjectDictionaryConverter()) : null,
                Commands   = !string.IsNullOrEmpty(viewModel.Commands) ? JsonConvert.DeserializeObject <Dictionary <string, IDictionary <string, string> > >(viewModel.Commands) : new Dictionary <string, IDictionary <string, string> >(),
                State      = !string.IsNullOrEmpty(viewModel.State) ? JsonConvert.DeserializeObject <Dictionary <string, DeviceState> >(viewModel.State) : null
            };

            // Handle any challenges
            switch (viewModel.ChallengeType)
            {
            case ChallengeType.Acknowledge:
                trait.Challenge = new AcknowledgeChallenge();
                break;

            case ChallengeType.Pin:
                trait.Challenge = new PinChallenge
                {
                    Pin = viewModel.ChallengePin
                };
                break;

            case ChallengeType.None:
            default:
                trait.Challenge = null;
                break;
            }

            // Final validation
            foreach (var error in DeviceTraitValidator.Validate(trait))
            {
                ModelState.AddModelError(string.Empty, error);
            }

            if (!ModelState.IsValid)
            {
                return(RedirectToAction("Create", new { deviceId }));
            }

            // Save changes
            device.Traits.Add(trait);
            _deviceRepository.Update(deviceId, device);

            return(RedirectToAction("Edit", "GoogleDevice", new { deviceId }));
        }
Ejemplo n.º 2
0
        public IActionResult Edit([Required] string deviceId, DeviceViewModel viewModel)
        {
            if (!_deviceRepository.Contains(deviceId))
            {
                return(NotFound());
            }

            // Set new values
            var device = _deviceRepository.GetDetached(deviceId);

            device.Id              = viewModel.Id;
            device.Type            = viewModel.Type;
            device.Disabled        = viewModel.Disabled;
            device.WillReportState = viewModel.WillReportState;
            device.RoomHint        = viewModel.RoomHint;
            device.Name.Name       = viewModel.Name;

            // Default names
            if (!string.IsNullOrEmpty(viewModel.DefaultNames))
            {
                device.Name.DefaultNames = viewModel.DefaultNames.Split(',').Select(x => x.Trim()).ToList();
            }
            else
            {
                device.Name.DefaultNames = new List <string>();
            }

            // Nicknames
            if (!string.IsNullOrEmpty(viewModel.Nicknames))
            {
                device.Name.Nicknames = viewModel.Nicknames.Split(',').Select(x => x.Trim()).ToList();
            }
            else
            {
                device.Name.Nicknames = new List <string>();
            }

            // Device Info
            if (!string.IsNullOrEmpty(viewModel.Manufacturer) ||
                !string.IsNullOrEmpty(viewModel.Model) ||
                !string.IsNullOrEmpty(viewModel.HwVersion) ||
                !string.IsNullOrEmpty(viewModel.SwVersion))
            {
                if (device.DeviceInfo == null)
                {
                    device.DeviceInfo = new DeviceInfo();
                }

                device.DeviceInfo.Manufacturer = !string.IsNullOrEmpty(viewModel.Manufacturer) ? viewModel.Manufacturer : null;
                device.DeviceInfo.Model        = !string.IsNullOrEmpty(viewModel.Model) ? viewModel.Model : null;
                device.DeviceInfo.HwVersion    = !string.IsNullOrEmpty(viewModel.HwVersion) ? viewModel.HwVersion : null;
                device.DeviceInfo.SwVersion    = !string.IsNullOrEmpty(viewModel.SwVersion) ? viewModel.SwVersion : null;
            }
            else
            {
                device.DeviceInfo = null;
            }

            // Final validation
            foreach (var error in DeviceValidator.Validate(device))
            {
                ModelState.AddModelError(string.Empty, error);
            }

            if (!ModelState.IsValid)
            {
                return(RedirectToAction("Edit", new { deviceId }));
            }

            // Save changes
            _deviceRepository.Update(deviceId, device);

            return(RedirectToAction("Index"));
        }