Attempts to clean the migration code a bit
All checks were successful
KnarCraft/KnarLib/pipeline/head This commit looks good

This commit is contained in:
2025-09-05 21:51:28 +02:00
parent 0b56f3db8f
commit 6dffb7a784
2 changed files with 40 additions and 33 deletions

View File

@@ -64,14 +64,14 @@ public class StargateYamlConfiguration extends YamlConfiguration {
/** /**
* Loads the configuration of the given plugin * Loads the configuration of the given plugin
* *
* @param plugin <p>The plugin to load the configuration from</p> * @param plugin <p>The plugin to load the configuration from</p>
* @param copyDefaults <p>Whether to copy default values when loading</p>
* @return <p>The loaded configuration, or null if unsuccessful</p> * @return <p>The loaded configuration, or null if unsuccessful</p>
*/ */
@SuppressWarnings("unused")
@Nullable @Nullable
public static StargateYamlConfiguration loadConfiguration(@NotNull Plugin plugin) { public static StargateYamlConfiguration loadConfiguration(@NotNull Plugin plugin, boolean copyDefaults) {
StargateYamlConfiguration configuration = new StargateYamlConfiguration(); StargateYamlConfiguration configuration = new StargateYamlConfiguration();
configuration.options().copyDefaults(true); configuration.options().copyDefaults(copyDefaults);
try { try {
configuration.load(new File(plugin.getDataFolder(), ConfigHelper.getConfigFile())); configuration.load(new File(plugin.getDataFolder(), ConfigHelper.getConfigFile()));
return configuration; return configuration;
@@ -88,7 +88,6 @@ public class StargateYamlConfiguration extends YamlConfiguration {
* @param configuration <p>The configuration to save</p> * @param configuration <p>The configuration to save</p>
* @return <p>True if the configuration was successfully saved</p> * @return <p>True if the configuration was successfully saved</p>
*/ */
@SuppressWarnings("unused")
public static boolean saveConfiguration(@NotNull Plugin plugin, @NotNull FileConfiguration configuration) { public static boolean saveConfiguration(@NotNull Plugin plugin, @NotNull FileConfiguration configuration) {
try { try {
configuration.save(new File(plugin.getDataFolder(), ConfigHelper.getConfigFile())); configuration.save(new File(plugin.getDataFolder(), ConfigHelper.getConfigFile()));

View File

@@ -3,12 +3,12 @@ package net.knarcraft.knarlib.util;
import net.knarcraft.knarlib.config.StargateYamlConfiguration; import net.knarcraft.knarlib.config.StargateYamlConfiguration;
import net.knarcraft.knarlib.property.ColorConversion; import net.knarcraft.knarlib.property.ColorConversion;
import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.InvalidConfigurationException;
import org.bukkit.configuration.MemorySection; import org.bukkit.configuration.MemorySection;
import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.plugin.Plugin; import org.bukkit.plugin.Plugin;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
@@ -65,31 +65,22 @@ public final class ConfigHelper {
File dataFolder = plugin.getDataFolder(); File dataFolder = plugin.getDataFolder();
File config = new File(dataFolder, CONFIG_FILE); File config = new File(dataFolder, CONFIG_FILE);
// Load the old configuration as a normal configuration to prevent old comments from being retained
FileConfiguration oldConfiguration = StargateYamlConfiguration.loadConfiguration(plugin, false);
if (oldConfiguration == null) {
return false;
}
//Save the old config just in case something goes wrong //Save the old config just in case something goes wrong
try { try {
StargateYamlConfiguration currentConfiguration = new StargateYamlConfiguration(); oldConfiguration.save(new File(dataFolder, BACKUP_CONFIG_FILE));
currentConfiguration.load(config); } catch (IOException exception) {
currentConfiguration.save(new File(dataFolder, BACKUP_CONFIG_FILE));
} catch (IOException | InvalidConfigurationException exception) {
plugin.getLogger().log(Level.WARNING, "Unable to save old backup and do migration"); plugin.getLogger().log(Level.WARNING, "Unable to save old backup and do migration");
return false; return false;
} }
//Load old and new configuration InputStream configStream = loadInternalFile(plugin, CONFIG_FILE, "internal configuration");
plugin.reloadConfig();
FileConfiguration oldConfiguration;
try {
oldConfiguration = new YamlConfiguration();
oldConfiguration.load(config);
} catch (IOException | InvalidConfigurationException exception) {
plugin.getLogger().log(Level.WARNING, "Unable to load old configuration and do migration");
return false;
}
InputStream configStream = FileHelper.getInputStreamForInternalFile("/" + CONFIG_FILE);
if (configStream == null) { if (configStream == null) {
plugin.getLogger().log(Level.SEVERE, "Could not migrate the configuration, as the internal " +
"configuration could not be read!");
return false; return false;
} }
YamlConfiguration newConfiguration = StargateYamlConfiguration.loadConfiguration( YamlConfiguration newConfiguration = StargateYamlConfiguration.loadConfiguration(
@@ -98,10 +89,8 @@ public final class ConfigHelper {
//Read all available config migrations //Read all available config migrations
Map<String, String> migrationFields; Map<String, String> migrationFields;
try { try {
InputStream migrationStream = FileHelper.getInputStreamForInternalFile("/" + MIGRATION_FILE); InputStream migrationStream = loadInternalFile(plugin, MIGRATION_FILE, "internal migration paths");
if (migrationStream == null) { if (migrationStream == null) {
plugin.getLogger().log(Level.SEVERE, "Could not migrate the configuration, as the internal " +
"migration paths could not be read!");
return false; return false;
} }
migrationFields = FileHelper.readKeyValuePairs(FileHelper.getBufferedReaderFromInputStream(migrationStream), migrationFields = FileHelper.readKeyValuePairs(FileHelper.getBufferedReaderFromInputStream(migrationStream),
@@ -111,7 +100,7 @@ public final class ConfigHelper {
return false; return false;
} }
//Replace old config names with the new ones // Replace old config names with the new ones
for (String key : migrationFields.keySet()) { for (String key : migrationFields.keySet()) {
if (oldConfiguration.contains(key)) { if (oldConfiguration.contains(key)) {
migrateProperty(migrationFields, key, oldConfiguration); migrateProperty(migrationFields, key, oldConfiguration);
@@ -126,10 +115,8 @@ public final class ConfigHelper {
newConfiguration.set(key, oldConfiguration.get(key)); newConfiguration.set(key, oldConfiguration.get(key));
} }
try { // Save merged configuration
newConfiguration.save(config); if (!StargateYamlConfiguration.saveConfiguration(plugin, newConfiguration)) {
} catch (IOException exception) {
plugin.getLogger().log(Level.WARNING, "Unable to save migrated config");
return false; return false;
} }
@@ -169,4 +156,25 @@ public final class ConfigHelper {
oldConfiguration.set(key, null); oldConfiguration.set(key, null);
} }
/**
* Loads a file from the internal plugin .jar
*
* @param plugin <p>The plugin to load the file from</p>
* @param fileName <p>The file to load</p>
* @param fileDescription <p>The file description to use in error messages</p>
* @return <p>An input stream for the file, or null if the file could not be read</p>
*/
@Nullable
private static InputStream loadInternalFile(@NotNull Plugin plugin, @NotNull String fileName,
@NotNull String fileDescription) {
InputStream configStream = FileHelper.getInputStreamForInternalFile("/" + fileName);
if (configStream == null) {
plugin.getLogger().log(Level.SEVERE, "Could not migrate the configuration, as the " + fileDescription +
" could not be read!");
return null;
} else {
return configStream;
}
}
} }