001package de.cuioss.test.jsf.generator; 002 003import static de.cuioss.tools.collect.CollectionLiterals.immutableList; 004 005import java.math.BigDecimal; 006import java.math.BigInteger; 007import java.util.Date; 008import java.util.List; 009import java.util.stream.Collectors; 010 011import javax.faces.convert.BigDecimalConverter; 012import javax.faces.convert.BigIntegerConverter; 013import javax.faces.convert.BooleanConverter; 014import javax.faces.convert.ByteConverter; 015import javax.faces.convert.CharacterConverter; 016import javax.faces.convert.Converter; 017import javax.faces.convert.DateTimeConverter; 018import javax.faces.convert.DoubleConverter; 019import javax.faces.convert.EnumConverter; 020import javax.faces.convert.FloatConverter; 021import javax.faces.convert.IntegerConverter; 022import javax.faces.convert.LongConverter; 023import javax.faces.convert.NumberConverter; 024import javax.faces.convert.ShortConverter; 025 026import de.cuioss.test.generator.Generators; 027import de.cuioss.test.generator.TypedGenerator; 028import de.cuioss.test.jsf.config.ComponentConfigurator; 029 030/** 031 * Hybrid class that acts as an {@link TypedGenerator} and 032 * {@link ComponentConfigurator}. 033 * 034 * @author Oliver Wolff 035 */ 036@SuppressWarnings("rawtypes") 037public class JsfProvidedConverter implements TypedGenerator<Class> { 038 039 /** Defines all converter types provided by JSF. */ 040 @SuppressWarnings("java:S2386") // owolff: false positive -> immutableList 041 public static final List<ConverterDescriptor> JSF_CONVERTER = immutableList( 042 new ConverterDescriptor(BigDecimalConverter.class, BigDecimal.class, BigDecimalConverter.CONVERTER_ID), 043 new ConverterDescriptor(BigIntegerConverter.class, BigInteger.class, BigIntegerConverter.CONVERTER_ID), 044 new ConverterDescriptor(BooleanConverter.class, Boolean.class, BooleanConverter.CONVERTER_ID), 045 new ConverterDescriptor(ByteConverter.class, Byte.class, ByteConverter.CONVERTER_ID), 046 new ConverterDescriptor(CharacterConverter.class, Character.class, CharacterConverter.CONVERTER_ID), 047 new ConverterDescriptor(DateTimeConverter.class, Date.class, DateTimeConverter.CONVERTER_ID), 048 new ConverterDescriptor(DoubleConverter.class, Double.class, DoubleConverter.CONVERTER_ID), 049 new ConverterDescriptor(EnumConverter.class, Enum.class, EnumConverter.CONVERTER_ID), 050 new ConverterDescriptor(FloatConverter.class, Float.class, FloatConverter.CONVERTER_ID), 051 new ConverterDescriptor(IntegerConverter.class, Integer.class, IntegerConverter.CONVERTER_ID), 052 new ConverterDescriptor(LongConverter.class, Long.class, LongConverter.CONVERTER_ID), 053 new ConverterDescriptor(NumberConverter.class, Number.class, NumberConverter.CONVERTER_ID), 054 new ConverterDescriptor(ShortConverter.class, Short.class, ShortConverter.CONVERTER_ID)); 055 056 /** Defines a generator for all converter types provided by JSF. */ 057 public static final TypedGenerator<ConverterDescriptor> CONVERTER_CLASS_GERNERATOR = Generators 058 .fixedValues(JSF_CONVERTER); 059 060 /** A generator for every id of registered generator. */ 061 public static final TypedGenerator<String> CONVERTER_ID_GENERATOR = Generators 062 .fixedValues(JSF_CONVERTER.stream().map(ConverterDescriptor::getConverterId).collect(Collectors.toList())); 063 064 /** A generator for a subset of types a generator is registered as default. */ 065 public static final TypedGenerator<Class<?>> TARGET_TYPE_GENERATOR = Generators 066 .fixedValues(immutableList(Integer.class, Double.class, Float.class, Boolean.class, BigInteger.class)); 067 068 @SuppressWarnings("unchecked") 069 @Override 070 public Class<Converter> next() { 071 return (Class<Converter>) CONVERTER_CLASS_GERNERATOR.next().getConverterClass(); 072 } 073 074 @Override 075 public Class<Class> getType() { 076 return Class.class; 077 } 078 079}