core/src/main/java/io/fabric8/maven/core/util/kubernetes/KubernetesResourceUtil.java
public static void mergeSimpleFields(Object targetValues, Object defaultValues) {
        Class<?> tc = targetValues.getClass();
        Class<?> sc = defaultValues.getClass();
        for (Method targetGetMethod : tc.getMethods()) {
            if (!targetGetMethod.getName().startsWith("get")) {
                continue;
            }

            Class<?> fieldType = targetGetMethod.getReturnType();
            if (!SIMPLE_FIELD_TYPES.contains(fieldType)) {
                continue;
            }

            String fieldName = targetGetMethod.getName().substring(3);
            Method withMethod = null;
            try {
                withMethod = tc.getMethod("with" + fieldName, fieldType);
            } catch (NoSuchMethodException e) {
                try {
                    withMethod = tc.getMethod("set" + fieldName, fieldType);
                } catch (NoSuchMethodException e2) {
                    continue;
                }
            }

            Method sourceGetMethod = null;
            try {
                sourceGetMethod = sc.getMethod("get" + fieldName);
            } catch (NoSuchMethodException e) {
                continue;
            }

            try {
                if (targetGetMethod.invoke(targetValues) == null) {
                    withMethod.invoke(targetValues, sourceGetMethod.invoke(defaultValues));
                }
            } catch (IllegalAccessException e) {
                throw new RuntimeException(e);
            } catch (InvocationTargetException e) {
                throw new RuntimeException(e.getCause());
            }
        }
    }
public static void mergeSimpleFields(Object targetValues, Object defaultValues) {
        Class<?> tc = targetValues.getClass();
        Class<?> sc = defaultValues.getClass();
        for (Method targetGetMethod : tc.getMethods()) {
            if (!targetGetMethod.getName().startsWith("get")) {
                continue;
            }

            Class<?> fieldType = targetGetMethod.getReturnType();
            if (!SIMPLE_FIELD_TYPES.contains(fieldType)) {
                continue;
            }

            String fieldName = targetGetMethod.getName().substring(3);
            Method withMethod = null;
            try {
                withMethod = tc.getMethod("with" + fieldName, fieldType);
            } catch (NoSuchMethodException e) {
                try {
                    withMethod = tc.getMethod("set" + fieldName, fieldType);
                } catch (NoSuchMethodException e2) {
                    continue;
                }
            }

            Method sourceGetMethod = null;
            try {
                sourceGetMethod = sc.getMethod("get" + fieldName);
            } catch (NoSuchMethodException e) {
                continue;
            }

            try {
                if (targetGetMethod.invoke(targetValues) == null) {
                    withMethod.invoke(targetValues, sourceGetMethod.invoke(defaultValues));
                }
            } catch (IllegalAccessException e) {
                throw new RuntimeException(e);
            } catch (InvocationTargetException e) {
                throw new RuntimeException(e.getCause());
            }
        }
    }
public static void mergeSimpleFields ( Object targetValues , Object defaultValues ) { Class < ? > tc = targetValues . getClass ( ) ; Class < ? > sc = defaultValues . getClass ( ) ; for ( Method targetGetMethod : tc . getMethods ( ) ) { if ( ! targetGetMethod . getName ( ) . startsWith ( "get" ) ) { continue ; } Class < ? > fieldType = targetGetMethod . getReturnType ( ) ; if ( ! SIMPLE_FIELD_TYPES . contains ( fieldType ) ) { continue ; } String fieldName = targetGetMethod . getName ( ) . substring ( 3 ) ; Method withMethod = null ; try { withMethod = tc . getMethod ( "with" + fieldName , fieldType ) ; } catch ( NoSuchMethodException e ) { try { withMethod = tc . getMethod ( "set" + fieldName , fieldType ) ; } catch ( NoSuchMethodException e2 ) { continue ; } } Method sourceGetMethod = null ; try { sourceGetMethod = sc . getMethod ( "get" + fieldName ) ; } catch ( NoSuchMethodException e ) { continue ; } try { if ( targetGetMethod . invoke ( targetValues ) == null ) { withMethod . invoke ( targetValues , sourceGetMethod . invoke ( defaultValues ) ) ; } } catch ( IllegalAccessException e ) { throw new RuntimeException ( e ) ; } catch ( InvocationTargetException e ) { throw new RuntimeException ( e . getCause ( ) ) ; } } }
Uses reflection to copy over default values from the defaultValues object to the targetValues
object similar to the following:

<code>
\    * if( values.get${FIELD}() == null ) {
values.(with|set){FIELD}(defaultValues.get${FIELD});
}
</code>

Only fields that which use primitives, boxed primitives, or String object are copied.

@param targetValues
@param defaultValues
Uses reflection to copy over default values from the defaultValues object to the targetValues object similar to the following :