Ejemplo n.º 1
0
        public static FieldConverter FilterLanguages(LanguagesConfig config, IEnumerable <Language>?languages)
        {
            if (languages?.Any() != true)
            {
                return(Noop);
            }

            var languageSet = new HashSet <string>(StringComparer.OrdinalIgnoreCase);

            foreach (var language in languages)
            {
                if (config.Contains(language.Iso2Code))
                {
                    languageSet.Add(language.Iso2Code);
                }
            }

            if (languageSet.Count == 0)
            {
                languageSet.Add(config.Master);
            }

            return((data, field) =>
            {
                if (field.Partitioning.Equals(Partitioning.Language))
                {
                    foreach (var(key, _) in data.ToList())
                    {
                        if (!languageSet.Contains(key))
                        {
                            data.Remove(key);
                        }
                    }
                }

                return data;
            });
        }
Ejemplo n.º 2
0
        public static void CanRemove(LanguagesConfig languages, RemoveLanguage command)
        {
            Guard.NotNull(command, nameof(command));

            Validate.It(e =>
            {
                var language = command.Language;

                if (language == null)
                {
                    e(Not.Defined(nameof(command.Language)), nameof(command.Language));
                }
                else
                {
                    EnsureConfigExists(languages, language);

                    if (languages.IsMaster(language))
                    {
                        e(T.Get("apps.languages.masterLanguageNotRemovable"));
                    }
                }
            });
        }
Ejemplo n.º 3
0
        public static void CanRemove(LanguagesConfig languages, RemoveLanguage command)
        {
            Guard.NotNull(command);

            Validate.It(() => "Cannot remove language.", e =>
            {
                var language = command.Language;

                if (language == null)
                {
                    e(Not.Defined("Language code"), nameof(command.Language));
                }
                else
                {
                    EnsureConfigExists(languages, language);

                    if (languages.IsMaster(language))
                    {
                        e("Master language cannot be removed.");
                    }
                }
            });
        }
Ejemplo n.º 4
0
        public LanguagesConfig ToConfig()
        {
            var languagesConfig = new LanguageConfig[Languages?.Count ?? 0];

            if (Languages != null)
            {
                var i = 0;

                foreach (var config in Languages)
                {
                    languagesConfig[i++] = config.Value.ToConfig(config.Key);
                }
            }

            var result = LanguagesConfig.Build(languagesConfig);

            if (Master != null)
            {
                result.MakeMaster(Master);
            }

            return(result);
        }
Ejemplo n.º 5
0
        public static FieldConverter FilterLanguages(LanguagesConfig languagesConfig, IEnumerable <Language> languages)
        {
            if (languages == null)
            {
                return((data, field) => data);
            }

            var languageCodes =
                new HashSet <string>(
                    languages.Select(x => x.Iso2Code).Where(x => languagesConfig.Contains(x)),
                    StringComparer.OrdinalIgnoreCase);

            if (languageCodes.Count == 0)
            {
                return((data, field) => data);
            }

            return((data, field) =>
            {
                if (field.Partitioning.Equals(Partitioning.Language))
                {
                    var result = new ContentFieldData();

                    foreach (var languageCode in languageCodes)
                    {
                        if (data.TryGetValue(languageCode, out var value))
                        {
                            result[languageCode] = value;
                        }
                    }

                    return result;
                }

                return data;
            });
        }
Ejemplo n.º 6
0
        public void Should_return_flat_list_when_single_languages_specified()
        {
            var data =
                new NamedContentData()
                .AddField("field1",
                          new ContentFieldData()
                          .AddValue("de", 1)
                          .AddValue("en", 2))
                .AddField("field2",
                          new ContentFieldData()
                          .AddValue("de", null)
                          .AddValue("en", 4))
                .AddField("field3",
                          new ContentFieldData()
                          .AddValue("en", 6))
                .AddField("field4",
                          new ContentFieldData()
                          .AddValue("it", 7));

            var fallbackConfig =
                LanguagesConfig.Build(
                    new LanguageConfig(Language.EN),
                    new LanguageConfig(Language.DE, false, Language.EN));

            var output = (Dictionary <string, JToken>)data.ToLanguageModel(fallbackConfig, new List <Language> {
                Language.DE
            });

            var expected = new Dictionary <string, JToken>
            {
                { "field1", 1 },
                { "field2", 4 },
                { "field3", 6 }
            };

            Assert.True(expected.EqualsDictionary(output));
        }
 /// <summary>
 /// Starts the dynamic application
 /// </summary>
 void DynamicApplication_Startup(object sender, StartupEventArgs e)
 {
     Settings.Parse(InitParams = NormalizeInitParams(e.InitParams));
     ScriptTags = new DynamicScriptTags(LanguagesConfig);
     ScriptTags.DownloadHtmlPage(() => {
         ScriptTags.FetchScriptTags();
         XamlScriptTags.Load();
         LanguagesConfig.DownloadLanguages(AppManifest, () => {
             ScriptTags.DownloadExternalCode(() => {
                 Engine = new DynamicEngine();
                 if (HtmlPage.IsEnabled && Settings.ConsoleEnabled && LanguagesConfig.LanguagesUsed.Count > 0)
                 {
                     Console = Repl.Show();
                 }
                 LanguageTypeExtensions.Load(Engine.LangConfig);
                 if (HtmlPage.IsEnabled)
                 {
                     ScriptTags.Run(Engine);
                 }
                 Engine.Run(Settings.EntryPoint);
             });
         });
     });
 }
        public static object ToFlatLanguageModel(this NamedContentData content, LanguagesConfig languagesConfig, IReadOnlyCollection <Language>?languagePreferences = null)
        {
            Guard.NotNull(languagesConfig);

            if (languagePreferences == null || languagePreferences.Count == 0)
            {
                return(content);
            }

            if (languagePreferences.Count == 1 && languagesConfig.TryGetConfig(languagePreferences.First(), out var languageConfig))
            {
                languagePreferences = languagePreferences.Union(languageConfig.LanguageFallbacks).ToList();
            }

            var result = new Dictionary <string, IJsonValue>();

            foreach (var fieldValue in content)
            {
                var fieldData = fieldValue.Value;

                if (fieldData != null)
                {
                    foreach (var language in languagePreferences)
                    {
                        if (fieldData.TryGetValue(language, out var value) && value.Type != JsonValueType.Null)
                        {
                            result[fieldValue.Key] = value;

                            break;
                        }
                    }
                }
            }

            return(result);
        }
Ejemplo n.º 9
0
        public void Should_not_throw_exception_if_language_to_remove_is_not_found()
        {
            var config_0 = LanguagesConfig.Build(Language.DE);

            config_0.Remove(Language.EN);
        }
Ejemplo n.º 10
0
        public void Should_not_throw_exception_if_language_is_already_master_language()
        {
            var config_0 = LanguagesConfig.Build(Language.DE);

            config_0.MakeMaster(Language.DE);
        }
Ejemplo n.º 11
0
        public void Should_throw_exception_if_language_to_make_master_is_not_found()
        {
            var config_0 = LanguagesConfig.Build(Language.DE);

            Assert.Throws <KeyNotFoundException>(() => config_0.MakeMaster(Language.EN));
        }
Ejemplo n.º 12
0
 protected void On(AppLanguageAdded @event)
 {
     languagesConfig = languagesConfig.Add(@event.Language);
 }
Ejemplo n.º 13
0
        public static NamedContentData ToApiModel(this NamedContentData content, Schema schema, LanguagesConfig languagesConfig, bool excludeHidden = true, bool checkTypeCompatibility = false)
        {
            Guard.NotNull(schema, nameof(schema));
            Guard.NotNull(languagesConfig, nameof(languagesConfig));

            var codeForInvariant      = InvariantPartitioning.Instance.Master.Key;
            var codeForMasterLanguage = languagesConfig.Master.Language.Iso2Code;

            var result = new NamedContentData();

            foreach (var fieldValue in content)
            {
                if (!schema.FieldsByName.TryGetValue(fieldValue.Key, out var field) || (excludeHidden && field.IsHidden))
                {
                    continue;
                }

                if (checkTypeCompatibility)
                {
                    var isValid = true;

                    foreach (var value in fieldValue.Value.Values)
                    {
                        try
                        {
                            if (!value.IsNull())
                            {
                                JsonValueConverter.ConvertValue(field, value);
                            }
                        }
                        catch
                        {
                            isValid = false;
                            break;
                        }
                    }

                    if (!isValid)
                    {
                        continue;
                    }
                }

                var fieldResult = new ContentFieldData();
                var fieldValues = fieldValue.Value;

                if (field.Partitioning.Equals(Partitioning.Language))
                {
                    foreach (var languageConfig in languagesConfig)
                    {
                        var languageCode = languageConfig.Key;

                        if (fieldValues.TryGetValue(languageCode, out var value))
                        {
                            fieldResult.Add(languageCode, value);
                        }
                        else if (languageConfig == languagesConfig.Master && fieldValues.TryGetValue(codeForInvariant, out value))
                        {
                            fieldResult.Add(languageCode, value);
                        }
                    }
                }
                else
                {
                    if (fieldValues.TryGetValue(codeForInvariant, out var value))
                    {
                        fieldResult.Add(codeForInvariant, value);
                    }
                    else if (fieldValues.TryGetValue(codeForMasterLanguage, out value))
                    {
                        fieldResult.Add(codeForInvariant, value);
                    }
                    else if (fieldValues.Count > 0)
                    {
                        fieldResult.Add(codeForInvariant, fieldValues.Values.First());
                    }
                }

                result.Add(field.Name, fieldResult);
            }

            return(result);
        }
Ejemplo n.º 14
0
 public static void Apply(this LanguagesConfig languagesConfig, AppLanguageAdded @event)
 {
     languagesConfig.Set(new LanguageConfig(@event.Language));
 }
Ejemplo n.º 15
0
        public void Should_make_first_language_to_master()
        {
            var config_0 = LanguagesConfig.Build(Language.IT);

            Assert.Equal(Language.IT, config_0.Master.Language);
        }
Ejemplo n.º 16
0
 public static LanguagesConfig Apply(this LanguagesConfig languagesConfig, AppLanguageRemoved @event)
 {
     return(languagesConfig.Remove(@event.Language));
 }
Ejemplo n.º 17
0
 public static LanguagesConfig Apply(this LanguagesConfig languagesConfig, AppLanguageAdded @event)
 {
     return(languagesConfig.Set(new LanguageConfig(@event.Language)));
 }
Ejemplo n.º 18
0
        public void ApplyEvent(IEvent @event)
        {
            switch (@event)
            {
            case AppCreated e:
            {
                Roles = Roles.CreateDefaults(e.Name);

                SimpleMapper.Map(e, this);

                break;
            }

            case AppUpdated e:
            {
                SimpleMapper.Map(e, this);

                break;
            }

            case AppImageUploaded e:
            {
                Image = e.Image;

                break;
            }

            case AppImageRemoved _:
            {
                Image = null;

                break;
            }

            case AppPlanChanged e:
            {
                Plan = AppPlan.Build(e.Actor, e.PlanId);

                break;
            }

            case AppPlanReset _:
            {
                Plan = null;

                break;
            }

            case AppContributorAssigned e:
            {
                Contributors = Contributors.Assign(e.ContributorId, e.Role);

                break;
            }

            case AppContributorRemoved e:
            {
                Contributors = Contributors.Remove(e.ContributorId);

                break;
            }

            case AppClientAttached e:
            {
                Clients = Clients.Add(e.Id, e.Secret);

                break;
            }

            case AppClientUpdated e:
            {
                Clients = Clients.Update(e.Id, e.Role);

                break;
            }

            case AppClientRenamed e:
            {
                Clients = Clients.Rename(e.Id, e.Name);

                break;
            }

            case AppClientRevoked e:
            {
                Clients = Clients.Revoke(e.Id);

                break;
            }

            case AppWorkflowAdded e:
            {
                Workflows = Workflows.Add(e.WorkflowId, e.Name);

                break;
            }

            case AppWorkflowUpdated e:
            {
                Workflows = Workflows.Update(e.WorkflowId, e.Workflow);

                break;
            }

            case AppWorkflowDeleted e:
            {
                Workflows = Workflows.Remove(e.WorkflowId);

                break;
            }

            case AppPatternAdded e:
            {
                Patterns = Patterns.Add(e.PatternId, e.Name, e.Pattern, e.Message);

                break;
            }

            case AppPatternDeleted e:
            {
                Patterns = Patterns.Remove(e.PatternId);

                break;
            }

            case AppPatternUpdated e:
            {
                Patterns = Patterns.Update(e.PatternId, e.Name, e.Pattern, e.Message);

                break;
            }

            case AppRoleAdded e:
            {
                Roles = Roles.Add(e.Name);

                break;
            }

            case AppRoleDeleted e:
            {
                Roles = Roles.Remove(e.Name);

                break;
            }

            case AppRoleUpdated e:
            {
                Roles = Roles.Update(e.Name, e.Permissions.Prefix(Name));

                break;
            }

            case AppLanguageAdded e:
            {
                LanguagesConfig = LanguagesConfig.Set(e.Language);

                break;
            }

            case AppLanguageRemoved e:
            {
                LanguagesConfig = LanguagesConfig.Remove(e.Language);

                break;
            }

            case AppLanguageUpdated e:
            {
                LanguagesConfig = LanguagesConfig.Set(e.Language, e.IsOptional, e.Fallback);

                if (e.IsMaster)
                {
                    LanguagesConfig = LanguagesConfig.MakeMaster(e.Language);
                }

                break;
            }

            case AppArchived _:
            {
                Plan = null;

                IsArchived = true;

                break;
            }
            }
        }
Ejemplo n.º 19
0
 protected void On(AppLanguageRemoved @event)
 {
     LanguagesConfig = LanguagesConfig.Remove(@event.Language);
 }
Ejemplo n.º 20
0
 protected void On(AppLanguageAdded @event)
 {
     LanguagesConfig = LanguagesConfig.Set(@event.Language);
 }
Ejemplo n.º 21
0
        public override bool ApplyEvent(IEvent @event)
        {
            switch (@event)
            {
            case AppCreated e:
            {
                SimpleMapper.Map(e, this);

                return(true);
            }

            case AppUpdated e when !string.Equals(e.Label, Label) || !string.Equals(e.Description, Description):
            {
                SimpleMapper.Map(e, this);

                return(true);
            }

            case AppImageUploaded e:
                return(UpdateImage(e, ev => ev.Image));

            case AppImageRemoved e when Image != null:
                return(UpdateImage(e, ev => null));

            case AppPlanChanged e when !string.Equals(Plan?.PlanId, e.PlanId):
                return(UpdatePlan(e, ev => AppPlan.Build(ev.Actor, ev.PlanId)));

            case AppPlanReset e when Plan != null:
                return(UpdatePlan(e, ev => null));

            case AppContributorAssigned e:
                return(UpdateContributors(e, (ev, c) => c.Assign(ev.ContributorId, ev.Role)));

            case AppContributorRemoved e:
                return(UpdateContributors(e, (ev, c) => c.Remove(ev.ContributorId)));

            case AppClientAttached e:
                return(UpdateClients(e, (ev, c) => c.Add(ev.Id, ev.Secret)));

            case AppClientUpdated e:
                return(UpdateClients(e, (ev, c) => c.Update(ev.Id, ev.Role)));

            case AppClientRenamed e:
                return(UpdateClients(e, (ev, c) => c.Rename(ev.Id, ev.Name)));

            case AppClientRevoked e:
                return(UpdateClients(e, (ev, c) => c.Revoke(ev.Id)));

            case AppWorkflowAdded e:
                return(UpdateWorkflows(e, (ev, w) => w.Add(ev.WorkflowId, ev.Name)));

            case AppWorkflowUpdated e:
                return(UpdateWorkflows(e, (ev, w) => w.Update(ev.WorkflowId, ev.Workflow)));

            case AppWorkflowDeleted e:
                return(UpdateWorkflows(e, (ev, w) => w.Remove(ev.WorkflowId)));

            case AppPatternAdded e:
                return(UpdatePatterns(e, (ev, p) => p.Add(ev.PatternId, ev.Name, ev.Pattern, ev.Message)));

            case AppPatternDeleted e:
                return(UpdatePatterns(e, (ev, p) => p.Remove(ev.PatternId)));

            case AppPatternUpdated e:
                return(UpdatePatterns(e, (ev, p) => p.Update(ev.PatternId, ev.Name, ev.Pattern, ev.Message)));

            case AppRoleAdded e:
                return(UpdateRoles(e, (ev, r) => r.Add(ev.Name)));

            case AppRoleUpdated e:
                return(UpdateRoles(e, (ev, r) => r.Update(ev.Name, ev.Permissions)));

            case AppRoleDeleted e:
                return(UpdateRoles(e, (ev, r) => r.Remove(ev.Name)));

            case AppLanguageAdded e:
                return(UpdateLanguages(e, (ev, l) => l.Set(ev.Language)));

            case AppLanguageRemoved e:
                return(UpdateLanguages(e, (ev, l) => l.Remove(ev.Language)));

            case AppLanguageUpdated e:
                return(UpdateLanguages(e, (ev, l) =>
                {
                    l = l.Set(ev.Language, ev.IsOptional, ev.Fallback);

                    if (ev.IsMaster)
                    {
                        LanguagesConfig = LanguagesConfig.MakeMaster(ev.Language);
                    }

                    return l;
                }));

            case AppArchived _:
            {
                Plan = null;

                IsArchived = true;

                return(true);
            }
            }

            return(false);
        }
Ejemplo n.º 22
0
        public void Should_throw_exception_if_language_to_remove_is_master()
        {
            var config_0 = LanguagesConfig.Build(Language.DE);

            Assert.Throws <InvalidOperationException>(() => config_0.Remove(Language.DE));
        }
Ejemplo n.º 23
0
        public void Should_throw_exception_if_fallback_language_is_invalid()
        {
            var config_0 = LanguagesConfig.Build(Language.DE);

            Assert.Throws <InvalidOperationException>(() => config_0.Set(new LanguageConfig(Language.DE, false, Language.EN)));
        }
Ejemplo n.º 24
0
 protected void On(AppLanguageAdded @event)
 {
     languagesConfig = languagesConfig.Apply(@event);
 }
Ejemplo n.º 25
0
 public static void Apply(this LanguagesConfig languagesConfig, AppLanguageRemoved @event)
 {
     languagesConfig.Remove(@event.Language);
 }
Ejemplo n.º 26
0
        public static JsonObject FormatReferences(this NamedContentData data, Schema schema, LanguagesConfig languages, string separator = ", ")
        {
            Guard.NotNull(schema);

            var result = JsonValue.Object();

            foreach (var language in languages)
            {
                result[language.Key] = JsonValue.Create(data.FormatReferenceFields(schema, language.Key, separator));
            }

            return(result);
        }
Ejemplo n.º 27
0
        public static AppLanguageDto FromLanguage(Language language, LanguageConfig config, LanguagesConfig languages)
        {
            var result = new AppLanguageDto
            {
                EnglishName = language.EnglishName,
                IsMaster    = languages.IsMaster(language),
                IsOptional  = languages.IsOptional(language),
                Iso2Code    = language.Iso2Code,
                Fallback    = config.Fallbacks.ToArray()
            };

            return(result);
        }
Ejemplo n.º 28
0
        public JsonLanguagesConfig(LanguagesConfig value)
        {
            Languages = value.Languages.ToDictionary(x => x.Key, x => new JsonLanguageConfig(x.Value));

            Master = value.Master;
        }
Ejemplo n.º 29
0
        public void Should_not_throw_exception_if_language_to_add_already_exists()
        {
            var config_0 = LanguagesConfig.Build(Language.DE);

            config_0.Set(new LanguageConfig(Language.DE));
        }
Ejemplo n.º 30
0
 protected void On(AppLanguageUpdated @event)
 {
     languagesConfig = languagesConfig.Update(@event.Language, @event.IsOptional, @event.IsMaster, @event.Fallback);
 }