org.nerd4j.csv.registry.CSVToModelBinderFactoryRegistry Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of nerd4j-csv Show documentation
Show all versions of nerd4j-csv Show documentation
CSV manipulation library.
/*
* #%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.CSVToModelBindingException;
import org.nerd4j.csv.reader.binding.CSVToArrayBinderFactory;
import org.nerd4j.csv.reader.binding.CSVToBeanBinderFactory;
import org.nerd4j.csv.reader.binding.CSVToMapBinderFactory;
import org.nerd4j.csv.reader.binding.CSVToModelBinder;
import org.nerd4j.csv.reader.binding.CSVToModelBinderFactory;
/**
* Represents a registry of {@link CSVToModelBinderFactory} instances.
*
*
* This registry is internally used to refer {@link CSVToModelBinderFactory}
* by type name. It is possible to register custom binder factories.
*
*
*
* The following {@link CSVToModelBinder} factories are registered by default:
*
* - array : binds a CSV record to an {@link Object[]}
* - bean : binds a CSV record to a Java Bean
* - map : binds a CSV record to a {@link Map
}
*
*
*
* @author Nerd4j Team
*/
final class CSVToModelBinderFactoryRegistry extends CSVAbstractRegistry>
{
/**
* Default constructor.
*
*/
public CSVToModelBinderFactoryRegistry()
{
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 CSVToModelBinderFactory> get( Map params )
{
try{
return new CSVToArrayBinderFactory();
}catch( CSVToModelBindingException 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 CSVToModelBinderFactory> get( Map params )
{
final String beanType = params.get( "bean-class" );
if( beanType == null )
throw new CSVConfigurationException( "The bean-class is mandatory to build CSVToBeanBinderFactory" );
try{
final Class> beanClass = Class.forName( beanType );
return new CSVToBeanBinderFactory( beanClass );
}catch( ClassNotFoundException ex )
{
throw new CSVConfigurationException( "The value bean-class do not represent a canonical class name", ex );
}catch( CSVToModelBindingException ex )
{
throw new CSVConfigurationException( "Unable to build binder of type 'bean'", ex );
}
}
});
/* CSV to map binder factory provider. */
setProvider( "map", new CSVRegistryEntryProvider>()
{
@Override
public CSVToModelBinderFactory> get( Map params )
{
try{
return new CSVToMapBinderFactory();
}catch( CSVToModelBindingException ex )
{
throw new CSVConfigurationException( "Unable to build binder of type 'map'", ex );
}
}
});
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy