0

изменение инициализации Messages

This commit is contained in:
2021-10-08 10:13:20 +03:00
parent a0b81ab0a1
commit a7a1ca0efa

View File

@@ -1,6 +1,7 @@
package ghast; package ghast;
import lombok.experimental.UtilityClass; import lombok.AccessLevel;
import lombok.RequiredArgsConstructor;
import org.apache.commons.text.StringSubstitutor; import org.apache.commons.text.StringSubstitutor;
import java.io.BufferedReader; import java.io.BufferedReader;
@@ -9,57 +10,12 @@ import java.io.Reader;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.Properties; import java.util.Properties;
import java.util.stream.Collectors;
@UtilityClass @RequiredArgsConstructor(access = AccessLevel.PRIVATE)
public class Messages { public class Messages {
private final Map<String/*Key*/, String/*Template|Message*/> MESSAGES_MAP = new HashMap<>(); private final Map<String/*Key*/, String/*Template|Message*/> messagesMap;
//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}.
* <p>
* Формат строк: {@code key=value}
* </p>
*
* @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<String, String> messages) {
MESSAGES_MAP.clear();
MESSAGES_MAP.putAll(messages);
}
//endregion
//region Get messages //region Get messages
/** /**
@@ -70,7 +26,7 @@ public class Messages {
*/ */
public String get(String key) { public String get(String key) {
String keyLc = key.toLowerCase(); 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<String, Object> params) { public String get(String key, Map<String, Object> params) {
String keyLc = key.toLowerCase(); String keyLc = key.toLowerCase();
if (MESSAGES_MAP.containsKey(keyLc)) { if (messagesMap.containsKey(keyLc)) {
return format(MESSAGES_MAP.get(keyLc), params); return format(messagesMap.get(keyLc), params);
} else { } else {
return keyLc; return keyLc;
} }
@@ -100,8 +56,8 @@ public class Messages {
public String get(String key, Object... params) { public String get(String key, Object... params) {
String keyLc = key.toLowerCase(); String keyLc = key.toLowerCase();
if (MESSAGES_MAP.containsKey(keyLc)) { if (messagesMap.containsKey(keyLc)) {
return format(MESSAGES_MAP.get(keyLc), params); return format(messagesMap.get(keyLc), params);
} else { } else {
return keyLc; return keyLc;
} }
@@ -147,4 +103,51 @@ public class Messages {
return map; return map;
} }
/**
* Загрузка сообщений из {@link Properties}
*
* @param properties список сообщений и шаблонов
* @return экземпляр {@link Messages}
*/
public static Messages load(Properties properties) {
Map<String, String> map = properties.entrySet().stream().collect(Collectors.toMap(
entry -> (String) entry.getKey(),
entry -> (String) entry.getValue()
));
return new Messages(map);
}
/**
* Загрузка сообщений из {@link Reader}.
* <p>
* Формат строк: {@code key=value}
* </p>
*
* @param reader {@link Reader} со списоком сообщений и шаблонов
*/
public static Messages load(Reader reader) {
try(BufferedReader bufferedReader = new BufferedReader(reader)) {
Map<String, String> 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<String, String> messages) {
return new Messages(new HashMap<>(messages));
}
} }