@Override public BeanHolder<B> build(BridgeBuildContext buildContext) { BeanProvider beanProvider = buildContext.getBeanProvider(); return beanReference.getBean( beanProvider ); } }
private <T> Optional<BeanReference<? extends T>> toBeanReference(Class<T> expectedType, Class<?> undefinedTypeMarker, Class<? extends T> type, String name) { String cleanedUpName = name.isEmpty() ? null : name; Class<? extends T> cleanedUpType = undefinedTypeMarker.equals( type ) ? null : type; if ( cleanedUpName == null && cleanedUpType == null ) { return Optional.empty(); } else { Class<? extends T> defaultedType = cleanedUpType == null ? expectedType : cleanedUpType; return Optional.of( BeanReference.of( defaultedType, cleanedUpName ) ); } }
@Override @SuppressWarnings("unchecked") // Checked using reflection public <U> BeanReference<? extends U> asSubTypeOf(Class<U> expectedType) { if ( expectedType.isAssignableFrom( type ) ) { return (BeanReference<? extends U>) this; } else { return BeanReference.super.asSubTypeOf( expectedType ); } }
public static <T> BeanReference<? extends T> convertBeanReference(Class<T> expectedType, Object value) { try { if ( expectedType.isInstance( value ) ) { return BeanReference.ofInstance( expectedType.cast( value ) ); } if ( value instanceof BeanReference ) { return ( (BeanReference<?>) value ).asSubTypeOf( expectedType ); } if ( value instanceof Class ) { Class<?> castedValue = (Class<?>) value; if ( !expectedType.isAssignableFrom( castedValue ) ) { throw log.invalidBeanType( expectedType, castedValue ); } @SuppressWarnings("unchecked") // Checked using reflection just above Class<? extends T> castedValueAsChildType = (Class<? extends T>) value; return BeanReference.of( castedValueAsChildType ); } if ( value instanceof String ) { return BeanReference.of( expectedType, (String) value ); } } catch (RuntimeException e) { throw log.invalidBeanReferencePropertyValue( expectedType, e.getMessage(), e ); } throw log.invalidBeanReferencePropertyValue( expectedType, "", null ); }
public static <T> BeanReference<? extends T> convertBeanReference(Class<T> expectedType, Object value) { try { if ( expectedType.isInstance( value ) ) { return BeanReference.ofInstance( expectedType.cast( value ) ); } if ( value instanceof BeanReference ) { return ( (BeanReference<?>) value ).asSubTypeOf( expectedType ); } if ( value instanceof Class ) { Class<?> castedValue = (Class<?>) value; if ( !expectedType.isAssignableFrom( castedValue ) ) { throw log.invalidBeanType( expectedType, castedValue ); } @SuppressWarnings("unchecked") // Checked using reflection just above Class<? extends T> castedValueAsChildType = (Class<? extends T>) value; return BeanReference.of( castedValueAsChildType ); } if ( value instanceof String ) { return BeanReference.of( expectedType, (String) value ); } } catch (RuntimeException e) { throw log.invalidBeanReferencePropertyValue( expectedType, e.getMessage(), e ); } throw log.invalidBeanReferencePropertyValue( expectedType, "", null ); }
@Override public BeanHolder<B> build(BridgeBuildContext buildContext) { BeanProvider beanProvider = buildContext.getBeanProvider(); return beanReference.getBean( beanProvider ); } }
private <T> Optional<BeanReference<? extends T>> toBeanReference(Class<T> expectedType, Class<?> undefinedTypeMarker, Class<? extends T> type, String name) { String cleanedUpName = name.isEmpty() ? null : name; Class<? extends T> cleanedUpType = undefinedTypeMarker.equals( type ) ? null : type; if ( cleanedUpName == null && cleanedUpType == null ) { return Optional.empty(); } else { Class<? extends T> defaultedType = cleanedUpType == null ? expectedType : cleanedUpType; return Optional.of( BeanReference.of( defaultedType, cleanedUpName ) ); } }
@Override @SuppressWarnings("unchecked") // Checked using reflection public <U> BeanReference<? extends U> asSubTypeOf(Class<U> expectedType) { if ( expectedType.isAssignableFrom( type ) ) { return (BeanReference<? extends U>) this; } else { return BeanReference.super.asSubTypeOf( expectedType ); } }
/** * Retrieve a bean from a {@link BeanReference}. * <p> * This method is just syntactic sugar to allow to write {@code bridgeProvider::getBean} * and get a {@code Function<BeanReference<T>, T>} that can be used in {@link java.util.Optional#map(Function)} * for instance. * * @param <T> The expected return type. * @param reference The reference to the bean to retrieve. Must be non-null. * @return A {@link BeanHolder} containing the resolved bean. * @throws SearchException if the reference is invalid (null or empty) or the bean cannot be resolved. */ default <T> BeanHolder<T> getBean(BeanReference<T> reference) { Contracts.assertNotNull( reference, "reference" ); return reference.getBean( this ); }
@Override public TypeMappingContext routingKeyBridge(Class<? extends RoutingKeyBridge> bridgeClass) { return routingKeyBridge( BeanReference.of( bridgeClass ) ); }
@Override @SuppressWarnings("unchecked") // Checked using reflection public <U> BeanReference<? extends U> asSubTypeOf(Class<U> expectedType2) { if ( expectedType2.isAssignableFrom( expectedType ) ) { return (BeanReference<? extends U>) this; } else { return casted.asSubTypeOf( expectedType2 ); } } }
/** * Retrieve a bean from a {@link BeanReference}. * <p> * This method is just syntactic sugar to allow to write {@code bridgeProvider::getBean} * and get a {@code Function<BeanReference<T>, T>} that can be used in {@link java.util.Optional#map(Function)} * for instance. * * @param <T> The expected return type. * @param reference The reference to the bean to retrieve. Must be non-null. * @return A {@link BeanHolder} containing the resolved bean. * @throws SearchException if the reference is invalid (null or empty) or the bean cannot be resolved. */ default <T> BeanHolder<T> getBean(BeanReference<T> reference) { Contracts.assertNotNull( reference, "reference" ); return reference.getBean( this ); }
@Override public S valueBridge(Class<? extends ValueBridge<?, ?>> bridgeClass) { return valueBridge( BeanReference.of( bridgeClass ) ); }
@Override @SuppressWarnings("unchecked") // Checked using reflection public <U> BeanReference<? extends U> asSubTypeOf(Class<U> expectedType2) { if ( expectedType2.isAssignableFrom( expectedType ) ) { return (BeanReference<? extends U>) this; } else { return casted.asSubTypeOf( expectedType2 ); } } }
@Override @SuppressWarnings("unchecked") // Checked using reflection public BeanHolder<T> getBean(BeanProvider beanProvider) { BeanHolder<?> beanHolder = casted.getBean( beanProvider ); try { // Just let the type throw an exception if something is wrong expectedType.cast( beanHolder.get() ); // The instance can safely be cast to the expected type, so we can safely do this return (BeanHolder<T>) beanHolder; } catch (Exception e) { new SuppressingCloser( e ).push( beanHolder ); throw e; } }
@Override public PropertyDocumentIdMappingContext identifierBridge(Class<? extends IdentifierBridge<?>> bridgeClass) { return identifierBridge( BeanReference.of( bridgeClass ) ); }
@Override @SuppressWarnings("unchecked") // Checked using reflection public BeanHolder<T> getBean(BeanProvider beanProvider) { BeanHolder<?> beanHolder = casted.getBean( beanProvider ); try { // Just let the type throw an exception if something is wrong expectedType.cast( beanHolder.get() ); // The instance can safely be cast to the expected type, so we can safely do this return (BeanHolder<T>) beanHolder; } catch (Exception e) { new SuppressingCloser( e ).push( beanHolder ); throw e; } }
@Override public TypeMappingContext bridge(Class<? extends TypeBridge> bridgeClass) { return bridge( BeanReference.of( bridgeClass ) ); }
@Override public BeanHolder<? extends B> build(BridgeBuildContext buildContext) { BeanHolder<?> bridgeHolder; try ( BeanHolder<? extends BridgeBuilder> delegateHolder = delegateReference.getBean( buildContext.getBeanProvider() ) ) { bridgeHolder = delegateHolder.get().build( buildContext ); } expectedBridgeType.cast( bridgeHolder.get() ); @SuppressWarnings( "unchecked" ) // The cast above is enough, since BeanHolder must return the same instance for each call to get() BeanHolder<? extends B> castedBridgeHolder = (BeanHolder<? extends B>) bridgeHolder; return castedBridgeHolder; }
@Override public PropertyMappingContext bridge(Class<? extends PropertyBridge> bridgeClass) { return bridge( BeanReference.of( bridgeClass ) ); }