diff --git a/ccm-core/src/main/java/com/arsdigita/kernel/KernelConfig.java b/ccm-core/src/main/java/com/arsdigita/kernel/KernelConfig.java index 8257d7a0b..fd72bd10f 100644 --- a/ccm-core/src/main/java/com/arsdigita/kernel/KernelConfig.java +++ b/ccm-core/src/main/java/com/arsdigita/kernel/KernelConfig.java @@ -22,9 +22,12 @@ import java.util.Arrays; import java.util.HashSet; import java.util.Objects; import java.util.Set; + import org.libreccm.configuration.Configuration; import org.libreccm.configuration.Setting; +import java.util.StringJoiner; + /** * * @author Jens Pelzetter @@ -56,11 +59,13 @@ public final class KernelConfig { @Setting(descKey = "kernel.config.supported_languages") private Set supportedLanguages = new HashSet<>( - Arrays.asList(new String[]{"en"})); + Arrays.asList(new String[]{"en"})); + + @Setting(descKey = "kernel.config.default_language") + private String defaultLanguage = "en"; public KernelConfig() { super(); - } public boolean isDebugEnabled() { @@ -84,7 +89,7 @@ public final class KernelConfig { } public void setDataPermissionCheckEnabled( - final boolean dataPermissionCheckEnabled) { + final boolean dataPermissionCheckEnabled) { this.dataPermissionCheckEnabled = dataPermissionCheckEnabled; } @@ -94,12 +99,12 @@ public final class KernelConfig { public void setPrimaryUserIdentifier(final String primaryUserIdentifier) { if ("screen_name".equals(primaryUserIdentifier) - || "email".equals(primaryUserIdentifier)) { + || "email".equals(primaryUserIdentifier)) { this.primaryUserIdentifier = primaryUserIdentifier; } else { throw new IllegalArgumentException( - "Primary user identifier can only be \"screen_name\" or " - + "\"email\""); + "Primary user identifier can only be \"screen_name\" or " + + "\"email\""); } } @@ -128,13 +133,46 @@ public final class KernelConfig { } public Set getSupportedLanguages() { - return supportedLanguages; + if (supportedLanguages == null) { + return null; + } else { + return new HashSet<>(supportedLanguages); + } } public void setSupportedLanguages(final Set supportedLanguages) { this.supportedLanguages = supportedLanguages; } + public void addSupportedLanguage(final String language) { + if (language == null) { + throw new IllegalArgumentException("Language can't be null."); + } + + supportedLanguages.add(language); + } + + public void removeSupportedLanguage(final String language) { + supportedLanguages.remove(language); + } + + public String getDefaultLanguage() { + return defaultLanguage; + } + + public void setDefaultLanguage(final String defaultLanguage) { + if (defaultLanguage == null) { + throw new IllegalArgumentException("Default language can't be null"); + } + + if (!supportedLanguages.contains(defaultLanguage)) { + throw new IllegalArgumentException( + "Default language must be one of the supported languages"); + } + + this.defaultLanguage = defaultLanguage; + } + @Override public int hashCode() { int hash = 7; @@ -146,6 +184,7 @@ public final class KernelConfig { hash = 61 * hash + (rememberLoginEnabled ? 1 : 0); hash = 61 * hash + (secureLoginEnabled ? 1 : 0); hash = 61 * hash + Objects.hashCode(supportedLanguages); + hash = 61 * hash + Objects.hashCode(defaultLanguage); return hash; } @@ -161,46 +200,53 @@ public final class KernelConfig { return false; } final KernelConfig other = (KernelConfig) obj; - if (debugEnabled != other.debugEnabled) { + if (debugEnabled != other.isDebugEnabled()) { return false; } - if (webdevSupportEnabled != other.webdevSupportEnabled) { + if (webdevSupportEnabled != other.isWebdevSupportEnabled()) { return false; } - if (dataPermissionCheckEnabled != other.dataPermissionCheckEnabled) { + if (dataPermissionCheckEnabled != other.isDataPermissionCheckEnabled()) { return false; } - if (ssoEnabled != other.ssoEnabled) { + if (ssoEnabled != other.isSsoEnabled()) { return false; } - if (rememberLoginEnabled != other.rememberLoginEnabled) { + if (rememberLoginEnabled != other.isRememberLoginEnabled()) { return false; } - if (secureLoginEnabled != other.secureLoginEnabled) { + if (secureLoginEnabled != other.isSecureLoginEnabled()) { return false; } if (!Objects.equals(primaryUserIdentifier, - other.primaryUserIdentifier)) { + other.getPrimaryUserIdentifier())) { return false; } - return Objects.equals(supportedLanguages, other.supportedLanguages); + if (!Objects.equals(supportedLanguages, other.getSupportedLanguages())) { + return false; + } + + return Objects.equals(defaultLanguage, other.getDefaultLanguage()); } @Override public String toString() { - final StringBuilder builder = new StringBuilder(); - supportedLanguages.forEach(s -> builder.append(s)); + final StringJoiner joiner = new StringJoiner(","); + if (supportedLanguages != null) { + supportedLanguages.forEach(s -> joiner.add(s)); + } return String.format("%s{ " - + "debugEnabled = %b, " - + "webdevSupportEnabled = %b, " - + "dataPermissionCheckEnabled = %b, " - + "primaryUserIdentifier = \"%s\", " - + "ssoEnabled = %b, " - + "rememberLoginEnabeled = %b, " - + "secureLoginEnabled = %b, " - + "supportedLanguages = \"%s\"" - + " }", + + "debugEnabled = %b, " + + "webdevSupportEnabled = %b, " + + "dataPermissionCheckEnabled = %b, " + + "primaryUserIdentifier = \"%s\", " + + "ssoEnabled = %b, " + + "rememberLoginEnabeled = %b, " + + "secureLoginEnabled = %b, " + + "supportedLanguages = \"%s\", " + + "defaultLanguage = \"%s\"" + + " }", super.toString(), debugEnabled, webdevSupportEnabled, @@ -209,6 +255,8 @@ public final class KernelConfig { ssoEnabled, rememberLoginEnabled, secureLoginEnabled, - builder.toString()); + joiner.toString(), + defaultLanguage); } + } diff --git a/ccm-core/src/main/java/org/libreccm/configuration/EnumSetting.java b/ccm-core/src/main/java/org/libreccm/configuration/EnumSetting.java index 5a87207d7..96affcc6e 100644 --- a/ccm-core/src/main/java/org/libreccm/configuration/EnumSetting.java +++ b/ccm-core/src/main/java/org/libreccm/configuration/EnumSetting.java @@ -22,6 +22,7 @@ import static org.libreccm.core.CoreConstants.*; import java.io.Serializable; import java.util.Collections; +import java.util.HashSet; import java.util.Set; import java.util.Objects; @@ -55,7 +56,7 @@ public class EnumSetting if (value == null) { return null; } else { - return value; + return new HashSet<>(value); } } diff --git a/ccm-core/src/test/java/com/arsdigita/kernel/EqualsAndHashCodeTest.java b/ccm-core/src/test/java/com/arsdigita/kernel/EqualsAndHashCodeTest.java new file mode 100644 index 000000000..97d5bba31 --- /dev/null +++ b/ccm-core/src/test/java/com/arsdigita/kernel/EqualsAndHashCodeTest.java @@ -0,0 +1,48 @@ +/* + * Copyright (C) 2016 LibreCCM Foundation. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301 USA + */ +package com.arsdigita.kernel; + +import org.junit.experimental.categories.Category; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +import org.libreccm.tests.categories.UnitTest; +import org.libreccm.testutils.EqualsVerifier; + +import java.util.Arrays; +import java.util.Collection; + + +/** + * + * @author Jens Pelzetter + */ +@RunWith(Parameterized.class) +@Category(UnitTest.class) +public class EqualsAndHashCodeTest extends EqualsVerifier { + @Parameterized.Parameters(name = "{0}") + public static Collection> data() { + return Arrays.asList(new Class[] { + KernelConfig.class + }); + } + + public EqualsAndHashCodeTest(final Class entityClass) { + super(entityClass); + } +} diff --git a/ccm-core/src/test/java/com/arsdigita/kernel/ToStringTest.java b/ccm-core/src/test/java/com/arsdigita/kernel/ToStringTest.java new file mode 100644 index 000000000..7a66e75ce --- /dev/null +++ b/ccm-core/src/test/java/com/arsdigita/kernel/ToStringTest.java @@ -0,0 +1,49 @@ +/* + * Copyright (C) 2016 LibreCCM Foundation. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301 USA + */ +package com.arsdigita.kernel; + +import org.junit.experimental.categories.Category; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +import org.libreccm.tests.categories.UnitTest; +import org.libreccm.testutils.ToStringVerifier; + +import java.util.Arrays; +import java.util.Collection; + +/** + * + * @author Jens Pelzetter + */ +@RunWith(Parameterized.class) +@Category(UnitTest.class) +public class ToStringTest extends ToStringVerifier { + + @Parameterized.Parameters(name = "{0}") + public static Collection> data() { + return Arrays.asList(new Class[]{ + KernelConfig.class + }); + } + + public ToStringTest(final Class entityClass) { + super(entityClass); + } + +}