package pl.net.bluesoft.rnd.processtool.dict;
import pl.net.bluesoft.rnd.processtool.model.config.ProcessDefinitionConfig;
import pl.net.bluesoft.rnd.processtool.model.dict.ProcessDictionary;
import java.util.HashMap;
import java.util.Map;
public class ProcessDictionaryRegistry {
private static final EmptyDictionary EMPTY_DICTIONARY = new EmptyDictionary();
private class RegisteredDictionaryHolder<T> {
protected Map<String, T> dictionaries = new HashMap<String, T>();
public T getDictionaryProvider(String providerId) {
return dictionaries.get(providerId);
}
public void addDictionaryProvider(String providerId, T provider) {
dictionaries.put(providerId, provider);
}
public void setDictionaries(Map<String, T> dictionaries) {
this.dictionaries = dictionaries;
}
}
protected RegisteredDictionaryHolder<ProcessDictionaryProvider> processDictionaryHolder =
new RegisteredDictionaryHolder<ProcessDictionaryProvider>();
protected RegisteredDictionaryHolder<GlobalDictionaryProvider> globalDictionaryHolder =
new RegisteredDictionaryHolder<GlobalDictionaryProvider>();
public ProcessDictionary getSpecificOrDefaultOrGlobalDictionary(ProcessDefinitionConfig definition,
String providerId, String dictionaryId, String languageCode) {
ProcessDictionary dictionary = getSpecificOrDefaultProcessDictionary(definition, providerId, dictionaryId, languageCode);
if (dictionary == null) {
dictionary = getSpecificOrDefaultGlobalDictionary(providerId, dictionaryId, languageCode);
}
return dictionary;
}
public ProcessDictionary getSpecificOrDefaultProcessDictionary(ProcessDefinitionConfig definition,
String providerId, String dictionaryId, String languageCode) {
ProcessDictionary dictionary = getSpecificProcessDictionary(definition, providerId, dictionaryId, languageCode);
if (dictionary == null) {
dictionary = getDefaultProcessDictionary(definition, providerId, dictionaryId);
}
return dictionary;
}
public ProcessDictionary getSpecificProcessDictionary(ProcessDefinitionConfig definition, String providerId, String dictionaryId,
String languageCode) {
ProcessDictionaryProvider provider = processDictionaryHolder.getDictionaryProvider(providerId);
return provider != null ? provider.fetchProcessDictionary(definition, dictionaryId, languageCode) : null;
}
public ProcessDictionary getDefaultProcessDictionary(ProcessDefinitionConfig definition, String providerId, String dictionaryId) {
ProcessDictionaryProvider provider = processDictionaryHolder.getDictionaryProvider(providerId);
return provider != null ? provider.fetchDefaultProcessDictionary(definition, dictionaryId) : null;
}
public ProcessDictionaryProvider getProcessDictionaryProvider(String providerId) {
return processDictionaryHolder.getDictionaryProvider(providerId);
}
public void addProcessDictionaryProvider(String providerId, ProcessDictionaryProvider provider) {
processDictionaryHolder.addDictionaryProvider(providerId, provider);
}
public ProcessDictionary getSpecificOrDefaultGlobalDictionary(String providerId, String dictionaryId, String languageCode) {
ProcessDictionary dictionary = getSpecificGlobalDictionary(providerId, dictionaryId, languageCode);
if (dictionary == null) {
dictionary = getDefaultGlobalDictionary(providerId, dictionaryId);
}
return dictionary;
}
public ProcessDictionary getSpecificGlobalDictionary(String providerId, String dictionaryId, String languageCode) {
GlobalDictionaryProvider provider = globalDictionaryHolder.getDictionaryProvider(providerId);
return provider != null ? provider.fetchGlobalDictionary(dictionaryId, languageCode) : null;
}
public ProcessDictionary getDefaultGlobalDictionary(String providerId, String dictionaryId) {
GlobalDictionaryProvider provider = globalDictionaryHolder.getDictionaryProvider(providerId);
return provider != null ? provider.fetchDefaultGlobalDictionary(dictionaryId) : null;
}
public GlobalDictionaryProvider getGlobalDictionaryProvider(String providerId) {
return globalDictionaryHolder.getDictionaryProvider(providerId);
}
public void addGlobalDictionaryProvider(String providerId, GlobalDictionaryProvider provider) {
globalDictionaryHolder.addDictionaryProvider(providerId, provider);
}
public ProcessDictionary getEmptyDictionary() {
return EMPTY_DICTIONARY;
}
}