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

org.unix4j.convert.DefaultConverterRegistry Maven / Gradle / Ivy

There is a newer version: 0.6
Show newest version
package org.unix4j.convert;

import java.io.File;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Pattern;

import org.unix4j.convert.EnumConverters.StringToEnumConverter;

/**
 * Default implementation for {@code ConverterRegistry} storing the converters
 * per value type in a {@link Map}. Converters for enums are created on the fly.
 */
public class DefaultConverterRegistry implements ConverterRegistry {

	private final Map, ValueConverter> converterByType = new HashMap, ValueConverter>();
	
	public DefaultConverterRegistry() {
		initConverters();
	}
	
	protected void initConverters() {
		registerValueConverter(Character.class, CharacterConverters.DEFAULT);
		registerValueConverter(char.class, CharacterConverters.DEFAULT);
		registerValueConverter(Integer.class, IntegerConverters.DEFAULT);
		registerValueConverter(int.class, IntegerConverters.DEFAULT);
		registerValueConverter(Long.class, LongConverters.DEFAULT);
		registerValueConverter(long.class, LongConverters.DEFAULT);
		registerValueConverter(String.class, StringConverters.DEFAULT);
		registerValueConverter(String[].class, StringArrayConverters.FLATTEN);
		registerValueConverter(File[].class, FileArrayConverters.FLATTEN);
		registerValueConverter(Object[].class, ArrayConverters.FLATTEN);
		registerValueConverter(Date.class, DateConverters.DEFAULT);
		registerValueConverter(File.class, FileConverters.DEFAULT);
		registerValueConverter(InputStream.class, InputStreamConverters.DEFAULT);
		registerValueConverter(OutputStream.class, OutputStreamConverters.DEFAULT);
		registerValueConverter(URL.class, URLConverters.DEFAULT);
		registerValueConverter(Pattern.class, PatternConverters.DEFAULT);
	}

	@Override
	public  ValueConverter getValueConverterFor(Class type) {
		@SuppressWarnings("unchecked")
		final ValueConverter converter = (ValueConverter) converterByType.get(type);
		if (converter != null) {
			return converter;
		}
		return getEnumConverterFor(type);
	}
	
	private  ValueConverter getEnumConverterFor(Class type) {
		if (type.isEnum()) {
			@SuppressWarnings({ "rawtypes", "unchecked" })
			final ValueConverter enumConverter = new StringToEnumConverter(type);
			return enumConverter;
		}
		return null;
	}
	
	public  void registerValueConverter(Class type, ValueConverter converter) {
		converterByType.put(type, converter);
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy