package com.venky.swf.db.model.io; import java.util.HashMap; import java.util.Map; import com.venky.swf.db.model.Model; import com.venky.swf.integration.FormatHelper; public class ModelIOFactory { private static Map<Class<?>, ModelReaderFactory<?>> readerfactories = new HashMap<Class<?>,ModelReaderFactory<?>>(); private static Map<Class<?>, ModelWriterFactory<?>> writerfactories = new HashMap<Class<?>,ModelWriterFactory<?>>(); public static <T> void registerIOFactories(Class<T> formatClass, ModelReaderFactory<T>readerFactory, ModelWriterFactory<T> writerFactory){ readerfactories.put(formatClass, readerFactory); writerfactories.put(formatClass,writerFactory); } @SuppressWarnings("unchecked") public static <M extends Model, T> ModelReader<M, T> getReader(Class<M> modelClass, Class<T> formatClass){ ModelReader<M, T> reader = null; ModelReaderFactory<T> readerFactory = (ModelReaderFactory<T>) readerfactories.get(formatClass); if (readerFactory != null){ reader = (ModelReader<M, T>) readerFactory.createModelReader(modelClass); } if (reader == null){ throw new UnsupportedMimeTypeException("No Reader available for Mimetype:" + FormatHelper.getMimeType(formatClass).toString()); } return reader; } @SuppressWarnings("unchecked") public static <M extends Model,T> ModelWriter<M,T> getWriter(Class<M> modelClass, Class<T> formatClass){ ModelWriter<M, T> writer = null ; ModelWriterFactory<T> writerFactory = (ModelWriterFactory<T>) writerfactories.get(formatClass); if (writerFactory != null){ writer = (ModelWriter<M, T>)writerFactory.createModelWriter(modelClass); } if (writer == null){ throw new UnsupportedMimeTypeException("No Writer available for Mimetype:" + FormatHelper.getMimeType(formatClass).toString()); } return writer; } public static class UnsupportedMimeTypeException extends RuntimeException { private static final long serialVersionUID = 5295876737650879813L; public UnsupportedMimeTypeException(String message){ super(message); } } }