All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.nerd4j.csv.registry.ModelToCSVBinderFactoryRegistry Maven / Gradle / Ivy

There is a newer version: 1.2.0
Show newest version
/*
 * #%L
 * Nerd4j CSV
 * %%
 * Copyright (C) 2013 Nerd4j
 * %%
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as 
 * published by the Free Software Foundation, either version 3 of the 
 * License, or (at your option) any later version.
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Lesser Public License for more details.
 * 
 * You should have received a copy of the GNU General Lesser Public 
 * License along with this program.  If not, see
 * .
 * #L%
 */
package org.nerd4j.csv.registry;

import java.util.Map;

import org.nerd4j.csv.exception.CSVConfigurationException;
import org.nerd4j.csv.exception.ModelToCSVBindingException;
import org.nerd4j.csv.writer.binding.ArrayToCSVBinderFactory;
import org.nerd4j.csv.writer.binding.BeanToCSVBinderFactory;
import org.nerd4j.csv.writer.binding.MapToCSVBinderFactory;
import org.nerd4j.csv.writer.binding.ModelToCSVBinder;
import org.nerd4j.csv.writer.binding.ModelToCSVBinderFactory;


/**
 * Represents a registry of {@link ModelToCSVBinderFactory} instances.
 * 
 * 

* This registry is internally used to refer {@link ModelToCSVBinderFactory} * by type name. It is possible to register custom binder factories. *

* *

* The following {@link ModelToCSVBinder} factories are registered by default: *

    *
  • array : binds an {@link Object[]} to a CSV record
  • *
  • bean : binds a Java Bean to a CSV record
  • *
  • map : binds a {@link Map} to a CSV record
  • *
*

* * @author Nerd4j Team */ final class ModelToCSVBinderFactoryRegistry extends CSVAbstractRegistry> { /** * Default constructor. * */ public ModelToCSVBinderFactoryRegistry() { super(); this.registerDefaults(); } /* ***************** */ /* PRIVATE METHODS */ /* ***************** */ /** * Creates and registers the default entries and binders. * */ private void registerDefaults() { /* CSV to array binder factory provider. */ setProvider( "array", new CSVRegistryEntryProvider>() { @Override public ModelToCSVBinderFactory get( Map params ) { try{ return new ArrayToCSVBinderFactory(); }catch( ModelToCSVBindingException ex ) { throw new CSVConfigurationException( "Unable to build binder of type 'array'", ex ); } } }); /* CSV to bean binder factory provider. */ setProvider( "bean", new CSVRegistryEntryProvider>() { @Override @SuppressWarnings({ "rawtypes", "unchecked" }) public ModelToCSVBinderFactory get( Map params ) { final String beanType = params.get( "bean-class" ); if( beanType == null ) throw new CSVConfigurationException( "The bean-class is mandatory to build BeanToCSVBinderFactory" ); try{ final Class beanClass = Class.forName( beanType ); return new BeanToCSVBinderFactory( beanClass ); }catch( ClassNotFoundException ex ) { throw new CSVConfigurationException( "The value bean-class do not represent a canonical class name", ex ); }catch( ModelToCSVBindingException ex ) { throw new CSVConfigurationException( "Unable to build binder of type 'array'", ex ); } } }); /* CSV to map binder factory provider. */ setProvider( "map", new CSVRegistryEntryProvider>() { @Override public ModelToCSVBinderFactory get( Map params ) { try{ return new MapToCSVBinderFactory(); }catch( ModelToCSVBindingException ex ) { throw new CSVConfigurationException( "Unable to build binder of type 'map'", ex ); } } }); } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy