Package org.optaplanner.core.config.util

## Class ConfigUtils

- java.lang.Object
- - org.optaplanner.core.config.util.ConfigUtils

-     public class ConfigUtils
      extends Object

- - ### Method Summary

    All Methods Static Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `static void` | `applyCustomProperties​(Object bean, String beanClassPropertyName, Map<String,​String> customProperties, String customPropertiesPropertyName)` |
    `static int` | `ceilDivide​(int dividend, int divisor)` | Divides and ceils the result without using floating point arithmetic.
    `static Class<? extends Annotation>` | `extractAnnotationClass​(Member member, Class<? extends Annotation>... annotationClasses)` |
    `static Class<?>` | `extractCollectionGenericTypeParameter​(String parentClassConcept, Class<?> parentClass, Class<?> type, Type genericType, Class<? extends Annotation> annotationClass, String memberName)` |
    `static <C> MemberAccessor` | `findPlanningIdMemberAccessor​(Class<C> clazz)` |
    `static List<Class<?>>` | `getAllAnnotatedLineageClasses​(Class<?> bottomClass, Class<? extends Annotation> annotation)` |
    `static List<Member>` | `getAllMembers​(Class<?> baseClass, Class<? extends Annotation> annotationClass)` |
    `static List<Member>` | `getDeclaredMembers​(Class<?> baseClass)` |
    `static <Config_ extends AbstractConfig<Config_>> Config_` | `inheritConfig​(Config_ original, Config_ inherited)` |
    `static <Config_ extends AbstractConfig<Config_>> List<Config_>` | `inheritMergeableListConfig​(List<Config_> originalList, List<Config_> inheritedList)` |
    `static <T> List<T>` | `inheritMergeableListProperty​(List<T> originalList, List<T> inheritedList)` |
    `static <K,​T> Map<K,​T>` | `inheritMergeableMapProperty​(Map<K,​T> originalMap, Map<K,​T> inheritedMap)` |
    `static <T> T` | `inheritOverwritableProperty​(T original, T inherited)` |
    `static boolean` | `isEmptyCollection​(Collection<?> collection)` |
    `static <T> T` | `meldProperty​(T a, T b)` | A relaxed version of `mergeProperty(Object, Object)`.
    `static <T> T` | `mergeProperty​(T a, T b)` |
    `static <T> T` | `newInstance​(Object bean, String propertyName, Class<T> clazz)` |
    `static int` | `resolvePoolSize​(String propertyName, String value, String... magicValues)` |

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Method Detail

    - #### newInstance

          public static <T> T newInstance​(Object bean,
                                          String propertyName,
                                          Class<T> clazz)

    - #### applyCustomProperties

          public static void applyCustomProperties​(Object bean,
                                                   String beanClassPropertyName,
                                                   Map<String,​String> customProperties,
                                                   String customPropertiesPropertyName)

    - #### inheritConfig

          public static <Config_ extends AbstractConfig<Config_>> Config_ inheritConfig​(Config_ original,
                                                                                        Config_ inherited)

    - #### inheritMergeableListConfig

          public static <Config_ extends AbstractConfig<Config_>> List<Config_> inheritMergeableListConfig​(List<Config_> originalList,
                                                                                                           List<Config_> inheritedList)

    - #### inheritOverwritableProperty

          public static <T> T inheritOverwritableProperty​(T original,
                                                          T inherited)

    - #### inheritMergeableListProperty

          public static <T> List<T> inheritMergeableListProperty​(List<T> originalList,
                                                                 List<T> inheritedList)

    - #### inheritMergeableMapProperty

          public static <K,​T> Map<K,​T> inheritMergeableMapProperty​(Map<K,​T> originalMap,
                                                                               Map<K,​T> inheritedMap)

    - #### mergeProperty

          public static <T> T mergeProperty​(T a,
                                            T b)

    - #### meldProperty

          public static <T> T meldProperty​(T a,
                                           T b)

      A relaxed version of `mergeProperty(Object, Object)`. Used primarily for merging failed benchmarks, where a property remains the same over benchmark runs (for example: dataset problem size), but the property in the failed benchmark isn't initialized, therefore null. When merging, we can still use the correctly initialized property of the benchmark that didn't fail.

      Null-handling:

      - if both properties are null, returns null
      - if only one of the properties is not null, returns that property
      - if both properties are not null, returns `mergeProperty(Object, Object)`
      Type Parameters:
        `T` - the type of property `a` and `b`
      Parameters:
        `a` - property `a`
        `b` - property `b`
      Returns:
        sometimes null
      See Also:
        `mergeProperty(Object, Object)`

    - #### isEmptyCollection

          public static boolean isEmptyCollection​(Collection<?> collection)

    - #### ceilDivide

          public static int ceilDivide​(int dividend,
                                       int divisor)

      Divides and ceils the result without using floating point arithmetic. For floor division, see `Math.floorDiv(long, long)`.
      Parameters:
        `dividend` - the dividend
        `divisor` - the divisor
      Returns:
        dividend / divisor, ceiled
      Throws:
        `ArithmeticException` - if `divisor == 0`

    - #### resolvePoolSize

          public static int resolvePoolSize​(String propertyName,
                                            String value,
                                            String... magicValues)

    - #### getAllAnnotatedLineageClasses

          public static List<Class<?>> getAllAnnotatedLineageClasses​(Class<?> bottomClass,
                                                                     Class<? extends Annotation> annotation)

    - #### getDeclaredMembers

          public static List<Member> getDeclaredMembers​(Class<?> baseClass)

      Parameters:
        `baseClass` - never null
      Returns:
        never null, sorted by type (fields before methods), then by `AlphabeticMemberComparator`.

    - #### getAllMembers

          public static List<Member> getAllMembers​(Class<?> baseClass,
                                                   Class<? extends Annotation> annotationClass)

      Parameters:
        `baseClass` - never null
        `annotationClass` - never null
      Returns:
        never null, sorted by type (fields before methods), then by `AlphabeticMemberComparator`.

    - #### extractAnnotationClass

          @SafeVarargs
          public static Class<? extends Annotation> extractAnnotationClass​(Member member,
                                                                           Class<? extends Annotation>... annotationClasses)

    - #### extractCollectionGenericTypeParameter

          public static Class<?> extractCollectionGenericTypeParameter​(String parentClassConcept,
                                                                       Class<?> parentClass,
                                                                       Class<?> type,
                                                                       Type genericType,
                                                                       Class<? extends Annotation> annotationClass,
                                                                       String memberName)

    - #### findPlanningIdMemberAccessor

          public static <C> MemberAccessor findPlanningIdMemberAccessor​(Class<C> clazz)