Skip to content

Commit 1ac962a

Browse files
committed
Add Config tests, improve ConfigManager, add Javadocs.
1 parent b884d09 commit 1ac962a

28 files changed

+580
-195
lines changed

automessage-core/src/main/java/com/github/imdmk/automessage/AutoMessagePlugin.java

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,11 @@
1212
import com.github.imdmk.automessage.platform.logger.PluginLogger;
1313
import com.github.imdmk.automessage.platform.scheduler.BukkitTaskScheduler;
1414
import com.github.imdmk.automessage.platform.scheduler.TaskScheduler;
15-
import com.github.imdmk.automessage.scheduled.ScheduledMessageConfig;
15+
import com.github.imdmk.automessage.scheduled.ScheduledMessagesConfig;
1616
import com.github.imdmk.automessage.scheduled.audience.filter.AudienceFilter;
1717
import com.github.imdmk.automessage.scheduled.dispatcher.MessageDispatcher;
18-
import com.github.imdmk.automessage.scheduled.dispatcher.MessageDispatcherConfig;
1918
import com.github.imdmk.automessage.scheduled.dispatcher.MessageDispatcherTask;
19+
import com.github.imdmk.automessage.scheduled.dispatcher.MessagesDispatcherConfig;
2020
import com.github.imdmk.automessage.scheduled.selector.MessageSelector;
2121
import com.github.imdmk.automessage.scheduled.selector.MessageSelectorFactory;
2222
import com.github.imdmk.automessage.shared.message.MessageConfig;
@@ -72,20 +72,20 @@ void enable(@NotNull PluginSettings settings) {
7272
messageService = new MessageService(configManager.require(MessageConfig.class), bukkitAudiences);
7373
taskScheduler = new BukkitTaskScheduler(plugin, server.getScheduler());
7474

75-
final MessageDispatcherConfig messageDispatcherConfig = configManager.require(MessageDispatcherConfig.class);
76-
final ScheduledMessageConfig scheduledMessageConfig = configManager.require(ScheduledMessageConfig.class);
75+
final MessagesDispatcherConfig messagesDispatcherConfig = configManager.require(MessagesDispatcherConfig.class);
76+
final ScheduledMessagesConfig scheduledMessagesConfig = configManager.require(ScheduledMessagesConfig.class);
7777

7878
final AudienceFilter audienceFilter = AudienceFilter.createDefault();
79-
final MessageSelector messageSelector = MessageSelectorFactory.create(messageDispatcherConfig.selector);
79+
final MessageSelector messageSelector = MessageSelectorFactory.create(messagesDispatcherConfig.selector);
8080

8181
final MessageDispatcher messageDispatcher = new MessageDispatcher(
8282
messageService,
8383
messageSelector,
8484
audienceFilter,
85-
() -> scheduledMessageConfig.messages
85+
() -> scheduledMessagesConfig.messages
8686
);
8787

88-
MessageDispatcherTask messageDispatcherTask = new MessageDispatcherTask(server, messageDispatcherConfig, messageDispatcher);
88+
MessageDispatcherTask messageDispatcherTask = new MessageDispatcherTask(server, messagesDispatcherConfig, messageDispatcher);
8989
taskScheduler.runTimerAsync(messageDispatcherTask);
9090

9191
liteCommands = LiteBukkitFactory.builder(PLUGIN_PREFIX, plugin, server)
@@ -94,8 +94,8 @@ void enable(@NotNull PluginSettings settings) {
9494
.result(Notice.class, new NoticeResultHandlerImpl(messageService))
9595

9696
.commands(
97-
new DisableCommand(messageDispatcherConfig, messageService),
98-
new EnableCommand(messageDispatcherConfig, messageService),
97+
new DisableCommand(messagesDispatcherConfig, messageService),
98+
new EnableCommand(messagesDispatcherConfig, messageService),
9999
new ReloadCommand(logger, configManager, taskScheduler, messageService)
100100
)
101101

@@ -107,7 +107,10 @@ void enable(@NotNull PluginSettings settings) {
107107
}
108108

109109
void disable() {
110-
Validator.ifNotNull(configManager, ConfigManager::saveAll);
110+
// Validator.ifNotNull(configManager, manager -> {
111+
// manager.saveAll();
112+
// manager.clearAll();
113+
// });
111114
Validator.ifNotNull(bukkitAudiences, BukkitAudiences::close);
112115
Validator.ifNotNull(taskScheduler, TaskScheduler::shutdown);
113116
Validator.ifNotNull(liteCommands, LiteCommands::unregister);

automessage-core/src/main/java/com/github/imdmk/automessage/command/dispatcher/DisableCommand.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.github.imdmk.automessage.command.dispatcher;
22

3-
import com.github.imdmk.automessage.scheduled.dispatcher.MessageDispatcherConfig;
3+
import com.github.imdmk.automessage.scheduled.dispatcher.MessagesDispatcherConfig;
44
import com.github.imdmk.automessage.shared.message.MessageService;
55
import com.github.imdmk.automessage.shared.validate.Validator;
66
import dev.rollczi.litecommands.annotations.command.Command;
@@ -14,11 +14,11 @@
1414
@Permission("command.automessage.disable")
1515
public final class DisableCommand {
1616

17-
private final MessageDispatcherConfig dispatcherConfig;
17+
private final MessagesDispatcherConfig dispatcherConfig;
1818
private final MessageService messageService;
1919

2020
public DisableCommand(
21-
@NotNull MessageDispatcherConfig dispatcherConfig,
21+
@NotNull MessagesDispatcherConfig dispatcherConfig,
2222
@NotNull MessageService messageService
2323
) {
2424
this.dispatcherConfig = Validator.notNull(dispatcherConfig, "dispatcherConfig");

automessage-core/src/main/java/com/github/imdmk/automessage/command/dispatcher/EnableCommand.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.github.imdmk.automessage.command.dispatcher;
22

3-
import com.github.imdmk.automessage.scheduled.dispatcher.MessageDispatcherConfig;
3+
import com.github.imdmk.automessage.scheduled.dispatcher.MessagesDispatcherConfig;
44
import com.github.imdmk.automessage.shared.message.MessageService;
55
import com.github.imdmk.automessage.shared.validate.Validator;
66
import dev.rollczi.litecommands.annotations.command.Command;
@@ -14,11 +14,11 @@
1414
@Permission("command.automessage.enable")
1515
public final class EnableCommand {
1616

17-
private final MessageDispatcherConfig dispatcherConfig;
17+
private final MessagesDispatcherConfig dispatcherConfig;
1818
private final MessageService messageService;
1919

2020
public EnableCommand(
21-
@NotNull MessageDispatcherConfig dispatcherConfig,
21+
@NotNull MessagesDispatcherConfig dispatcherConfig,
2222
@NotNull MessageService messageService
2323
) {
2424
this.dispatcherConfig = Validator.notNull(dispatcherConfig, "dispatcherConfig");

automessage-core/src/main/java/com/github/imdmk/automessage/command/dispatcher/messages/DispatcherMessagesImpl.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@
44
import eu.okaeri.configs.OkaeriConfig;
55
import eu.okaeri.configs.annotation.Comment;
66

7-
public final class DispatcherMessagesImpl extends OkaeriConfig implements DispatcherMessages {
7+
public final class DispatcherMessagesImpl
8+
extends OkaeriConfig
9+
implements DispatcherMessages {
810

911
@Comment({"#", "# Sent when automatic message dispatching is successfully enabled.", "#"})
1012
Notice dispatcherEnabled = Notice.chat(

automessage-core/src/main/java/com/github/imdmk/automessage/command/reload/messages/ReloadMessagesImpl.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@
44
import eu.okaeri.configs.OkaeriConfig;
55
import eu.okaeri.configs.annotation.Comment;
66

7-
public final class ReloadMessagesImpl extends OkaeriConfig implements ReloadMessages {
7+
public final class ReloadMessagesImpl
8+
extends OkaeriConfig
9+
implements ReloadMessages {
810

911
@Comment({"#", "# Message shown when all configuration files are successfully reloaded.", "#"})
1012
Notice configReloadedSuccess = Notice.chat(
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package com.github.imdmk.automessage.config;
2+
3+
public class ConfigAccessException extends RuntimeException {
4+
5+
public ConfigAccessException(String message) {
6+
super(message);
7+
}
8+
9+
public ConfigAccessException(String message, Throwable cause) {
10+
super(message, cause);
11+
}
12+
13+
public ConfigAccessException(Throwable cause) {
14+
super(cause);
15+
}
16+
}
17+
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package com.github.imdmk.automessage.config;
2+
3+
import com.github.imdmk.automessage.shared.validate.Validator;
4+
import eu.okaeri.configs.serdes.OkaeriSerdesPack;
5+
import eu.okaeri.configs.serdes.commons.SerdesCommons;
6+
import eu.okaeri.configs.yaml.snakeyaml.YamlSnakeYamlConfigurer;
7+
import org.jetbrains.annotations.NotNull;
8+
9+
import java.io.File;
10+
11+
final class ConfigBinder {
12+
13+
void bind(@NotNull ConfigSection config, @NotNull File file) {
14+
Validator.notNull(config, "config");
15+
Validator.notNull(file, "file");
16+
17+
final OkaeriSerdesPack serdesPack = config.getSerdesPack();
18+
final YamlSnakeYamlConfigurer yamlConfigurer = YamlConfigurerFactory.create();
19+
20+
config.withConfigurer(yamlConfigurer)
21+
.withSerdesPack(serdesPack)
22+
.withSerdesPack(new SerdesCommons())
23+
.withBindFile(file)
24+
.withRemoveOrphans(true);
25+
}
26+
}
27+
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package com.github.imdmk.automessage.config;
2+
3+
import com.github.imdmk.automessage.shared.validate.Validator;
4+
import eu.okaeri.configs.ConfigManager;
5+
import eu.okaeri.configs.exception.OkaeriException;
6+
import org.jetbrains.annotations.NotNull;
7+
8+
final class ConfigFactory {
9+
10+
<T extends ConfigSection> @NotNull T instantiate(@NotNull Class<T> type) {
11+
Validator.notNull(type, "type");
12+
13+
try {
14+
return ConfigManager.create(type);
15+
} catch (OkaeriException e) {
16+
throw new IllegalStateException(
17+
"Failed to instantiate config: " + type.getName(), e
18+
);
19+
}
20+
}
21+
}
22+
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package com.github.imdmk.automessage.config;
2+
3+
import com.github.imdmk.automessage.platform.logger.PluginLogger;
4+
import com.github.imdmk.automessage.shared.validate.Validator;
5+
import eu.okaeri.configs.exception.OkaeriException;
6+
import org.jetbrains.annotations.NotNull;
7+
8+
final class ConfigLifecycle {
9+
10+
private final PluginLogger logger;
11+
12+
ConfigLifecycle(@NotNull PluginLogger logger) {
13+
this.logger = Validator.notNull(logger, "logger");
14+
}
15+
16+
void initialize(@NotNull ConfigSection config) {
17+
config.saveDefaults();
18+
load(config);
19+
}
20+
21+
void load(@NotNull ConfigSection config) {
22+
try {
23+
config.load(true);
24+
} catch (OkaeriException e) {
25+
logger.error(e, "Failed to load config %s", config.getClass().getSimpleName());
26+
throw new ConfigAccessException(e);
27+
}
28+
}
29+
30+
void save(@NotNull ConfigSection config) {
31+
try {
32+
config.save();
33+
} catch (Exception e) {
34+
logger.error(e, "Failed to save config %s", config.getClass().getSimpleName());
35+
throw new ConfigAccessException(e);
36+
}
37+
}
38+
}
39+

automessage-core/src/main/java/com/github/imdmk/automessage/config/ConfigLoadException.java

Lines changed: 0 additions & 41 deletions
This file was deleted.

0 commit comments

Comments
 (0)