Merge pull request #134 from Gnat008/602-create-lowercase-string-list-propertytype

Add a lowercase String list property - fixes #602
This commit is contained in:
Gabriele C 2016-05-30 17:53:14 +02:00
commit 8a0655e333
4 changed files with 71 additions and 5 deletions

View File

@ -3,6 +3,7 @@ package fr.xephi.authme.settings.domain;
import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.FileConfiguration;
import org.yaml.snakeyaml.Yaml; import org.yaml.snakeyaml.Yaml;
import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
@ -33,6 +34,17 @@ public abstract class Property<T> {
return new StringListProperty(path, defaultValues); return new StringListProperty(path, defaultValues);
} }
/**
* Create a new String list property where all values are lowercase.
*
* @param path The property's path
* @param defaultValues The items in the default list
* @return The created list property
*/
public static Property<List<String>> newLowercaseListProperty(String path, String... defaultValues) {
return new LowercaseStringListProperty(path, defaultValues);
}
/** /**
* Create a new enum property. * Create a new enum property.
* *
@ -165,7 +177,7 @@ public abstract class Property<T> {
/** /**
* String list property. * String list property.
*/ */
private static final class StringListProperty extends Property<List<String>> { private static class StringListProperty extends Property<List<String>> {
public StringListProperty(String path, String[] defaultValues) { public StringListProperty(String path, String[] defaultValues) {
super(path, Arrays.asList(defaultValues)); super(path, Arrays.asList(defaultValues));
@ -196,4 +208,28 @@ public abstract class Property<T> {
} }
} }
/**
* Lowercase String list property.
*/
private static final class LowercaseStringListProperty extends StringListProperty {
public LowercaseStringListProperty(String path, String[] defaultValues) {
super(path, defaultValues);
}
@Override
public List<String> getFromFile(FileConfiguration configuration) {
if (!configuration.isList(getPath())) {
return getDefaultValue();
}
// make sure all elements are lowercase
List<String> lowercaseList = new ArrayList<>();
for (String element : configuration.getStringList(getPath())) {
lowercaseList.add(element.toLowerCase());
}
return lowercaseList;
}
}
} }

View File

@ -7,6 +7,7 @@ import fr.xephi.authme.settings.domain.SettingsClass;
import java.util.List; import java.util.List;
import static fr.xephi.authme.settings.domain.Property.newListProperty; import static fr.xephi.authme.settings.domain.Property.newListProperty;
import static fr.xephi.authme.settings.domain.Property.newLowercaseListProperty;
import static fr.xephi.authme.settings.domain.Property.newProperty; import static fr.xephi.authme.settings.domain.Property.newProperty;
public class RestrictionSettings implements SettingsClass { public class RestrictionSettings implements SettingsClass {
@ -30,7 +31,7 @@ public class RestrictionSettings implements SettingsClass {
@Comment("Allowed commands for unauthenticated players") @Comment("Allowed commands for unauthenticated players")
public static final Property<List<String>> ALLOW_COMMANDS = public static final Property<List<String>> ALLOW_COMMANDS =
newListProperty("settings.restrictions.allowCommands", newLowercaseListProperty("settings.restrictions.allowCommands",
"/login", "/register", "/l", "/reg", "/email", "/captcha"); "/login", "/register", "/l", "/reg", "/email", "/captcha");
@Comment({ @Comment({
@ -87,7 +88,7 @@ public class RestrictionSettings implements SettingsClass {
" AllowedRestrictedUser:", " AllowedRestrictedUser:",
" - playername;127.0.0.1"}) " - playername;127.0.0.1"})
public static final Property<List<String>> ALLOWED_RESTRICTED_USERS = public static final Property<List<String>> ALLOWED_RESTRICTED_USERS =
newListProperty("settings.restrictions.AllowedRestrictedUser"); newLowercaseListProperty("settings.restrictions.AllowedRestrictedUser");
@Comment("Should unregistered players be kicked immediately?") @Comment("Should unregistered players be kicked immediately?")
public static final Property<Boolean> KICK_NON_REGISTERED = public static final Property<Boolean> KICK_NON_REGISTERED =
@ -194,7 +195,7 @@ public class RestrictionSettings implements SettingsClass {
"It is case-sensitive!" "It is case-sensitive!"
}) })
public static final Property<List<String>> UNRESTRICTED_NAMES = public static final Property<List<String>> UNRESTRICTED_NAMES =
newListProperty("settings.unrestrictions.UnrestrictedName"); newLowercaseListProperty("settings.unrestrictions.UnrestrictedName");
private RestrictionSettings() { private RestrictionSettings() {

View File

@ -8,6 +8,7 @@ import fr.xephi.authme.settings.domain.SettingsClass;
import java.util.List; import java.util.List;
import static fr.xephi.authme.settings.domain.Property.newListProperty; import static fr.xephi.authme.settings.domain.Property.newListProperty;
import static fr.xephi.authme.settings.domain.Property.newLowercaseListProperty;
import static fr.xephi.authme.settings.domain.Property.newProperty; import static fr.xephi.authme.settings.domain.Property.newProperty;
public class SecuritySettings implements SettingsClass { public class SecuritySettings implements SettingsClass {
@ -98,7 +99,7 @@ public class SecuritySettings implements SettingsClass {
"- '123456'", "- '123456'",
"- 'password'"}) "- 'password'"})
public static final Property<List<String>> UNSAFE_PASSWORDS = public static final Property<List<String>> UNSAFE_PASSWORDS =
newListProperty("settings.security.unsafePasswords", "123456", "password", "qwerty", "12345", "54321"); newLowercaseListProperty("settings.security.unsafePasswords", "123456", "password", "qwerty", "12345", "54321");
private SecuritySettings() { private SecuritySettings() {
} }

View File

@ -38,6 +38,9 @@ public class PropertyTest {
when(configuration.isList("list.path.test")).thenReturn(true); when(configuration.isList("list.path.test")).thenReturn(true);
when(configuration.getStringList("list.path.test")).thenReturn(Arrays.asList("test1", "Test2", "3rd test")); when(configuration.getStringList("list.path.test")).thenReturn(Arrays.asList("test1", "Test2", "3rd test"));
when(configuration.isList("list.path.wrong")).thenReturn(false); when(configuration.isList("list.path.wrong")).thenReturn(false);
when(configuration.isList("lowercaselist.path.test")).thenReturn(true);
when(configuration.getStringList("lowercaselist.path.test")).thenReturn(Arrays.asList("test1", "Test2", "3rd test"));
when(configuration.isList("lowercaselist.path.wrong")).thenReturn(false);
} }
/* Boolean */ /* Boolean */
@ -141,4 +144,29 @@ public class PropertyTest {
assertThat(result, contains("default", "list", "elements")); assertThat(result, contains("default", "list", "elements"));
} }
/* Lowercase String list */
@Test
public void shouldGetLowercaseStringListValue() {
// given
Property<List<String>> property = Property.newLowercaseListProperty("lowercaselist.path.test", "1", "b");
// when
List<String> result = property.getFromFile(configuration);
// then
assertThat(result, contains("test1", "test2", "3rd test"));
}
@Test
public void shouldGetLowercaseStringListDefault() {
// given
Property<List<String>> property =
Property.newLowercaseListProperty("lowercaselist.path.wrong", "default", "list", "elements");
// when
List<String> result = property.getFromFile(configuration);
// then
assertThat(result, contains("default", "list", "elements"));
}
} }