Upgrade to ConfigMe 0.2

This commit is contained in:
ljacqu 2016-10-16 20:08:52 +02:00
parent 252813197f
commit 995d4acda2
10 changed files with 51 additions and 63 deletions

View File

@ -873,7 +873,7 @@
<dependency>
<groupId>com.github.authme</groupId>
<artifactId>configme</artifactId>
<version>0.1</version>
<version>0.2</version>
<scope>compile</scope>
<optional>true</optional>
<exclusions>

View File

@ -1,6 +1,6 @@
package fr.xephi.authme.initialization;
import com.github.authme.configme.knownproperties.PropertyEntry;
import com.github.authme.configme.knownproperties.ConfigurationData;
import com.github.authme.configme.resource.PropertyResource;
import com.github.authme.configme.resource.YamlFileResource;
import fr.xephi.authme.AuthMe;
@ -12,19 +12,19 @@ import fr.xephi.authme.datasource.DataSourceType;
import fr.xephi.authme.datasource.FlatFile;
import fr.xephi.authme.datasource.MySQL;
import fr.xephi.authme.datasource.SQLite;
import fr.xephi.authme.output.ConsoleFilter;
import fr.xephi.authme.output.Log4JFilter;
import fr.xephi.authme.message.MessageKey;
import fr.xephi.authme.message.Messages;
import fr.xephi.authme.output.ConsoleFilter;
import fr.xephi.authme.output.Log4JFilter;
import fr.xephi.authme.service.BukkitService;
import fr.xephi.authme.service.MigrationService;
import fr.xephi.authme.settings.Settings;
import fr.xephi.authme.settings.SettingsMigrationService;
import fr.xephi.authme.settings.properties.AuthMeSettingsRetriever;
import fr.xephi.authme.settings.properties.DatabaseSettings;
import fr.xephi.authme.settings.properties.EmailSettings;
import fr.xephi.authme.settings.properties.SecuritySettings;
import fr.xephi.authme.service.BukkitService;
import fr.xephi.authme.util.FileUtils;
import fr.xephi.authme.service.MigrationService;
import fr.xephi.authme.util.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.bukkit.Bukkit;
@ -33,11 +33,10 @@ import org.bukkit.entity.Player;
import java.io.File;
import java.io.IOException;
import java.sql.SQLException;
import java.util.List;
import java.util.logging.Logger;
import static fr.xephi.authme.settings.properties.EmailSettings.RECALL_PLAYERS;
import static fr.xephi.authme.service.BukkitService.TICKS_PER_MINUTE;
import static fr.xephi.authme.settings.properties.EmailSettings.RECALL_PLAYERS;
/**
* Initializes various services.
@ -62,13 +61,12 @@ public class Initializer {
* @return the settings instance, or null if it could not be constructed
*/
public static Settings createSettings(AuthMe authMe) throws Exception {
SettingsMigrationService migrationService = new SettingsMigrationService(authMe.getDataFolder());
List<PropertyEntry> knownProperties = AuthMeSettingsRetriever.getAllPropertyFields();
File configFile = new File(authMe.getDataFolder(), "config.yml");
if (FileUtils.copyFileFromResource(configFile, "config.yml")) {
PropertyResource resource = new YamlFileResource(configFile);
return new Settings(authMe.getDataFolder(), resource, migrationService, knownProperties);
SettingsMigrationService migrationService = new SettingsMigrationService(authMe.getDataFolder());
ConfigurationData configurationData = AuthMeSettingsRetriever.buildConfigurationData();
return new Settings(authMe.getDataFolder(), resource, migrationService, configurationData);
}
throw new Exception("Could not copy config.yml from JAR to plugin folder");
}

View File

@ -1,7 +1,7 @@
package fr.xephi.authme.settings;
import com.github.authme.configme.SettingsManager;
import com.github.authme.configme.knownproperties.PropertyEntry;
import com.github.authme.configme.knownproperties.ConfigurationData;
import com.github.authme.configme.migration.MigrationService;
import com.github.authme.configme.resource.PropertyResource;
import com.google.common.io.Files;
@ -10,7 +10,6 @@ import fr.xephi.authme.ConsoleLogger;
import java.io.File;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.List;
import static fr.xephi.authme.util.FileUtils.copyFileFromResource;
@ -30,11 +29,11 @@ public class Settings extends SettingsManager {
* @param pluginFolder the AuthMe plugin folder
* @param resource the property resource to read and write properties to
* @param migrationService migration service to check the settings file with
* @param knownProperties collection of all available settings
* @param configurationData configuration data (properties and comments)
*/
public Settings(File pluginFolder, PropertyResource resource, MigrationService migrationService,
List<PropertyEntry> knownProperties) {
super(resource, migrationService, knownProperties);
ConfigurationData configurationData) {
super(resource, migrationService, configurationData);
this.pluginFolder = pluginFolder;
loadSettingsFromFiles();
}

View File

@ -1,6 +1,5 @@
package fr.xephi.authme.settings;
import com.github.authme.configme.knownproperties.PropertyEntry;
import com.github.authme.configme.migration.PlainMigrationService;
import com.github.authme.configme.properties.Property;
import com.github.authme.configme.resource.PropertyResource;
@ -35,7 +34,7 @@ public class SettingsMigrationService extends PlainMigrationService {
}
@Override
protected boolean performMigrations(PropertyResource resource, List<PropertyEntry> knownProperties) {
protected boolean performMigrations(PropertyResource resource, List<Property<?>> properties) {
boolean changes = false;
if ("[a-zA-Z0-9_?]*".equals(resource.getString(ALLOWED_NICKNAME_CHARACTERS.getPath()))) {
resource.setValue(ALLOWED_NICKNAME_CHARACTERS.getPath(), "[a-zA-Z0-9_]*");

View File

@ -1,12 +1,10 @@
package fr.xephi.authme.settings.properties;
import com.github.authme.configme.SettingsHolder;
import com.github.authme.configme.knownproperties.PropertyEntry;
import com.github.authme.configme.knownproperties.PropertyFieldsCollector;
import com.github.authme.configme.knownproperties.ConfigurationData;
import com.github.authme.configme.knownproperties.ConfigurationDataBuilder;
import com.github.authme.configme.properties.Property;
import java.util.List;
/**
* Utility class responsible for retrieving all {@link Property} fields
* from {@link SettingsHolder} implementations via reflection.
@ -17,12 +15,12 @@ public final class AuthMeSettingsRetriever {
}
/**
* Constructs a list with all property fields in AuthMe {@link SettingsHolder} classes.
* Builds the configuration data for all property fields in AuthMe {@link SettingsHolder} classes.
*
* @return list of all known properties
* @return configuration data
*/
public static List<PropertyEntry> getAllPropertyFields() {
return PropertyFieldsCollector.getAllProperties(
public static ConfigurationData buildConfigurationData() {
return ConfigurationDataBuilder.collectData(
DatabaseSettings.class, ConverterSettings.class, PluginSettings.class,
RestrictionSettings.class, EmailSettings.class, HooksSettings.class,
ProtectionSettings.class, PurgeSettings.class, SecuritySettings.class,

View File

@ -13,9 +13,9 @@ import fr.xephi.authme.permission.PermissionsManager;
import fr.xephi.authme.process.Management;
import fr.xephi.authme.process.login.ProcessSyncPlayerLogin;
import fr.xephi.authme.security.PasswordSecurity;
import fr.xephi.authme.service.BukkitService;
import fr.xephi.authme.settings.Settings;
import fr.xephi.authme.task.purge.PurgeService;
import fr.xephi.authme.service.BukkitService;
import org.bukkit.Bukkit;
import org.bukkit.Server;
import org.bukkit.plugin.PluginDescriptionFile;
@ -36,7 +36,7 @@ import java.io.IOException;
import java.util.logging.Logger;
import static fr.xephi.authme.settings.TestSettingsMigrationServices.alwaysFulfilled;
import static fr.xephi.authme.settings.properties.AuthMeSettingsRetriever.getAllPropertyFields;
import static fr.xephi.authme.settings.properties.AuthMeSettingsRetriever.buildConfigurationData;
import static org.hamcrest.Matchers.not;
import static org.hamcrest.Matchers.nullValue;
import static org.junit.Assert.assertThat;
@ -95,7 +95,7 @@ public class AuthMeInitializationTest {
public void shouldInitializeAllServices() {
// given
Settings settings =
new Settings(dataFolder, mock(PropertyResource.class), alwaysFulfilled(), getAllPropertyFields());
new Settings(dataFolder, mock(PropertyResource.class), alwaysFulfilled(), buildConfigurationData());
Injector injector = new InjectorBuilder().addDefaultHandlers("fr.xephi.authme").create();
injector.provide(DataFolder.class, dataFolder);

View File

@ -1,6 +1,6 @@
package fr.xephi.authme.settings;
import com.github.authme.configme.knownproperties.PropertyEntry;
import com.github.authme.configme.knownproperties.ConfigurationData;
import com.github.authme.configme.migration.MigrationService;
import com.github.authme.configme.migration.PlainMigrationService;
import com.github.authme.configme.properties.Property;
@ -16,10 +16,10 @@ import org.junit.Test;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
import static org.hamcrest.Matchers.equalTo;
import static org.junit.Assert.assertThat;
@ -42,7 +42,8 @@ public class ConfigFileConsistencyTest {
MigrationService migration = new PlainMigrationService();
// when
boolean result = migration.checkAndMigrate(resource, AuthMeSettingsRetriever.getAllPropertyFields());
boolean result = migration.checkAndMigrate(
resource, AuthMeSettingsRetriever.buildConfigurationData().getProperties());
// then
if (result) {
@ -86,23 +87,19 @@ public class ConfigFileConsistencyTest {
// given
File configFile = TestHelper.getJarFile(CONFIG_FILE);
PropertyResource resource = new YamlFileResource(configFile);
List<PropertyEntry> knownProperties = AuthMeSettingsRetriever.getAllPropertyFields();
ConfigurationData configurationData = AuthMeSettingsRetriever.buildConfigurationData();
// when / then
for (PropertyEntry propertyEntry : knownProperties) {
Property<?> property = propertyEntry.getProperty();
for (Property<?> property : configurationData.getProperties()) {
assertThat("Default value of '" + property.getPath() + "' in config.yml should be the same as in Property",
property.getValue(resource).equals(property.getDefaultValue()), equalTo(true));
}
}
private static Set<String> getAllKnownPropertyPaths() {
List<PropertyEntry> knownProperties = AuthMeSettingsRetriever.getAllPropertyFields();
Set<String> paths = new HashSet<>(knownProperties.size());
for (PropertyEntry propertyEntry : knownProperties) {
paths.add(propertyEntry.getProperty().getPath());
}
return paths;
return AuthMeSettingsRetriever.buildConfigurationData()
.getProperties().stream()
.map(Property::getPath)
.collect(Collectors.toSet());
}
}

View File

@ -1,7 +1,7 @@
package fr.xephi.authme.settings;
import com.github.authme.configme.knownproperties.PropertyEntry;
import com.github.authme.configme.knownproperties.PropertyFieldsCollector;
import com.github.authme.configme.knownproperties.ConfigurationData;
import com.github.authme.configme.knownproperties.ConfigurationDataBuilder;
import com.github.authme.configme.migration.PlainMigrationService;
import com.github.authme.configme.properties.Property;
import com.github.authme.configme.resource.PropertyResource;
@ -21,7 +21,6 @@ import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import static fr.xephi.authme.TestHelper.getJarFile;
@ -38,8 +37,8 @@ public class SettingsIntegrationTest {
/** File name of the sample config missing certain {@link TestConfiguration} values. */
private static final String INCOMPLETE_FILE = TestHelper.PROJECT_ROOT + "settings/config-incomplete-sample.yml";
private static List<PropertyEntry> knownProperties =
PropertyFieldsCollector.getAllProperties(TestConfiguration.class);
private static ConfigurationData CONFIG_DATA =
ConfigurationDataBuilder.collectData(TestConfiguration.class);
@Rule
public TemporaryFolder temporaryFolder = new TemporaryFolder();
@ -65,7 +64,7 @@ public class SettingsIntegrationTest {
// when / then
Settings settings = new Settings(testPluginFolder, resource,
new PlainMigrationService(), knownProperties);
new PlainMigrationService(), CONFIG_DATA);
Map<Property<?>, Object> expectedValues = ImmutableMap.<Property<?>, Object>builder()
.put(TestConfiguration.DURATION_IN_SECONDS, 22)
.put(TestConfiguration.SYSTEM_NAME, "Custom sys name")
@ -91,14 +90,14 @@ public class SettingsIntegrationTest {
File file = copyFileFromResources(INCOMPLETE_FILE);
PropertyResource resource = new YamlFileResource(file);
// Expectation: File is rewritten to since it does not have all configurations
new Settings(testPluginFolder, resource, new PlainMigrationService(), knownProperties);
new Settings(testPluginFolder, resource, new PlainMigrationService(), CONFIG_DATA);
// Load the settings again -> checks that what we wrote can be loaded again
resource = new YamlFileResource(file);
// then
Settings settings = new Settings(testPluginFolder, resource,
new PlainMigrationService(), knownProperties);
new PlainMigrationService(), CONFIG_DATA);
Map<Property<?>, Object> expectedValues = ImmutableMap.<Property<?>, Object>builder()
.put(TestConfiguration.DURATION_IN_SECONDS, 22)
.put(TestConfiguration.SYSTEM_NAME, "[TestDefaultValue]")
@ -123,7 +122,7 @@ public class SettingsIntegrationTest {
File configFile = temporaryFolder.newFile();
PropertyResource resource = new YamlFileResource(configFile);
Settings settings = new Settings(testPluginFolder, resource,
TestSettingsMigrationServices.alwaysFulfilled(), knownProperties);
TestSettingsMigrationServices.alwaysFulfilled(), CONFIG_DATA);
// when
assertThat(settings.getProperty(TestConfiguration.RATIO_ORDER), equalTo(TestEnum.SECOND)); // default value

View File

@ -1,6 +1,6 @@
package fr.xephi.authme.settings;
import com.github.authme.configme.knownproperties.PropertyEntry;
import com.github.authme.configme.knownproperties.ConfigurationData;
import com.github.authme.configme.resource.PropertyResource;
import com.github.authme.configme.resource.YamlFileResource;
import com.google.common.io.Files;
@ -12,7 +12,6 @@ import org.junit.rules.TemporaryFolder;
import java.io.File;
import java.io.IOException;
import java.util.List;
import static org.hamcrest.Matchers.arrayWithSize;
import static org.hamcrest.Matchers.equalTo;
@ -41,12 +40,12 @@ public class SettingsMigrationServiceTest {
// given
copyConfigToTestFolder();
PropertyResource resource = new YamlFileResource(configTestFile);
List<PropertyEntry> propertyMap = AuthMeSettingsRetriever.getAllPropertyFields();
ConfigurationData configurationData = AuthMeSettingsRetriever.buildConfigurationData();
assumeThat(testFolder.listFiles(), arrayWithSize(1));
SettingsMigrationService migrationService = new SettingsMigrationService(testFolder);
// when
boolean result = migrationService.checkAndMigrate(resource, propertyMap);
boolean result = migrationService.checkAndMigrate(resource, configurationData.getProperties());
// then
assertThat(result, equalTo(false));

View File

@ -1,7 +1,7 @@
package fr.xephi.authme.settings;
import com.github.authme.configme.knownproperties.PropertyEntry;
import com.github.authme.configme.knownproperties.PropertyFieldsCollector;
import com.github.authme.configme.knownproperties.ConfigurationData;
import com.github.authme.configme.knownproperties.ConfigurationDataBuilder;
import com.github.authme.configme.resource.PropertyResource;
import fr.xephi.authme.TestHelper;
import fr.xephi.authme.settings.properties.RegistrationSettings;
@ -15,7 +15,6 @@ import org.junit.rules.TemporaryFolder;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.util.List;
import static org.hamcrest.Matchers.arrayContaining;
import static org.hamcrest.Matchers.arrayWithSize;
@ -29,8 +28,8 @@ import static org.mockito.Mockito.mock;
*/
public class SettingsTest {
private static final List<PropertyEntry> knownProperties =
PropertyFieldsCollector.getAllProperties(TestConfiguration.class);
private static final ConfigurationData CONFIG_DATA =
ConfigurationDataBuilder.collectData(TestConfiguration.class);
@Rule
public TemporaryFolder temporaryFolder = new TemporaryFolder();
@ -57,7 +56,7 @@ public class SettingsTest {
PropertyResource resource = mock(PropertyResource.class);
given(resource.getBoolean(RegistrationSettings.USE_WELCOME_MESSAGE.getPath())).willReturn(true);
Settings settings = new Settings(testPluginFolder, resource,
TestSettingsMigrationServices.alwaysFulfilled(), knownProperties);
TestSettingsMigrationServices.alwaysFulfilled(), CONFIG_DATA);
// when
String[] result = settings.getWelcomeMessage();
@ -77,7 +76,7 @@ public class SettingsTest {
PropertyResource resource = mock(PropertyResource.class);
Settings settings = new Settings(testPluginFolder, resource,
TestSettingsMigrationServices.alwaysFulfilled(), knownProperties);
TestSettingsMigrationServices.alwaysFulfilled(), CONFIG_DATA);
// when
String result = settings.getPasswordEmailMessage();