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.CustomDictDescription;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import static pl.net.bluesoft.util.lang.Classes.getProperty;
/**
* User: POlszewski
* Date: 2012-01-02
* Time: 23:26:25
*/
public class DerivedDictEntryProvider implements DictEntryProvider {
private final CustomDictDescription dictDesc;
private Map<String, Object> entries;
public DerivedDictEntryProvider(CustomDictDescription dictDesc) {
this.dictDesc = dictDesc;
}
@Override
public Map getEntries() {
return getEntries(null);
}
@Override
public Map<String, ?> getEntries(DictEntryFilter entryFilter) {
if (entryFilter != null) {
Map<String, Object> result = new HashMap();
for (Map.Entry<String, ?> e : entries.entrySet()) {
if (entryFilter.filter(e.getValue())) {
result.put(e.getKey(), e.getValue());
}
}
return result;
}
return entries;
}
@Override
public void prepareEntries(DictEntryProviderParams params) {
if (entries != null) {
return;
}
entries = new HashMap<String, Object>();
for (Object entry : params.getDictMapper().getEntries(dictDesc.getBaseDictName()).values()) {
Object key = getProperty(entry, dictDesc.getKeyProperty());
Object value = dictDesc.getValueProperty() != null ? getProperty(entry, dictDesc.getValueProperty()) : key;
entries.put(key != null ? String.valueOf(key) : null, value);
}
}
@Override
public Map<String, ?> getKeyValueMap() {
return getKeyValueMap(null);
}
@Override
public Map<String, ?> getKeyValueMap(DictEntryFilter entryFilter) {
return getEntries(entryFilter);
}
@Override
public Object getValue(String key) {
return getKeyValueMap().get(key);
}
@Override
public Object getEntryForDate(String key, Date date) {
throw new UnsupportedOperationException();
}
}