public static T lookupConfigFromEnvironment()

in core/impl/src/main/java/org/apache/myfaces/extensions/cdi/core/impl/util/CodiUtils.java [543:604]


    public static <T extends Serializable> T lookupConfigFromEnvironment(String key,
                                                                         Class<T> targetType,
                                                                         T defaultValue)
    {
        if(key == null)
        {
            @SuppressWarnings({"ThrowableInstanceNeverThrown"})
            RuntimeException runtimeException = new RuntimeException();

            String baseKey = runtimeException.getStackTrace()[1].getMethodName();

            if(baseKey.startsWith("get"))
            {
                baseKey = baseKey.substring(3);
            }
            else if(baseKey.startsWith("is"))
            {
                baseKey = baseKey.substring(2);
            }

            baseKey = baseKey.substring(0, 1).toLowerCase() + baseKey.substring(1);

            String className = runtimeException.getStackTrace()[1].getClassName();

            Class configClass = ClassUtils.tryToLoadClassForName(className);

            if(configClass != null && CodiConfig.class.isAssignableFrom(configClass.getSuperclass()))
            {
                //config class extends the default impl. -> use the name of the default impl.
                className = configClass.getSuperclass().getSimpleName();
            }
            else
            {
                className = className.substring(className.lastIndexOf(".") + 1);
            }

            String convertedKey = StringUtils.replaceUpperCaseCharactersWithUnderscores(baseKey);
            key = className + "." + convertedKey;
        }

        String result = lookupFromEnvironment(key, String.class, null, null);

        if(result == null)
        {
            return defaultValue != null ? defaultValue : null;
        }

        if(String.class.isAssignableFrom(targetType))
        {
            return targetType.cast(result);
        }
        if(Boolean.class.isAssignableFrom(targetType))
        {
            return targetType.cast(Boolean.parseBoolean(result));
        }
        if(Integer.class.isAssignableFrom(targetType))
        {
            return targetType.cast(Integer.parseInt(result));
        }

        throw new IllegalArgumentException(targetType.getName() + " isn't supported");
    }