Class BinderModelBuilder<S,​T>

java.lang.Object
org.nuiton.util.beans.BinderModelBuilder<S,​T>
Type Parameters:
S - FIXME
T - FIXME

public class BinderModelBuilder<S,​T>
extends java.lang.Object
Class to create a new Binder.BinderModel.

A such object is designed to build only one model of binder and can not be used directly to create a new binder, it prepares only the model of a new binder, which after must be registred in the BinderFactory to obtain a real Binder.

If you want to create more than one binder model, use each time a new binder builder.

To obtain a new instance of a build please use one of the factories method :

Then you can use folowing methods to specify what to put in the copy model : Note : You can chain thoses methods since all of them always return the current instance of the builder :
 builder.addSimpleProperties(...).addProperty(...).addBinder(...)
 
Here is an example of how to use the BinderModelBuilder :
 BinderModelBuilder<Bean, Bean> builder = new BinderModelBuilder(Bean.class);
 builder.addSimpleProperties("name", "surname");
 BinderFactory.registerBinderModel(builder);
 Binder<Bean, Bean> binder = BinderFactory.getBinder(BeanA.class);
 
Once the binder is registred into the BinderFactory, you can get it each time you need it :
 Binder<Bean, Bean> binder = BinderFactory.getBinder(Bean.class);
 
Since:
1.5.3
Author:
Tony Chemit - chemit@codelutin.com
See Also:
Binder.BinderModel, Binder
  • Field Details

    • canTypeMismatch

      protected boolean canTypeMismatch
      Can the source and target type mismatch for a property ?
    • model

      protected Binder.BinderModel<S,​T> model
      current model used to build the binder
    • sourceDescriptors

      protected java.util.Map<java.lang.String,​java.beans.PropertyDescriptor> sourceDescriptors
      source properties descriptors
    • targetDescriptors

      protected java.util.Map<java.lang.String,​java.beans.PropertyDescriptor> targetDescriptors
      target properties descriptors
  • Constructor Details

    • BinderModelBuilder

      protected BinderModelBuilder​(java.lang.Class<S> sourceType, java.lang.Class<T> targetType)
      Creates a binder for the given types.
      Parameters:
      sourceType - type of the source of the binder
      targetType - type of the target of the binder
  • Method Details

    • newEmptyBuilder

      public static <S> BinderModelBuilder<S,​S> newEmptyBuilder​(java.lang.Class<S> type)
      Creates a new mirrored and empty model binder for the given type.
      Type Parameters:
      S - FIXME
      Parameters:
      type - the type of mirrored binder
      Returns:
      the new instanciated builder
    • newEmptyBuilder

      public static <S,​ T> BinderModelBuilder<S,​T> newEmptyBuilder​(java.lang.Class<S> sourceType, java.lang.Class<T> targetType)
      Creates a new empty model binder for the given types.
      Type Parameters:
      S - FIXME
      T - FIXME
      Parameters:
      sourceType - type of the source of the binder
      targetType - type of the target of the binder
      Returns:
      the new instanciated builder
    • newDefaultBuilder

      public static <S> BinderModelBuilder<S,​S> newDefaultBuilder​(java.lang.Class<S> sourceType)
      Creates a new mirrored model builder and fill the model with all matching and available property from the given type.
      Type Parameters:
      S - FIXME
      S - the mirrored type of the binder model to create
      Parameters:
      sourceType - the mirrored type of the binder model to create
      Returns:
      the new instanciated model builder fully filled
    • newDefaultBuilder

      public static <S,​ T> BinderModelBuilder<S,​T> newDefaultBuilder​(java.lang.Class<S> sourceType, java.lang.Class<T> targetType)
      Creates a new model builder and fill the model with all matching and available properties from the source type to the target type.
      Type Parameters:
      S - the source type of the binder model to create
      T - the target type of the binder model to create
      Parameters:
      sourceType - the source type of the model to create
      targetType - the target type of the model to create
      Returns:
      the new instanciated model builder fully filled
    • newDefaultBuilder

      public static <S,​ T> BinderModelBuilder<S,​T> newDefaultBuilder​(java.lang.Class<S> sourceType, java.lang.Class<T> targetType, boolean checkType)
      Creates a new model builder and fill the model with all matching and available properties from the source type to the target type.
      Type Parameters:
      S - the source type of the binder model to create
      T - the target type of the binder model to create
      Parameters:
      sourceType - the source type of the model to create
      targetType - the target type of the model to create
      checkType - flag to check if properties has same types, otherwise skip them
      Returns:
      the new instanciated model builder fully filled
      Since:
      2.4.5
    • canTypeMismatch

      public BinderModelBuilder<S,​T> canTypeMismatch​(boolean canTypeMismatch)
      Change the value of property canTypeMismatch.
      Parameters:
      canTypeMismatch - new canTypeMismatch value
      Returns:
      the builder
    • addFunction

      public <K,​ V> BinderModelBuilder<S,​T> addFunction​(java.lang.Class<K> type, com.google.common.base.Function<K,​V> function)
    • toBinder

      public Binder<S,​T> toBinder()
      Convinient method to create directly a Binder using the underlying model the builder contains.

      Note: Using this method will not make reusable the model via the BinderFactory.

      Returns:
      a new binder using the model of the builder.
      Since:
      2.1
      See Also:
      BinderFactory.newBinder(Binder.BinderModel, Class)
    • toBinder

      public <B extends Binder<S,​ T>> B toBinder​(java.lang.Class<B> binderType)
      Convinient method to create directly a Binder using the underlying model the builder contains.

      Note: Using this method will not make reusable the model via the BinderFactory.

      Type Parameters:
      B - type of binder to create
      Parameters:
      binderType - type of binder to create
      Returns:
      a new binder using the model of the builder.
      Since:
      2.1
      See Also:
      BinderFactory.newBinder(Binder.BinderModel, Class)
    • setInstanceFactory

      public void setInstanceFactory​(InstanceFactory<T> instanceFactory)
      set factory of target instance
      Parameters:
      instanceFactory - FIXME
    • addSimpleProperties

      public BinderModelBuilder<S,​T> addSimpleProperties​(java.lang.String... properties) throws java.lang.IllegalStateException, java.lang.NullPointerException
      Add to the binder model some simple properties (says source property name = target property name).

      Note: If no model is present, the method will fail.

      Parameters:
      properties - the name of mirrored property
      Returns:
      the instance of the builder
      Throws:
      java.lang.IllegalStateException - if no model was previously created
      java.lang.NullPointerException - if a property is null
    • addProperty

      public BinderModelBuilder<S,​T> addProperty​(java.lang.String sourceProperty, java.lang.String targetProperty) throws java.lang.IllegalStateException, java.lang.NullPointerException
      Add to the binder model some simple properties (says source property name = target property name).

      Note: If no model is present, the method will fail.

      Parameters:
      sourceProperty - the name of the source property to bind
      targetProperty - the name of the target property to bind
      Returns:
      the instance of the builder
      Throws:
      java.lang.IllegalStateException - if no model was previously created
      java.lang.NullPointerException - if a parameter is null
    • addProperties

      public BinderModelBuilder<S,​T> addProperties​(java.lang.String... sourceAndTargetProperties) throws java.lang.IllegalStateException, java.lang.IllegalArgumentException, java.lang.NullPointerException
      Add to the binder model some properties.

      Parameter sourceAndTargetProperties must be a array of couple of sourceProperty, targetProperty.

      Example :

       builder.addProperties("name","name2","text","text");
       

      Note: If no model is present, the method will fail.

      Parameters:
      sourceAndTargetProperties - the couple of (sourceProperty - targetProperty) to bind
      Returns:
      the instance of the builder
      Throws:
      java.lang.IllegalStateException - if no model was previously created
      java.lang.IllegalArgumentException - if there is not the same number of source and target properties
      java.lang.NullPointerException - if a parameter is null
    • addBinder

      public BinderModelBuilder<S,​T> addBinder​(java.lang.String propertyName, Binder<?,​?> binder)
    • addCollectionStrategy

      public BinderModelBuilder<S,​T> addCollectionStrategy​(Binder.CollectionStrategy strategy, java.lang.String... propertyNames)
    • addCollectionBinder

      public BinderModelBuilder<S,​T> addCollectionBinder​(Binder binder, java.lang.String... propertyNames)
    • buildInverseModelBuilder

      public BinderModelBuilder<T,​S> buildInverseModelBuilder()
      Creates a new model builder inversing the the source and target of this builder.

      the result build will contains the inversed properties mapping of the original builder.

      Other builder attributes are not used used

      Returns:
      the new model builder
    • addCollectionStrategy0

      protected BinderModelBuilder<S,​T> addCollectionStrategy0​(java.lang.String propertyName, Binder.CollectionStrategy strategy, Binder binder)
    • addProperty0

      protected void addProperty0​(java.lang.String sourceProperty, java.lang.String targetProperty)
    • getModel

      protected Binder.BinderModel<S,​T> getModel()
    • clear

      protected void clear()
    • loadDescriptors

      protected static void loadDescriptors​(java.lang.Class<?> type, java.util.Map<java.lang.String,​java.beans.PropertyDescriptor> descriptors)