Exemple #1
0
        public void Test_OverrideEventResponse_WithContent()
        {
            var response = new OverrideEventResponse
            {
                Message = "This is an error message",
                Success = false
            };

            SimpleBinarizableInstanceTester.TestClass(response, "Custom OverrideEventResponse not same after round trip serialisation");
        }
Exemple #2
0
        /// <summary>
        /// Inserts the override event into the site model.
        /// </summary>
        public async Task <OverrideEventResponse> ExecuteAsync(OverrideEventRequestArgument arg)
        {
            Log.LogInformation($"START Add Override Event Executor: Project={arg.ProjectID}, Asset={arg.AssetID}, Date Range={arg.StartUTC}-{arg.EndUTC}");

            var result = new OverrideEventResponse {
                Success = false
            };

            if (arg.StartUTC >= arg.EndUTC)
            {
                result.Message = $"Invalid date range. Start:{arg.StartUTC} End:{arg.EndUTC}";
                return(result);
            }
            if (string.IsNullOrEmpty(arg.MachineDesignName) && !arg.LayerID.HasValue)
            {
                result.Message = "Missing override values";
                Log.LogError(result.Message);
                return(result);
            }

            var siteModel = DIContext.Obtain <ISiteModels>().GetSiteModel(arg.ProjectID);

            if (siteModel == null)
            {
                result.Message = $"Failed to locate site model {arg.ProjectID}";
                Log.LogError(result.Message);
                return(result);
            }

            lock (siteModel)
            {
                var machine = siteModel.Machines.Locate(arg.AssetID);
                if (machine == null)
                {
                    result.Message = $"Failed to locate machine {arg.AssetID}";
                    Log.LogError(result.Message);
                    return(result);
                }

                //Test targets exist i.e. we have some machine events to override
                var machineTargetValues = siteModel.MachinesTargetValues[machine.InternalSiteModelMachineIndex];
                if (arg.LayerID.HasValue && machineTargetValues.LayerIDStateEvents.Count() == 0 ||
                    !string.IsNullOrEmpty(arg.MachineDesignName) && machineTargetValues.MachineDesignNameIDStateEvents.Count() == 0)
                {
                    result.Message = "No target values found to override";
                    Log.LogError(result.Message);
                    return(result);
                }

                // Now we should check there are no overlapping override events for a new event in this list
                if (arg.LayerID.HasValue &&
                    !ValidateNewOverrideEventAgainstExistingOverridingEvents(machineTargetValues.LayerOverrideEvents, arg))
                {
                    //We are not able to override event as there is already overridden event
                    result.Message = $"Layer override failed event date validation {arg.StartUTC}-{arg.EndUTC}";
                    Log.LogError(result.Message);
                    return(result);
                }
                if (!string.IsNullOrEmpty(arg.MachineDesignName) &&
                    !ValidateNewOverrideEventAgainstExistingOverridingEvents(machineTargetValues.DesignOverrideEvents, arg))
                {
                    result.Message = $"Design override failed event date validation {arg.StartUTC}-{arg.EndUTC}";
                    Log.LogError(result.Message);
                    return(result);
                }

                Log.LogDebug($"Override event passed validation checks, about to add to list: Project={arg.ProjectID}, Asset={arg.AssetID}, Date Range={arg.StartUTC}-{arg.EndUTC}");
                //Override lift
                if (arg.LayerID.HasValue)
                {
                    machineTargetValues.LayerOverrideEvents.PutValueAtDate(arg.StartUTC, new OverrideEvent <ushort>(arg.EndUTC, arg.LayerID.Value));
                }
                //Override machine design
                if (!string.IsNullOrEmpty(arg.MachineDesignName))
                {
                    //Try to find corresponding designId
                    var siteModelMachineDesign = siteModel.SiteModelMachineDesigns.Locate(arg.MachineDesignName);
                    if (siteModelMachineDesign == null)
                    {
                        siteModelMachineDesign = siteModel.SiteModelMachineDesigns.CreateNew(arg.MachineDesignName);
                    }
                    machineTargetValues.DesignOverrideEvents.PutValueAtDate(arg.StartUTC, new OverrideEvent <int>(arg.EndUTC, siteModelMachineDesign.Id));
                }

                Log.LogDebug($"Saving override events: Project={arg.ProjectID}, Asset={arg.AssetID}, Date Range={arg.StartUTC}-{arg.EndUTC}");
                machineTargetValues.SaveMachineEventsToPersistentStore(storageProxy_Mutable);

                // Notify the immutable grid listeners that attributes of this site model have changed.
                Log.LogDebug($"Notifying grid of changes to project {arg.ProjectID}");
                var sender = DIContext.Obtain <ISiteModelAttributesChangedEventSender>();
                sender.ModelAttributesChanged(SiteModelNotificationEventGridMutability.NotifyImmutable,
                                              siteModel.ID,
                                              machineTargetValuesChanged: true);

                result.Success = true;
            }
            Log.LogInformation($"END Add Override Event Executor: Project={arg.ProjectID}, Asset={arg.AssetID}, Date Range={arg.StartUTC}-{arg.EndUTC}");
            return(result);
        }
Exemple #3
0
        /// <summary>
        /// Removes the override event from the site model.
        /// </summary>
        public async Task <OverrideEventResponse> ExecuteAsync(OverrideEventRequestArgument arg)
        {
            Log.LogInformation($"START Remove Override Event Executor: Project={arg.ProjectID}, Asset={arg.AssetID}, Date Range={arg.StartUTC}-{arg.EndUTC}");

            var result = new OverrideEventResponse {
                Success = false
            };

            var siteModel = DIContext.Obtain <ISiteModels>().GetSiteModel(arg.ProjectID);

            if (siteModel == null)
            {
                result.Message = $"Failed to locate site model {arg.ProjectID}";
                Log.LogError(result.Message);
                return(result);
            }

            bool changed = false;

            lock (siteModel)
            {
                if (arg.AssetID == Guid.Empty)
                {
                    //If AssetID not provided, remove all override events for project
                    Log.LogDebug($"Removing override events for all assets in project {arg.ProjectID}");
                    foreach (var machine in siteModel.Machines)
                    {
                        if (RemoveOverrideEventsForMachine(siteModel, machine, arg))
                        {
                            changed = true;
                        }
                    }
                }
                else
                {
                    var machine = siteModel.Machines.Locate(arg.AssetID);
                    if (machine == null)
                    {
                        result.Message = $"Failed to locate machine {arg.AssetID}";
                        Log.LogError(result.Message);
                        return(result);
                    }
                    Log.LogDebug($"Removing override events for asset {arg.AssetID}");
                    changed = RemoveOverrideEventsForMachine(siteModel, machine, arg);
                }

                if (changed)
                {
                    Log.LogDebug($"Notifying grid of changes to project {arg.ProjectID}");
                    // Notify the immutable grid listeners that attributes of this site model have changed.
                    var sender = DIContext.Obtain <ISiteModelAttributesChangedEventSender>();
                    sender.ModelAttributesChanged(SiteModelNotificationEventGridMutability.NotifyImmutable,
                                                  siteModel.ID,
                                                  machineTargetValuesChanged: true);
                }
            }

            if (!changed)
            {
                result.Message = "No override event(s) found to remove";
            }

            result.Success = changed;
            Log.LogInformation($"END Remove Override Event Executor: Project={arg.ProjectID}, Asset={arg.AssetID}, Date Range={arg.StartUTC}-{arg.EndUTC}");

            return(result);
        }
Exemple #4
0
        public void Test_OverrideEventResponse_Creation()
        {
            var response = new OverrideEventResponse();

            response.Should().NotBeNull();
        }