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()); }
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); })); }
public string GetScenarioValue(string scenarioId) { var user = GetCurrentUser(); var scenarioActionSource = new ScenarioActionSource(user, ScenarioStartupSource.Network, ScenarioAction.ViewValue); return(GetScenario(scenarioId).CalculateCurrentValue(scenarioActionSource, null)); }
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() }); }
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); })); }
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); })); }
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); }
public ScenarioValueChangedEventArgs(ScenarioBase scenario, bool onlyIntent, ScenarioActionSource source, string value, string prevValue) { Scenario = scenario; OnlyIntent = onlyIntent; Source = source; Value = value; PreviousValue = prevValue; }
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); }
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); }
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); }); }
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); }); }
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); }
private ScenarioBase GetScenarioWithPrivileges(string scenarioId, ScenarioActionSource actionSource) { var scenario = GetScenario(scenarioId); if (!scenario.IsAccessAvailable(actionSource)) { ThrowUnauthorizedAccessException(); } return(scenario); }
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); } }
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; } })); }
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; } }
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); }
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); }
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; })); }
public override void CalculateCurrentValueAsync(ScenarioActionSource source, Action <string> callback, ExecutionContext parentContext) { CheckRights(source, parentContext); callback(CalculateCurrentValueInternal()); }
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); }
public override string CalculateCurrentValue(ScenarioActionSource source, ExecutionContext parentContext) { CheckRights(source, parentContext); return(CalculateCurrentValueInternal()); }
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); }
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); }