package pl.net.bluesoft.rnd.processtool.dict.mapping.providers;
import pl.net.bluesoft.rnd.processtool.dict.mapping.DictEntryFilter;
import pl.net.bluesoft.rnd.processtool.dict.mapping.metadata.dict.DictDescription;
import java.util.Date;
import java.util.Map;
import static pl.net.bluesoft.util.lang.Classes.copyProperties;
/**
* User: POlszewski
* Date: 2012-06-15
* Time: 15:58
*/
public class LazyLoadDictEntryProvider implements DictEntryProvider {
private final DictDescription dictDescription;
private DictEntryProvider dictEntryProvider;
private DictEntryProviderParams params;
public LazyLoadDictEntryProvider(DictDescription dictDescription) {
this.dictDescription = dictDescription;
}
@Override
public Map getEntries() {
return getDictEntryProvider().getEntries();
}
@Override
public Map getEntries(DictEntryFilter entryFilter) {
return getDictEntryProvider().getEntries(entryFilter);
}
@Override
public Map<String, ?> getKeyValueMap() {
return getDictEntryProvider().getKeyValueMap();
}
@Override
public Map<String, ?> getKeyValueMap(DictEntryFilter entryFilter) {
return getDictEntryProvider().getKeyValueMap(entryFilter);
}
@Override
public Object getValue(String key) {
return getDictEntryProvider().getValue(key);
}
@Override
public Object getEntryForDate(String key, Date date) {
return getDictEntryProvider().getEntryForDate(key, date);
}
@Override
public void prepareEntries(DictEntryProviderParams params) {
this.params = new DictEntryProviderParams();
copyProperties(this.params, params);
}
private DictEntryProvider getDictEntryProvider() {
if (dictEntryProvider == null) {
dictEntryProvider = dictDescription.createDictEntryProvider();
dictEntryProvider.prepareEntries(params);
}
return dictEntryProvider;
}
}