package org.squirrelframework.foundation.fsm.impl;
import com.google.common.collect.Maps;
import org.squirrelframework.foundation.component.SquirrelProvider;
import org.squirrelframework.foundation.fsm.Converter;
import org.squirrelframework.foundation.fsm.ConverterProvider;
import org.squirrelframework.foundation.fsm.GeneralConverter;
import java.util.Map;
public class ConverterProviderImpl implements ConverterProvider {
private Map<Class<?>, Converter<?>> converterRegistry = Maps.newHashMap();
@Override
public void register(Class<?> clazz, Class<? extends Converter<?>> converterClass) {
Converter<?> converter = SquirrelProvider.getInstance().newInstance(converterClass);
register(clazz, converter);
}
@Override
public void register(Class<?> clazz, Converter<?> converter) {
converterRegistry.put(clazz, converter);
}
@Override
public void unregister(Class<?> clazz) {
converterRegistry.remove(clazz);
}
@SuppressWarnings({ "unchecked", "rawtypes" })
@Override
public <T> Converter<T> getConverter(Class<T> clazz) {
Converter<T> converter = (Converter<T>)converterRegistry.get(clazz);
if(converter==null) {
converter = new GeneralConverter(clazz);
}
return converter;
}
@Override
public void clearRegistry() {
converterRegistry.clear();
}
}