package com.google.code.joto.value2java;
import com.google.code.joto.JotoConfig;
import com.google.code.joto.ui.JotoContextFacadePanelSpringFactoryBean;
import com.google.code.joto.value2java.VHToStmtConverterLookupRegister.VHToStmtConverterLookupRegisterEntry;
import com.google.code.joto.value2java.converters.FixedStringVHToStmtConverter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.FactoryBean;
import java.util.HashMap;
import java.util.Map;
/**
* Spring helper class to register a VHToStmtConverter into the config lookup
*
*/
public class VHToStmtConverterLookupRegister implements FactoryBean<VHToStmtConverterLookupRegisterEntry> {
private static Logger log = LoggerFactory.getLogger(JotoContextFacadePanelSpringFactoryBean.class);
public static class VHToStmtConverterLookupRegisterEntry {
private JotoConfig config;
private Map<Class<?>,FixedStringVHToStmtConverter> classNameToFixedStringConverters;
public VHToStmtConverterLookupRegisterEntry(JotoConfig config, Map<Class<?>, FixedStringVHToStmtConverter> classNameToFixedStringConverters) {
super();
this.config = config;
this.classNameToFixedStringConverters = classNameToFixedStringConverters;
}
public JotoConfig getConfig() {
return config;
}
public Map<Class<?>, FixedStringVHToStmtConverter> getClassNameToFixedStringConverters() {
return classNameToFixedStringConverters;
}
}
/**
* optional injected by spring
*/
private JotoConfig config;
private Map<String,String> classNameToFixedStrings = new HashMap<String,String>();
private VHToStmtConverterLookupRegisterEntry resultBean;
// ------------------------------------------------------------------------
public VHToStmtConverterLookupRegister() {
}
// ------------------------------------------------------------------------
@Override
public VHToStmtConverterLookupRegisterEntry getObject() throws Exception {
if (resultBean != null) {
Map<Class<?>,FixedStringVHToStmtConverter> resConverters = new HashMap<Class<?>,FixedStringVHToStmtConverter>();
for(Map.Entry<String,String> e : classNameToFixedStrings.entrySet()) {
String className = e.getKey();
Class<?> clss = null;
try {
clss = Class.forName(className);
} catch(Exception ex) {
log.error("Failed to get class '" + className + "' => no register fixed string converter!");
}
if (clss != null) {
FixedStringVHToStmtConverter converter = new FixedStringVHToStmtConverter();
resConverters.put(clss, converter);
config.getVhToStmtConverterLookup().registerConverter(converter, 100);
}
}
resultBean = new VHToStmtConverterLookupRegisterEntry(config, resConverters);
}
return resultBean;
}
@Override
public Class<?> getObjectType() {
return VHToStmtConverterLookupRegisterEntry.class;
}
@Override
public boolean isSingleton() {
return true;
}
// ------------------------------------------------------------------------
public JotoConfig getConfig() {
return config;
}
public void setConfig(JotoConfig config) {
this.config = config;
}
public Map<String, String> getClassNameToFixedStrings() {
return classNameToFixedStrings;
}
public void setClassNameToFixedStrings(Map<String, String> p) {
this.classNameToFixedStrings = p;
}
}