package org.concord.otrunk.view; import java.util.ArrayList; import java.util.HashMap; import org.concord.framework.otrunk.view.OTView; import org.concord.framework.otrunk.view.OTViewConversionService; import org.concord.framework.otrunk.view.OTViewConverter; import org.concord.framework.otrunk.view.OTViewFactory; public class OTViewConversionServiceImpl implements OTViewConversionService { HashMap<Class<?>, ArrayList<OTViewConverter>> map = new HashMap<Class<?>, ArrayList<OTViewConverter>>(); public void addConverter(OTViewConverter converter) { Class<?> toType = converter.getToType(); ArrayList<OTViewConverter> converters = map.get(toType); if(converters == null){ converters = new ArrayList<OTViewConverter>(); map.put(toType, converters); } converters.add(converter); } protected OTViewConverter getConverter(OTView originalView, Class<? extends OTView> outputClass){ ArrayList<OTViewConverter> converters = map.get(outputClass); if(converters == null){ return null; } for (OTViewConverter viewConverter : converters) { if(viewConverter.getFromType().isInstance(originalView)){ return viewConverter; } } return null; } public boolean canConvert(OTView originalView, Class<? extends OTView> outputClass) { return getConverter(originalView, outputClass) != null; } @SuppressWarnings("unchecked") public <T extends OTView> T convert(OTView originalView, Class<T> outputClass, OTViewFactory viewFactory, org.concord.framework.otrunk.view.OTViewEntry viewEntry) { OTViewConverter converter = getConverter(originalView, outputClass); if(converter == null){ return null; } return (T) converter.convert(originalView, viewFactory, viewEntry); } }