Skip to content

Commit 3b281ff

Browse files
committed
add message utility class
1 parent fa7d066 commit 3b281ff

3 files changed

Lines changed: 100 additions & 0 deletions

File tree

core/src/main/java/net/j4c0b3y/api/config/ConfigHandler.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import lombok.Getter;
1313
import lombok.Setter;
1414
import net.j4c0b3y.api.config.exception.MissingProviderException;
15+
import net.j4c0b3y.api.config.message.Message;
1516
import net.j4c0b3y.api.config.provider.TypeProvider;
1617
import net.j4c0b3y.api.config.provider.impl.*;
1718
import net.j4c0b3y.api.config.resolver.TypeResolver;
@@ -122,6 +123,7 @@ public ConfigHandler(Logger logger) {
122123
bind(short.class, new NumberProvider<>(Short::parseShort));
123124

124125
bind(boolean.class, new BooleanProvider());
126+
bind(Message.class, new MessageProvider());
125127
}
126128

127129
/**
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package net.j4c0b3y.api.config.message;
2+
3+
import lombok.Getter;
4+
5+
import java.util.*;
6+
import java.util.function.Consumer;
7+
import java.util.function.Function;
8+
import java.util.function.Predicate;
9+
10+
/**
11+
* @author J4C0B3Y
12+
* @version ConfigAPI
13+
* @since 9/03/2025
14+
*/
15+
@Getter
16+
public class Message {
17+
private final List<String> lines;
18+
private final boolean initial;
19+
20+
private Message(Collection<String> lines, boolean initial) {
21+
this.lines = new ArrayList<>(lines);
22+
this.initial = initial;
23+
}
24+
25+
public static Message of(Collection<String> lines) {
26+
return new Message(lines, true);
27+
}
28+
29+
public static Message of(String... lines) {
30+
return new Message(Arrays.asList(lines), true);
31+
}
32+
33+
private Message supply(Consumer<List<String>> consumer) {
34+
Message message = initial ? new Message(lines, false) : this;
35+
consumer.accept(message.lines);
36+
return message;
37+
}
38+
39+
public Message map(Function<String, String> mapper) {
40+
return supply(lines -> lines.replaceAll(mapper::apply));
41+
}
42+
43+
public Message filter(Predicate<String> filter) {
44+
return supply(lines -> lines.removeIf(filter));
45+
}
46+
47+
public Message replace(String target, String replacement) {
48+
return map(line -> line.replaceAll(target, replacement));
49+
}
50+
51+
public void send(Consumer<String> consumer) {
52+
this.lines.forEach(consumer);
53+
}
54+
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package net.j4c0b3y.api.config.provider.impl;
2+
3+
import net.j4c0b3y.api.config.message.Message;
4+
import net.j4c0b3y.api.config.provider.TypeProvider;
5+
import net.j4c0b3y.api.config.provider.context.LoadContext;
6+
import net.j4c0b3y.api.config.provider.context.SaveContext;
7+
8+
import java.util.ArrayList;
9+
import java.util.Collection;
10+
import java.util.List;
11+
12+
/**
13+
* @author J4C0B3Y
14+
* @version ConfigAPI
15+
* @since 9/03/2025
16+
*/
17+
public class MessageProvider implements TypeProvider<Message> {
18+
19+
@Override
20+
public Message load(LoadContext context) {
21+
if (context.getObject() instanceof Collection) {
22+
List<String> parsed = new ArrayList<>();
23+
24+
for (Object object : (Collection<?>) context.getObject()) {
25+
parsed.add(String.valueOf(object));
26+
}
27+
28+
return Message.of(parsed);
29+
}
30+
31+
return Message.of(String.valueOf(context.getObject()));
32+
}
33+
34+
@Override
35+
public Object save(SaveContext<Message> context) {
36+
Message message = context.getObject();
37+
38+
if (message.getLines().size() == 1) {
39+
return message.getLines().get(0);
40+
}
41+
42+
return message.getLines();
43+
}
44+
}

0 commit comments

Comments
 (0)