public bool Evaluate(RuleDomain rule) { ComparatorFactory factory = new ComparatorFactory(); foreach (var condition in rule.Conditions) { var latestDevicePing = _devicePingRepository.LastDevicePingForDevice(condition.Device.DeviceId); DevicePropertyValue latestValue = latestDevicePing.DevicePropertyValues.Find( x => x.PropertyId == condition.Property.PropertyId ); if (!factory.Make(condition.ComparisonOperator).Compare(latestValue.Value, condition.ComparisonValue)) { return(false); } } return(true); }
public static EF.DevicePropertyValue FromDomainModel(this EF.DevicePropertyValue obj, DevicePropertyValue domain) { if (obj == null) { obj = new EF.DevicePropertyValue(); } obj.DevicePropertyValueId = domain.Id; obj.DateCreated = domain.DateCreated; obj.DeviceId = domain.DeviceId; obj.DevicePingId = domain.DevicePingId; obj.PropertyId = domain.PropertyId; obj.PropertyValue = domain.Value; obj.PropertyId = domain.PropertyId; return(obj); }
// ---------------------------- CREATE OR UPDATE DEVICE -----------------------------// // --------------------------------- STEP 3 (last)---------------------------------// public void CreateOrUpdateDevice(CreateDeviceDto device) { if (device.Id == 0) { var newDevice = new Device { Name = device.DeviceName, Description = device.Description, DeviceTypeId = device.DeviceTypeId }; _deviceRepository.Insert(newDevice); foreach (var deviceType in device.DeviceTypes) { var propValues = deviceType.PropValues; foreach (var propValue in propValues) { _valueRepository.Insert(new DevicePropertyValue { Value = propValue.Value, DeviceTypePropertyId = _propertyRepository.FirstOrDefault(x => x.DeviceTypeId == deviceType.Id && x.Name == propValue.PropName).Id, DeviceId = newDevice.Id }); } } return; } var targetDevice = _deviceRepository.GetAll().Include(x => x.DevicePropertyValues) .First(x => x.Id == device.Id); targetDevice.Name = device.DeviceName; targetDevice.Description = device.Description; if (targetDevice.DeviceTypeId != device.DeviceTypeId) { var oldTypes = _typeService.GetDeviceTypeWithParents(targetDevice.DeviceTypeId).ToList(); var newTypes = _typeService.GetDeviceTypeWithParents(device.DeviceTypeId).ToList(); foreach (var oldType in oldTypes) { var type = newTypes.FirstOrDefault(x => x.Id == oldType.Id); if (type == null) { foreach (var prop in oldType.DeviceTypeProperties) { var valueToDelete = targetDevice.DevicePropertyValues.FirstOrDefault(x => x.DeviceTypePropertyId == prop.Id); if (valueToDelete == null) { continue; } _valueRepository.Delete(valueToDelete); } } } } foreach (var deviceType in device.DeviceTypes) { foreach (var propValue in deviceType.PropValues) { var property = _propertyRepository.GetAll().Include(x => x.DeviceType).First(x => x.DeviceTypeId == deviceType.Id && x.Name == propValue.PropName); var values = _valueRepository.GetAll().Include(x => x.Device) .Include(x => x.DeviceTypeProperty); var value = values.FirstOrDefault(x => x.DeviceId == targetDevice.Id && x.DeviceTypePropertyId == property.Id); if (propValue.Value != null) { if (value == null) { var newValue = new DevicePropertyValue { DeviceId = targetDevice.Id, DeviceTypePropertyId = property.Id, Value = propValue.Value }; targetDevice.DevicePropertyValues.Add(newValue); continue; } value.Value = propValue.Value; } } } targetDevice.DeviceTypeId = device.DeviceTypeId; }