MessageResource.java
package com.github.mygreen.cellformatter.lang;
import java.util.Collections;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
/**
* メッセージソースを管理するクラス。
* <p>複数のロケールのメッセージを管理する。
*
* @since 0.5
* @author T.TSUCHIE
*
*/
public class MessageResource {
/**
* 存在しないメッセージソースを示すクラス。
* <p>メッセージの追加はできない、読み込み専用のメッセージ。
*/
public static final MessageResource NULL_OBJECT = new MessageResource() {
{
this.messages = Collections.unmodifiableMap(new ConcurrentHashMap<String, String>());
}
@Override
public boolean isNullObject() {
return true;
}
};
/**
* メッセージのキャッシュされたデータセット
* <p>key = キー、value=メッセージ
* <p>読み込む度にキャッシュしていく。
*/
protected Map<String, String> messages;
public MessageResource() {
this.messages = new ConcurrentHashMap<>();
}
/**
* キーを指定してメッセージを取得する。
* @param key
* @return
*/
public String getMessage(final String key) {
return messages.get(key);
}
/**
* メッセージ定義中に含まれるキーを全て返す。
* @return
*/
public Set<String> getKeys() {
return messages.keySet();
}
/**
* キーとメッセージを指定して登録する。
* @param key
* @param message
*/
public void addMessage(final String key, final String message) {
messages.put(key, message);
}
/**
* 既存のメッセージソースを追加する
* @param resource
*/
public void addMessage(final MessageResource resource) {
this.messages.putAll(resource.messages);
}
/**
* 存在しないメッセージソースを示すかどうか。
* @return {@link #NULL_OBJECT}のインスタンスの場合、trueを返す。
*/
public boolean isNullObject() {
return false;
}
}