Package nl._42.beanie

Class BeanBuilder

  • All Implemented Interfaces:
    ValueGenerator

    public class BeanBuilder
    extends java.lang.Object
    implements ValueGenerator
    Builds new bean instances.
    Since:
    Feb 14, 2014
    Author:
    Jeroen van Schagen
    • Constructor Detail

      • BeanBuilder

        public BeanBuilder​(BeanSaver beanSaver)
        Construct a simple BeanBuilder, please note that this builder by default does not yet support conversions.
        Parameters:
        beanSaver - used to save constructed beans
        See Also:
        setBeanConverter(BeanConverter)
      • BeanBuilder

        public BeanBuilder​(BeanConverter beanConverter,
                           BeanSaver beanSaver)
        Construct a simple BeanBuilder.
        Parameters:
        beanConverter - used to convert beans between types
        beanSaver - used to save constructed beans
      • BeanBuilder

        public BeanBuilder​(BeanBuilder beanBuilder)
        Construct a new BeanBuilder cloning the settings of an existing builder.
        Parameters:
        beanBuilder - the builder instance to clone from
    • Method Detail

      • start

        public <T> EditableBeanBuildCommand<T> start​(java.lang.Class<T> beanClass)
        Start building a new bean.
        Type Parameters:
        T - the bean type
        Parameters:
        beanClass - the type of bean to start building
        Returns:
        the bean build command
      • start

        public <T> EditableBeanBuildCommand<T> start​(T bean)
        Start building a new bean.
        Type Parameters:
        T - the bean type
        Parameters:
        bean - the initial bean
        Returns:
        the bean build command
      • startAs

        public <I extends BeanBuildCommand<?>> I startAs​(java.lang.Class<I> interfaceType)
        Start building a new bean, using a custom builder interface.
        Type Parameters:
        I - the interface type
        Parameters:
        interfaceType - the build command interface
        Returns:
        the builder instance, capable of building beans
      • startAs

        public <I extends BeanBuildCommand<T>,​T> I startAs​(java.lang.Class<I> interfaceType,
                                                                 T bean)
        Start building a new bean, using a custom builder interface.
        Type Parameters:
        I - the interface type
        T - the bean type
        Parameters:
        interfaceType - the build command interface
        bean - the template bean
        Returns:
        the builder instance, capable of building beans
      • generate

        public java.lang.Object generate​(java.lang.Class<?> beanClass)
        Generate a new value of the specified type.
        Specified by:
        generate in interface ValueGenerator
        Parameters:
        beanClass - the type of value
        Returns:
        the generation value
      • generateSafely

        public <T> T generateSafely​(java.lang.Class<T> beanClass)
        Generate a new bean, properly casted to the correct type.
        Type Parameters:
        T - the bean type
        Parameters:
        beanClass - the bean class
        Returns:
        the generated bean
      • generateValue

        protected java.lang.Object generateValue​(java.lang.Class<?> beanClass,
                                                 java.beans.PropertyDescriptor descriptor)
      • skip

        public BeanBuilder skip​(java.lang.Class<?> declaringClass,
                                java.lang.String propertyName)
        Skip a property from being generated.
        Parameters:
        declaringClass - the bean that declares this property
        propertyName - the property name
        Returns:
        this instance
      • register

        public BeanBuilder register​(java.lang.Class<?> declaringClass,
                                    java.lang.String propertyName,
                                    ValueGenerator generator)
        Register a value generation strategy for a specific property reference.
        Parameters:
        declaringClass - the bean class that declares our property
        propertyName - the name of the property
        generator - the generation strategy
        Returns:
        this instance
      • registerValue

        public BeanBuilder registerValue​(java.lang.Class<?> declaringClass,
                                         java.lang.String propertyName,
                                         java.lang.Object value)
        Register a constant value for a specific property reference.
        Parameters:
        declaringClass - the bean class that declares our property
        propertyName - the name of the property
        value - the value to return
        Returns:
        this instance
      • register

        public BeanBuilder register​(java.lang.Class<?> valueType,
                                    ValueGenerator generator)
        Register a value generation strategy for a specific type.
        Parameters:
        valueType - the type of value
        generator - the generation strategy
        Returns:
        this instance
      • register

        public <T> BeanBuilder register​(java.lang.Class<T> valueType,
                                        java.util.function.Supplier<T> generator)
        Register a value generation strategy for a specific type.
        Parameters:
        valueType - the type of value
        generator - the generation strategy
        Returns:
        this instance
      • register

        public BeanBuilder register​(Supportable predicate,
                                    ValueGenerator generator)
        Register a value generation strategy for a specific type.
        Parameters:
        predicate - the support predicate
        generator - the generation strategy
        Returns:
        this instance
      • registerIf

        public BeanBuilder registerIf​(java.util.function.Predicate<java.lang.reflect.AccessibleObject> predicate,
                                      ValueGenerator generator)
        Register a value generation strategy for a specific type.
        Parameters:
        predicate - the support predicate
        generator - the generation strategy
        Returns:
        this instance
      • registerValue

        public BeanBuilder registerValue​(java.lang.Class<?> valueType,
                                         java.lang.Object value)
        Register a constant value for a specific type.
        Parameters:
        valueType - the type of value
        value - the value to return
        Returns:
        this instance
      • save

        public <T> T save​(T bean)
        Saves the bean.
        Type Parameters:
        T - the bean type
        Parameters:
        bean - the bean to save
        Returns:
        the saved bean
      • delete

        public void delete​(java.lang.Object bean)
        Deletes the bean.
        Parameters:
        bean - the bean to delete
      • deleteAll

        public void deleteAll​(java.lang.Iterable<? extends java.lang.Object> beans)
        Deletes multiple beans.
        Parameters:
        beans - the beans to delete
      • getBeanGenerator

        public final BeanGenerator getBeanGenerator()
        Retrieves the underlying bean generator.
        Returns:
        the bean generator
      • getSkippedProperties

        public java.util.Set<PropertyReference> getSkippedProperties()
        Retrieves the skipped properties.
        Returns:
        the skipped properties
      • setBeanSaver

        public void setBeanSaver​(BeanSaver beanSaver)
        Parameters:
        beanSaver - the saver to set
      • setBeanConverter

        public void setBeanConverter​(BeanConverter beanConverter)
        Parameters:
        beanConverter - the converter to set