8000 Rework plugin config system #2 by DerEchtePilz · Pull Request #605 · CommandAPI/CommandAPI · GitHub
[go: up one dir, main page]

Skip to content

Rework plugin config system #2 #605

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 10 commits into from
Oct 16, 2024
Prev Previous commit
Next Next commit
Code review
  • Loading branch information
DerEchtePilz committed Oct 16, 2024
commit c07b4b168e9c3cf3a700d8c465a9fd7f8f7353ba
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,7 @@
import java.util.Set;
import java.util.logging.Logger;

public class BukkitConfigurationAdapter extends ConfigurationAdapter<YamlConfiguration, DefaultBukkitConfig> {

private final YamlConfiguration config;

public BukkitConfigurationAdapter(YamlConfiguration config) {
this.config = config;
}
public record BukkitConfigurationAdapter(YamlConfiguration config) implements ConfigurationAdapter<YamlConfiguration> {

public static BukkitConfigurationAdapter createDummyInstance() {
return new BukkitConfigurationAdapter(null);
Expand Down Expand Up @@ -93,7 +87,7 @@ public void tryCreateSection(String key) {
}

@Override
public ConfigurationAdapter<YamlConfiguration, DefaultBukkitConfig> complete() {
public ConfigurationAdapter<YamlConfiguration> complete() {
String[] configStrings = config.saveToString().split("\n");
StringBuilder configBuilder = new StringBuilder();
for (String configString : configStrings) {
Expand All @@ -110,13 +104,9 @@ public ConfigurationAdapter<YamlConfiguration, DefaultBukkitConfig> complete() {
return this;
}

@Override
public YamlConfiguration config() {
return config;
}

@Override
public ConfigurationAdapter<YamlConfiguration, DefaultBukkitConfig> createNew() {
public ConfigurationAdapter<YamlConfiguration> createNew() {
return new BukkitConfigurationAdapter(new YamlConfiguration());
}

Expand All @@ -126,7 +116,7 @@ public DefaultBukkitConfig createDefaultConfig() {
}

@Override
public ConfigurationAdapter<YamlConfiguration, DefaultBukkitConfig> loadFromFile(File file) {
public ConfigurationAdapter<YamlConfiguration> loadFromFile(File file) {
YamlConfiguration config = YamlConfiguration.loadConfiguration(file);
return new BukkitConfigurationAdapter(config);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ public void setup() {
Map<String, CommentedSection> sections = new LinkedHashMap<>();
sections.put("messages", messages);

ConfigurationAdapter<YamlConfiguration, DefaultBukkitConfig> adapter = new BukkitConfigurationAdapter(new YamlConfiguration());
ConfigurationAdapter<YamlConfiguration> adapter = new BukkitConfigurationAdapter(new YamlConfiguration());
bukkitConfig = DefaultBukkitConfig.create(options, sections);
generator = ConfigGenerator.createNew(bukkitConfig);
this.adapter = (BukkitConfigurationAdapter) generator.generate(adapter);
Expand Down Expand Up @@ -106,12 +106,11 @@ private void validateConfigOptionsAbsent(Set<String> options, BukkitConfiguratio
}

private void validateSections(List<String> sections, String expectedOption, YamlConfiguration config) {
ConfigurationSection root = config.getConfigurationSection(sections.get(0));
assertNotNull(root, "Section '" + sections.get(0) + "' does not exist!");
ConfigurationSection root = config;

for (int i = 1; i < sections.size(); i++) {
root = root.getConfigurationSection(sections.get(i));
assertNotNull(root, "Section '" + sections.get(i) + "' does not exist!");
for (String section : sections) {
root = root.getConfigurationSection(section);
assertNotNull(root, "Section '" + section + "' does not exist!");
}
Object expectedValue = root.get(expectedOption);
assertNotNull(expectedValue, "Expected option '" + expectedOption + "' was not found in section '" + root.getName() + "'!");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,17 +11,7 @@
import java.util.Set;
import java.util.logging.Logger;

public class VelocityConfigurationAdapter extends ConfigurationAdapter<ConfigurationNode, DefaultVelocityConfig> {

private final YamlConfigurationLoader loader;
private final CommentedConfigurationNode config;
private final DefaultVelocityConfig defaultVelocityConfig;

public VelocityConfigurationAdapter(YamlConfigurationLoader loader, CommentedConfigurationNode config, DefaultVelocityConfig defaultVelocityConfig) {
this.loader = loader;
this.config = config;
this.defaultVelocityConfig = defaultVelocityConfig;
}
public record VelocityConfigurationAdapter(YamlConfigurationLoader loader, CommentedConfigurationNode config, DefaultVelocityConfig defaultVelocityConfig) implements ConfigurationAdapter<ConfigurationNode> {

public static VelocityConfigurationAdapter createDummyInstance(YamlConfigurationLoader loader) {
return new VelocityConfigurationAdapter(loader, null, null);
Expand Down Expand Up @@ -78,12 +68,12 @@ public CommentedConfigurationNode config() {
}

@Override
public ConfigurationAdapter<ConfigurationNode, DefaultVelocityConfig> complete() {
public ConfigurationAdapter<ConfigurationNode> complete() {
return this;
}

@Override
public ConfigurationAdapter<ConfigurationNode, DefaultVelocityConfig> createNew() {
public ConfigurationAdapter<ConfigurationNode> createNew() {
return new VelocityConfigurationAdapter(loader, loader.createNode(), createDefaultConfig());
}

Expand All @@ -93,7 +83,7 @@ public DefaultVelocityConfig createDefaultConfig() {
}

@Override
public ConfigurationAdapter<ConfigurationNode, DefaultVelocityConfig> loadFromFile(File file) throws IOException {
public ConfigurationAdapter<ConfigurationNode> loadFromFile(File file) throws IOException {
return new VelocityConfigurationAdapter(loader, loader.load(), createDefaultConfig());
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@ public static ConfigGenerator createNew(DefaultConfig defaultConfig) {
return new ConfigGenerator(defaultConfig);
}

public <T, C extends DefaultConfig> ConfigurationAdapter<T, C> generate(ConfigurationAdapter<T, C> existingConfig) {
ConfigurationAdapter<T, C> updatedConfig = existingConfig.createNew();
public <T> ConfigurationAdapter<T> generate(ConfigurationAdapter<T> existingConfig) {
ConfigurationAdapter<T> updatedConfig = existingConfig.createNew();

boolean shouldRemoveValues = shouldRemoveOptions(existingConfig);

Expand Down Expand Up @@ -61,7 +61,7 @@ public <T, C extends DefaultConfig> ConfigurationAdapter<T, C> generate(Configur
return (wasConfigUpdated) ? updatedConfig.complete() : null;
}

private <T, C extends DefaultConfig> boolean shouldRemoveOptions(ConfigurationAdapter<T, C> config) {
private <T> boolean shouldRemoveOptions(ConfigurationAdapter<T> config) {
Set<String> configOptions = config.getKeys();
Set<String> defaultConfigOptions = defaultConfig.getAllOptions().keySet();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,37 +5,37 @@
import java.util.Set;
import java.util.logging.Logger;

public abstract class ConfigurationAdapter<Configuration, DefaultConfig extends dev.jorel.commandapi.config.DefaultConfig> {
public interface ConfigurationAdapter<Configuration> {

public abstract void setValue(String key, Object value);
void setValue(String key, Object value);

public abstract void setComment(String key, String[] comment);
void setComment(String key, String[] comment);

public abstract Object getValue(String key);
Object getValue(String key);

public abstract String[] getComment(String key);
String[] getComment(String key);

public abstract Set<String> getKeys();
Set<String> getKeys();

public abstract boolean contains(String key);
boolean contains(String key);

public abstract void tryCreateSection(String key);
void tryCreateSection(String key);

public abstract ConfigurationAdapter<Configuration, DefaultConfig> complete();
ConfigurationAdapter<Configuration> complete();

public abstract Configuration config();
Configuration config();

public abstract ConfigurationAdapter<Configuration, DefaultConfig> createNew();
ConfigurationAdapter<Configuration> createNew();

public abstract DefaultConfig createDefaultConfig();
DefaultConfig createDefaultConfig();

public abstract ConfigurationAdapter<Configuration, DefaultConfig> loadFromFile(File file) throws IOException;
ConfigurationAdapter<Configuration> loadFromFile(File file) throws IOException;

public abstract void saveToFile(File file) throws IOException;
void saveToFile(File file) throws IOException;

public void saveDefaultConfig(File directory, File configFile, Logger logger) {
default void saveDefaultConfig(File directory, File configFile, Logger logger) {
ConfigGenerator generator = ConfigGenerator.createNew(createDefaultConfig());
ConfigurationAdapter<Configuration, DefaultConfig> existingConfig;
ConfigurationAdapter<Configuration> existingConfig;
if (!directory.exists()) {
if (!directory.mkdirs()) {
logger.severe("Failed to create directory for the CommandAPI's config.yml file!");
Expand All @@ -46,10 +46,15 @@ public void saveDefaultConfig(File directory, File configFile, Logger logger) {
existingConfig = loadFromFile(configFile);
} catch (IOException e) {
logger.severe("Failed to load the config file!");
logger.severe("Error message: " + e.getMessage());
logger.severe("Stacktrace:");
for (StackTraceElement element : e.getStackTrace()) {
logger.severe(element.toString());
}
return;
}
}
ConfigurationAdapter<Configuration, DefaultConfig> updatedConfig = generator.generate(existingConfig);
ConfigurationAdapter<Configuration> updatedConfig = generator.generate(existingConfig);
if (updatedConfig == null) {
return;
}
Expand Down
Loading
0