コード例 #1
0
        private ScenarioInfoLW[] GetChangedScenariosInternal(DateTime since, UserBase user)
        {
            var scenarioActionSource = new ScenarioActionSource(user, ScenarioStartupSource.Network, ScenarioAction.ViewValue);

            return(ScenariosRepository
                   .Scenarios
                   .Where(x => x.LastChange >= since)
                   .Select(x =>
            {
                bool isAvailable = true;
                var curVal = string.Empty;
                try
                {
                    curVal = x.CalculateCurrentValue(scenarioActionSource, null);
                }
                catch
                {
                    isAvailable = false;
                    curVal = x.ValueType.DefaultValue;
                }
                return new ScenarioInfoLW()
                {
                    IsAvailable = isAvailable && x.GetIsAvailable(),
                    CurrentValue = curVal,
                    ScenarioId = x.Id
                };
            }).ToArray());
        }
コード例 #2
0
 public EncryptedList <ScenarioInfoLW> GetChangedScenarios(DateTime since)
 {
     return(Handle((user) =>
     {
         since = since.ToUniversalTime();
         var scenarioActionSource = new ScenarioActionSource(user, ScenarioStartupSource.Network, ScenarioAction.ViewValue);
         return new EncryptedList <ScenarioInfoLW>(ScenariosRepository
                                                   .Scenarios
                                                   .Where(x => x.LastChange >= since)
                                                   .Select(x =>
         {
             bool isAvailable = true;
             var curVal = string.Empty;
             try
             {
                 curVal = x.CalculateCurrentValue(scenarioActionSource, null);
             }
             catch
             {
                 isAvailable = false;
                 curVal = x.ValueType.DefaultValue;
             }
             return new ScenarioInfoLW()
             {
                 IsAvailable = isAvailable && x.GetIsAvailable(),
                 CurrentValue = curVal,
                 ScenarioId = x.Id
             };
         }), _secretKey);
     }));
 }
コード例 #3
0
        public string GetScenarioValue(string scenarioId)
        {
            var user = GetCurrentUser();
            var scenarioActionSource = new ScenarioActionSource(user, ScenarioStartupSource.Network, ScenarioAction.ViewValue);

            return(GetScenario(scenarioId).CalculateCurrentValue(scenarioActionSource, null));
        }
コード例 #4
0
        public ScenarioInfo GetScenarioInfo(string scenarioId)
        {
            var user     = GetCurrentUser();
            var scenario = GetScenario(scenarioId);
            var executeScenarioAction = new ScenarioActionSource(user, ScenarioStartupSource.Network, ScenarioAction.Execute);
            var viewScenarioAction    = new ScenarioActionSource(user, ScenarioStartupSource.Network, ScenarioAction.ViewValue);

            var currentValue = string.Empty;
            var canSetValue  = true;
            var isAvailable  = true;

            try
            {
                currentValue = scenario.CalculateCurrentValue(viewScenarioAction, null);
                canSetValue  = scenario.IsAccessAvailable(executeScenarioAction);
            }
            catch
            {
                isAvailable  = false;
                canSetValue  = false;
                currentValue = scenario.ValueType.DefaultValue;
            }

            return(new ScenarioInfo()
            {
                CurrentValue = currentValue,
                ScenarioId = scenario.Id,
                ValueType = scenario.ValueType,
                VisualSettings = GetVisualSettings(user, scenario.Id),
                Name = scenario.Name,
                OnlyGetValue = !canSetValue,
                IsAvailable = isAvailable && scenario.GetIsAvailable()
            });
        }
コード例 #5
0
        public Encrypted <ScenarioInfo> GetScenarioInfo(Encrypted <string> scenarioId)
        {
            return(Handle((user) =>
            {
                var scenario = GetScenario(scenarioId.Decrypt(_secretKey));
                var executeScenarioAction = new ScenarioActionSource(user, ScenarioStartupSource.Network, ScenarioAction.Execute);
                var viewScenarioAction = new ScenarioActionSource(user, ScenarioStartupSource.Network, ScenarioAction.ViewValue);

                var currentValue = string.Empty;
                var canSetValue = true;
                var isAvailable = true;
                try
                {
                    currentValue = scenario.CalculateCurrentValue(viewScenarioAction, null);
                    canSetValue = scenario.IsAccessAvailable(executeScenarioAction);
                }
                catch
                {
                    isAvailable = false;
                    canSetValue = false;
                    currentValue = scenario.ValueType.DefaultValue;
                }

                return new Encrypted <ScenarioInfo>(new ScenarioInfo()
                {
                    CurrentValue = currentValue,
                    ScenarioId = scenario.Id,
                    ValueType = scenario.ValueType,
                    VisualSettings = GetVisualSettings(user, scenario.Id),
                    Name = scenario.Name,
                    OnlyGetValue = !canSetValue,
                    IsAvailable = isAvailable && scenario.GetIsAvailable()
                }, _secretKey);
            }));
        }
コード例 #6
0
 public Encrypted <string> GetScenarioValue(Encrypted <string> scenarioId)
 {
     return(Handle((user) => {
         var scenarioActionSource = new ScenarioActionSource(user, ScenarioStartupSource.Network, ScenarioAction.ViewValue);
         return new Encrypted <string>(GetScenario(scenarioId.Decrypt(_secretKey)).CalculateCurrentValue(scenarioActionSource, null), _secretKey);
     }));
 }
コード例 #7
0
        public IAction PrepareInstance(IAction action, IAlgorithmContext algorithmContext)
        {
            if (action is IContextInitializable contextInitializable)
            {
                contextInitializable.Initialize(algorithmContext);
            }
            if (action is IScenariosAccess scenarioAccessObj)
            {
                scenarioAccessObj.SetTargetScenario(_scenarioRepository.Scenarios.FirstOrDefault(x => x.Id.Equals(((IScenariosAccess)action).TargetScenarioId)));
            }
            if (action is IUsersGeolocationAccess geolocationAccessObj)
            {
                geolocationAccessObj.SetNeedTargets(() => _usersRepository.Users.ToArray());
            }
            if (action is IMessagesSender messagesSender)
            {
                messagesSender.SetNeedTargets(() => _usersRepository.Users.ToArray());
            }
            if (action is IScenariosEnumerator scenariosEnumerator)
            {
                var scenariosActionSource = new ScenarioActionSource(_usersRepository.SystemUser, ScenarioStartupSource.OtherScenario, ScenarioAction.Execute);
                scenariosEnumerator.SetCasts(() =>
                                             _scenarioRepository
                                             .Scenarios
                                             .Where(x =>
                                                    x.IsAccessAvailable(scenariosActionSource))
                                             .Select(x => x.CreateCast())
                                             .ToArray());
            }

            return(action);
        }
コード例 #8
0
 public ScenarioValueChangedEventArgs(ScenarioBase scenario, bool onlyIntent, ScenarioActionSource source, string value, string prevValue)
 {
     Scenario      = scenario;
     OnlyIntent    = onlyIntent;
     Source        = source;
     Value         = value;
     PreviousValue = prevValue;
 }
コード例 #9
0
        public void AsyncExecuteScenarioParallel(string scenarioId, string value)
        {
            var user         = GetCurrentUser();
            var scenario     = GetScenario(scenarioId);
            var actionSource = new ScenarioActionSource(user, ScenarioStartupSource.Network, ScenarioAction.Execute);

            scenario.ExecuteAsyncParallel(actionSource, value, null);
        }
コード例 #10
0
        public void ExecuteScenario(string scenarioId, string value)
        {
            var user         = GetCurrentUser();
            var scenario     = GetScenario(scenarioId);
            var actionSource = new ScenarioActionSource(user, ScenarioStartupSource.Network, ScenarioAction.Execute);

            scenario.Execute(actionSource, value, out string executionId);
        }
コード例 #11
0
 public void ExecuteScenario(Encrypted <string> scenarioId, Encrypted <string> value)
 {
     Handle((user) =>
     {
         var scenario     = GetScenario(scenarioId.Decrypt(_secretKey));
         var actionSource = new ScenarioActionSource(user, ScenarioStartupSource.Network, ScenarioAction.Execute);
         scenario.Execute(actionSource, value.Decrypt(_secretKey), out string executionId);
     });
 }
コード例 #12
0
 public void AsyncExecuteScenarioParallel(Encrypted <string> scenarioId, Encrypted <string> value)
 {
     Handle((user) =>
     {
         var scenario     = GetScenario(scenarioId.Decrypt(_secretKey));
         var actionSource = new ScenarioActionSource(user, ScenarioStartupSource.Network, ScenarioAction.Execute);
         scenario.ExecuteAsyncParallel(actionSource, value.Decrypt(_secretKey), null);
     });
 }
コード例 #13
0
        private ScenarioBase[] GetScenarios()
        {
            var scenarios = ScenariosRepository.Scenarios;

            if (!IsConstructorMode)
            {
                var scenarioActionSource = new ScenarioActionSource(UsersRepository.SystemUser, ScenarioStartupSource.SystemUI, ScenarioAction.ViewValue);
                scenarios = scenarios.Where(x => x.IsAccessAvailable(scenarioActionSource)).ToArray();
            }
            return(scenarios);
        }
コード例 #14
0
        private ScenarioBase GetScenarioWithPrivileges(string scenarioId, ScenarioActionSource actionSource)
        {
            var scenario = GetScenario(scenarioId);

            if (!scenario.IsAccessAvailable(actionSource))
            {
                ThrowUnauthorizedAccessException();
            }

            return(scenario);
        }
コード例 #15
0
        public bool IsScenarioValueChanged(string scenarioId, string lastKnownValue)
        {
            var user = GetCurrentUser();
            var decryptedLastKnown   = lastKnownValue;
            var scenarioActionSource = new ScenarioActionSource(user, ScenarioStartupSource.Network, ScenarioAction.ViewValue);
            var scenario             = GetScenario(scenarioId);

            try
            {
                return(scenario
                       .CalculateCurrentValue(scenarioActionSource, null)
                       .Equals(decryptedLastKnown));
            }
            catch
            {
                return(false);
            }
        }
コード例 #16
0
 public bool IsScenarioValueChanged(Encrypted <string> scenarioId, Encrypted <string> lastKnownValue)
 {
     return(Handle((user) =>
     {
         var decryptedLastKnown = lastKnownValue.Decrypt(_secretKey);
         var scenarioActionSource = new ScenarioActionSource(user, ScenarioStartupSource.Network, ScenarioAction.ViewValue);
         var scenario = GetScenario(scenarioId.Decrypt(_secretKey));
         try
         {
             return scenario
             .CalculateCurrentValue(scenarioActionSource, null)
             .Equals(decryptedLastKnown);
         }
         catch
         {
             return false;
         }
     }));
 }
コード例 #17
0
        public void Initialize(Type valueType = null, ActionInstanceSide side = ActionInstanceSide.Both, string selectedScenarioId = "")
        {
            var scenarioActionSource = new ScenarioActionSource(
                UsersRepository.SystemUser,
                ScenarioStartupSource.OtherScenario,
                side == ActionInstanceSide.OnlyRight ? ScenarioAction.ViewValue : ScenarioAction.Execute);
            var scenarios = ScenariosRepository.Scenarios.Where(x => valueType == null || x.ValueType.GetType().Equals(valueType));

            if (side == ActionInstanceSide.OnlyRight)
            {
                scenarios = scenarios.Where(x => !(x.ValueType is ButtonValueType) && x.IsAccessAvailable(scenarioActionSource));
            }
            else
            {
                scenarios = scenarios.Where(x => x.IsAccessAvailable(scenarioActionSource));
            }

            foreach (var scenario in scenarios)
            {
                var itemView = new ItemView();
                itemView.Content = scenario.Name;
                if (scenario.Id.Equals(selectedScenarioId))
                {
                    Loaded += (o, e) => itemView.Selected = true;
                }
                itemView.Icon   = Icons.Icon.ChevronRight;
                itemView.Tag    = scenario;
                itemView.Margin = new Thickness(2);
                itemView.Click += (o, e) =>
                {
                    SelectedScenario = itemView.Tag as ScenarioBase;
                    SelectionChanged?.Invoke(this);
                };
                itemsView.Children.Add(itemView);
            }

            if (itemsView.Children.Count > 0)
            {
                tbScensNotExist.Visibility = Visibility.Collapsed;
                MinHeight = 0;
            }
        }
コード例 #18
0
        public ScenarioInfo[] GetScenariosInfo()
        {
            var user = GetCurrentUser();
            var executeScenarioAction = new ScenarioActionSource(user, ScenarioStartupSource.Network, ScenarioAction.Execute);
            var viewScenarioAction    = new ScenarioActionSource(user, ScenarioStartupSource.Network, ScenarioAction.ViewValue);
            var result = ScenariosRepository
                         .Scenarios
                         .Where(x => x.IsAccessAvailable(viewScenarioAction))
                         .Select(x => new ScenarioInfo()
            {
                CurrentValue   = x.CalculateCurrentValue(viewScenarioAction, null),
                ScenarioId     = x.Id,
                ValueType      = x.ValueType,
                Name           = x.Name,
                VisualSettings = GetVisualSettings(user, x.Id),
                OnlyGetValue   = !x.IsAccessAvailable(executeScenarioAction),
                IsAvailable    = x.GetIsAvailable()
            }).ToArray();

            return(result);
        }
コード例 #19
0
        private int CreateRealVisualIndex(UserVisualSettings visualSettings)
        {
            var scenarios = ScenariosRepository.Scenarios;

            if (!IsConstructorMode)
            {
                var scenarioActionSource = new ScenarioActionSource(UsersRepository.SystemUser, ScenarioStartupSource.SystemUI, ScenarioAction.ViewValue);
                scenarios = scenarios.Where(x => x.IsAccessAvailable(scenarioActionSource)).ToArray();
            }

            var allVisualSettings =
                VisualSettingsRepository
                .VisualSettings
                .Where(x => x.UserId.Equals(UsersRepository.SystemUser.Id) && scenarios.Any(z => z.Id.Equals(x.ScenarioId)))
                .OrderBy(z => z.VisualIndex)
                .ToList();

            var realVisualIndex = allVisualSettings.IndexOf(visualSettings);

            return(realVisualIndex);
        }
コード例 #20
0
        public EncryptedList <ScenarioInfo> GetScenariosInfo()
        {
            return(Handle((user) =>
            {
                var executeScenarioAction = new ScenarioActionSource(user, ScenarioStartupSource.Network, ScenarioAction.Execute);
                var viewScenarioAction = new ScenarioActionSource(user, ScenarioStartupSource.Network, ScenarioAction.ViewValue);
                var result = new EncryptedList <ScenarioInfo>(ScenariosRepository
                                                              .Scenarios
                                                              .Where(x => x.IsAccessAvailable(viewScenarioAction))
                                                              .Select(x => new ScenarioInfo()
                {
                    CurrentValue = x.CalculateCurrentValue(viewScenarioAction, null),
                    ScenarioId = x.Id,
                    ValueType = x.ValueType,
                    Name = x.Name,
                    VisualSettings = GetVisualSettings(user, x.Id),
                    OnlyGetValue = !x.IsAccessAvailable(executeScenarioAction),
                    IsAvailable = x.GetIsAvailable()
                }),
                                                              _secretKey);

                return result;
            }));
        }
コード例 #21
0
 public override void CalculateCurrentValueAsync(ScenarioActionSource source, Action <string> callback, ExecutionContext parentContext)
 {
     CheckRights(source, parentContext);
     callback(CalculateCurrentValueInternal());
 }
コード例 #22
0
        public StatisticsItem[] GetItems(StatisticsScenarioInfo info, DateTime since, DateTime to, ScenarioActionSource source)
        {
            var scenario = ScenariosRepository.Scenarios.FirstOrDefault(x => x.Id == info.ID && ActionsDomain.Utils.GetValueTypeClassName(x.ValueType.GetType()) == info.ValueTypeName);

            if (scenario?.SecuritySettings.IsAvailableForUser(source.User, source.Source, source.Action) ?? false)
            {
                if (scenario is RemoteScenario remoteScenario)
                {
                    try
                    {
                        if (!scenario.GetIsAvailable())
                        {
                            throw new ScenarioExecutionException(ScenarioExecutionError.NotAvailable);
                        }
                        var remoteScenarioInfo = new StatisticsScenarioInfo()
                        {
                            Name          = remoteScenario.Name,
                            ID            = remoteScenario.RemoteScenarioId,
                            ValueTypeName = ActionsDomain.Utils.GetValueTypeClassName(remoteScenario.ValueType.GetType()),
                            Since         = DateTime.Now,
                            To            = DateTime.Now,
                        };
                        var server     = ClientFactory.GetServer(remoteScenario.Credentials);
                        var statistics = server.GetStatistics(since, to, new Encrypted <StatisticsScenarioInfo>(remoteScenarioInfo, remoteScenario.Credentials.SecretKey))
                                         .Decrypt(remoteScenario.Credentials.SecretKey)
                                         .ToArray();
                        foreach (var item in statistics)
                        {
                            //crutch
                            item.Target.ID   = remoteScenario.Id;
                            item.Target.Name = remoteScenario.Name;
                        }
                        return(statistics);
                    }
                    catch (Exception e)
                    {
                        throw e;
                    }
                }
                else
                {
                    return(_dataManager.GetDataItems(info.ID, info.ValueTypeName, since, to)
                           .Select(x =>
                    {
                        var item = new StatisticsItem();
                        item.Source = new StatisticsItemSource();
                        item.Source.SourceType = x.SourceType;
                        item.Source.Name = x.SourceName;
                        item.Source.ID = x.SourceId;
                        item.DateTime = new DateTime(x.Year, x.Month, x.Day, x.Hour, x.Minute, x.Second);
                        item.Value = x.Value;
                        item.Target = info;
                        return item;
                    }).ToArray());
                }
            }
            throw new ScenarioExecutionException(ScenarioExecutionError.AccessDenied);
        }
コード例 #23
0
 public override string CalculateCurrentValue(ScenarioActionSource source, ExecutionContext parentContext)
 {
     CheckRights(source, parentContext);
     return(CalculateCurrentValueInternal());
 }
コード例 #24
0
        public async Task <ScenarioStatistic> GetItems(StatisticsScenarioInfo info, DateTime since, DateTime to, ScenarioActionSource source)
        {
            var scenario = ScenariosRepository.Scenarios.FirstOrDefault(x => x.Id == info.ID);

            if (scenario?.SecuritySettings.IsAvailableForUser(source.User, source.Source, source.Action) ?? false)
            {
                if (scenario is RemoteScenario remoteScenario)
                {
                    try
                    {
                        if (!scenario.GetIsAvailable())
                        {
                            throw new ScenarioExecutionException(ScenarioExecutionError.NotAvailable);
                        }

                        var remoteScenarioInfo = new StatisticsScenarioInfo()
                        {
                            Name  = remoteScenario.Name,
                            ID    = remoteScenario.RemoteScenarioId,
                            Since = DateTime.Now,
                            To    = DateTime.Now,
                        };

                        var client = ServiceClientFactory.Current.GetClient(remoteScenario.Credentials);
                        var remoteScenarioStatistics = await client.GetStatistics(since, to, remoteScenarioInfo);

                        var scenarioStatistics = new ScenarioStatistic();
                        scenarioStatistics.ScenarioInfo = info;
                        scenarioStatistics.Statistic    = remoteScenarioStatistics.Statistic ?? new StatisticsItem[0]; // Crutch

                        return(scenarioStatistics);
                    }
                    catch (Exception e)
                    {
                        throw e;
                    }
                }
                else
                {
                    var valueTypeName = ActionsDomain.Utils.GetValueTypeClassName(scenario.ValueType.GetType());
                    var statistics    =
                        _dataManager
                        .GetDataItems(info.ID, valueTypeName, since, to)
                        .Select(x =>
                    {
                        var item        = new StatisticsItem();
                        item.SourceType = x.SourceType;
                        item.SourceName = x.SourceName;
                        item.DateTime   = new DateTime(x.Year, x.Month, x.Day, x.Hour, x.Minute, x.Second);
                        item.Value      = x.Value;
                        return(item);
                    })
                        .OrderBy(x => x.DateTime)
                        .ToArray();

                    var scenarioStatistics = new ScenarioStatistic();
                    scenarioStatistics.ScenarioInfo = info;
                    scenarioStatistics.Statistic    = statistics;

                    return(scenarioStatistics);
                }
            }
            throw new ScenarioExecutionException(ScenarioExecutionError.AccessDenied);
        }
コード例 #25
0
        public async Task <StatisticsScenarioInfo> GetStatisticsInfoForScenario(ScenarioBase scenario, ScenarioActionSource source)
        {
            if (scenario.SecuritySettings.IsAvailableForUser(source.User, source.Source, source.Action))
            {
                if (scenario is RemoteScenario remoteScenario)
                {
                    try
                    {
                        if (!scenario.GetIsAvailable())
                        {
                            throw new ScenarioExecutionException(ScenarioExecutionError.NotAvailable);
                        }

                        var scenarioInfo = new ScenarioInfo();
                        scenarioInfo.ScenarioId = remoteScenario.RemoteScenarioId;
                        scenarioInfo.ValueType  = scenario.ValueType;
                        var client             = ServiceClientFactory.Current.GetClient(remoteScenario.Credentials);
                        var remoteScenarioInfo = await client.GetStatisticsInfoForScenario(scenarioInfo);

                        remoteScenarioInfo.ID   = scenario.Id; // Set current scenario id
                        remoteScenarioInfo.Name = scenario.Name;
                        return(remoteScenarioInfo);
                    }
                    catch (Exception e)
                    {
                        throw e;
                    }
                }
                else
                {
                    return(_dataManager.GetInfo(scenario.Id, scenario.Name, ActionsDomain.Utils.GetValueTypeClassName(scenario.ValueType.GetType())));
                }
            }
            throw new ScenarioExecutionException(ScenarioExecutionError.AccessDenied);
        }