package pl.net.bluesoft.rnd.pt.ext.report.util.dict;
import pl.net.bluesoft.rnd.processtool.ProcessToolContext;
import pl.net.bluesoft.rnd.processtool.dict.ProcessDictionaryRegistry;
import pl.net.bluesoft.rnd.processtool.model.ProcessInstance;
import pl.net.bluesoft.rnd.processtool.model.config.ProcessDefinitionConfig;
import pl.net.bluesoft.rnd.processtool.model.dict.ProcessDictionary;
import pl.net.bluesoft.rnd.processtool.model.dict.ProcessDictionaryItem;
import java.util.HashMap;
import java.util.Map;
/**
* DB based implementation of DictionaryHelper.
*/
public class DictionaryHelperImpl implements DictionaryHelper {
private static final String BLANK = "";
protected ProcessDictionaryRegistry processDictionaryRegistry;
protected ProcessDefinitionConfig processDefinitionConfig;
protected Map<String, Map<String, String>> dictionaryMap;
@Override
public synchronized String getDictionaryValue(String dictionaryName, String languageCode, String key) {
if (dictionaryName != null && languageCode != null && key != null) {
if (!dictionaryMap.containsKey(dictionaryKey(languageCode, dictionaryName)))
addDictionary(languageCode, dictionaryName);
if (dictionaryMap.containsKey(dictionaryKey(languageCode, dictionaryName))) {
Map<String, String> dictionary = dictionaryMap.get(dictionaryKey(languageCode, dictionaryName));
if (dictionary.containsKey(key))
return dictionary.get(key);
}
}
return BLANK;
}
private void addDictionary(String languageCode, String dictionaryName) {
ProcessDictionary dict = processDictionaryRegistry.getSpecificOrDefaultOrGlobalDictionary(
processDefinitionConfig, "db", dictionaryName, languageCode);
if (dict != null) {
Map<String, String> dictionary = new HashMap<String, String>();
for (Object item : dict.items()) {
ProcessDictionaryItem pdItem = (ProcessDictionaryItem) item;
dictionary.put(pdItem.getKey().toString(), pdItem.getValueForCurrentDate().toString());
}
dictionaryMap.put(dictionaryKey(languageCode, dictionaryName), dictionary);
}
}
public DictionaryHelperImpl(ProcessInstance processInstance) {
init(processInstance);
}
private void init(ProcessInstance processInstance) {
ProcessToolContext ctx = ProcessToolContext.Util.getThreadProcessToolContext();
processDictionaryRegistry = ctx.getProcessDictionaryRegistry();
processDefinitionConfig = processInstance.getDefinition();
dictionaryMap = new HashMap<String, Map<String, String>>();
}
protected String dictionaryKey(String languageCode, String dictionaryName) {
return languageCode.concat("_").concat(dictionaryName);
}
}