@Override public EnumStrategies createCopy() { return new EnumStrategies(); } }
private static <E extends Enum<E>> Optional<ColumnMapper<?>> makeEnumArgument(QualifiedType<E> givenType, Class<E> enumClass, ConfigRegistry config) { boolean byName = EnumStrategy.BY_NAME == config.get(EnumStrategies.class).findStrategy(givenType); return Optional.of(byName ? EnumMapper.byName(enumClass) : EnumMapper.byOrdinal(enumClass)); } }
/** * Determines which strategy is to be used for a given {@link QualifiedType}, falling back to * reading strategy annotations on the source class and/or using the configured default. * * @param <E> the {@link Enum} type * @param type qualified type to derive a strategy from * @return the strategy by which this enum should be handled */ public <E extends Enum<E>> EnumStrategy findStrategy(QualifiedType<E> type) { Class<?> erasedType = getErasedType(type.getType()); return JdbiOptionals.findFirstPresent( () -> doFindStrategy(type), () -> doFindStrategy(QualifiedType.of(erasedType).with(getQualifiers(erasedType))) ).orElseGet(() -> registry.get(Enums.class).getDefaultStrategy()); }
private static <E extends Enum<E>> Optional<Argument> makeEnumArgument(QualifiedType<E> givenType, E value, ConfigRegistry config) { boolean byName = EnumStrategy.BY_NAME == config.get(EnumStrategies.class).findStrategy(givenType); return byName ? byName(value, config) : byOrdinal(value, config); }
@Test public void testConflictingSourceAnnotations() { assertThatThrownBy(() -> db.getJdbi().getConfig(EnumStrategies.class).findStrategy(QualifiedType.of(BiPolar.class))) .isInstanceOf(IllegalArgumentException.class); }
@Test public void testConflictingQualifiers() { QualifiedType<RetentionPolicy> type = QualifiedType.of(RetentionPolicy.class).with(EnumByName.class, EnumByOrdinal.class); assertThatThrownBy(() -> db.getJdbi().getConfig(EnumStrategies.class).findStrategy(type)) .isInstanceOf(IllegalArgumentException.class); }