diff --git a/src/main/java/ghast/Messages.java b/src/main/java/ghast/Messages.java
index 9856f31..1f6e299 100644
--- a/src/main/java/ghast/Messages.java
+++ b/src/main/java/ghast/Messages.java
@@ -1,6 +1,7 @@
package ghast;
-import lombok.experimental.UtilityClass;
+import lombok.AccessLevel;
+import lombok.RequiredArgsConstructor;
import org.apache.commons.text.StringSubstitutor;
import java.io.BufferedReader;
@@ -9,57 +10,12 @@ import java.io.Reader;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
+import java.util.stream.Collectors;
-@UtilityClass
+@RequiredArgsConstructor(access = AccessLevel.PRIVATE)
public class Messages {
- private final Map MESSAGES_MAP = new HashMap<>();
-
- //region Load messages
-
- /**
- * Загрузка сообщений из {@link Properties}
- *
- * @param properties список сообщений и шаблонов
- */
- public void load(Properties properties) {
- MESSAGES_MAP.clear();
- properties.forEach((key, value) -> MESSAGES_MAP.put(key.toString().trim().toLowerCase(), value.toString().trim()));
- }
-
- /**
- * Загрузка сообщений из {@link Reader}.
- *
- * Формат строк: {@code key=value}
- *
- *
- * @param reader {@link Reader} со списоком сообщений и шаблонов
- */
- public void load(Reader reader) {
- MESSAGES_MAP.clear();
- try {
- BufferedReader bufferedReader = new BufferedReader(reader);
- String line;
- while ((line = bufferedReader.readLine()) != null) {
- String[] split = line.split("=", 2);
- MESSAGES_MAP.put(split[0].trim().toLowerCase(), split[1].trim());
- }
- } catch (IOException e) {
- //TODO заменить на специализированный Exception
- throw new RuntimeException("Error load messages: " + e.getMessage(), e);
- }
- }
-
- /**
- * Загрузка сообщений из {@link Map}<{@link String}, {@link String}>.
- *
- * @param messages список сообщений и шаблонов
- */
- public void load(Map messages) {
- MESSAGES_MAP.clear();
- MESSAGES_MAP.putAll(messages);
- }
- //endregion
+ private final Map messagesMap;
//region Get messages
/**
@@ -70,7 +26,7 @@ public class Messages {
*/
public String get(String key) {
String keyLc = key.toLowerCase();
- return MESSAGES_MAP.getOrDefault(keyLc, keyLc);
+ return messagesMap.getOrDefault(keyLc, keyLc);
}
/**
@@ -83,8 +39,8 @@ public class Messages {
public String get(String key, Map params) {
String keyLc = key.toLowerCase();
- if (MESSAGES_MAP.containsKey(keyLc)) {
- return format(MESSAGES_MAP.get(keyLc), params);
+ if (messagesMap.containsKey(keyLc)) {
+ return format(messagesMap.get(keyLc), params);
} else {
return keyLc;
}
@@ -100,8 +56,8 @@ public class Messages {
public String get(String key, Object... params) {
String keyLc = key.toLowerCase();
- if (MESSAGES_MAP.containsKey(keyLc)) {
- return format(MESSAGES_MAP.get(keyLc), params);
+ if (messagesMap.containsKey(keyLc)) {
+ return format(messagesMap.get(keyLc), params);
} else {
return keyLc;
}
@@ -147,4 +103,51 @@ public class Messages {
return map;
}
+
+ /**
+ * Загрузка сообщений из {@link Properties}
+ *
+ * @param properties список сообщений и шаблонов
+ * @return экземпляр {@link Messages}
+ */
+ public static Messages load(Properties properties) {
+ Map map = properties.entrySet().stream().collect(Collectors.toMap(
+ entry -> (String) entry.getKey(),
+ entry -> (String) entry.getValue()
+ ));
+
+ return new Messages(map);
+ }
+
+ /**
+ * Загрузка сообщений из {@link Reader}.
+ *
+ * Формат строк: {@code key=value}
+ *
+ *
+ * @param reader {@link Reader} со списоком сообщений и шаблонов
+ */
+ public static Messages load(Reader reader) {
+ try(BufferedReader bufferedReader = new BufferedReader(reader)) {
+ Map map = bufferedReader.lines()
+ .map(line -> line.split("=", 2))
+ .collect(Collectors.toMap(
+ pair -> pair[0].trim().toLowerCase(),
+ pair -> pair[1].trim()
+ ));
+ return new Messages(map);
+ } catch (IOException e) {
+ //TODO заменить на специализированный Exception
+ throw new RuntimeException("Error load messages: " + e.getMessage(), e);
+ }
+ }
+
+ /**
+ * Загрузка сообщений из {@link Map}<{@link String}, {@link String}>.
+ *
+ * @param messages список сообщений и шаблонов
+ */
+ public static Messages load(Map messages) {
+ return new Messages(new HashMap<>(messages));
+ }
}