static List resolveFromEnvironment()

in core/impl/src/main/java/org/apache/myfaces/extensions/cdi/core/impl/util/ConfiguredArtifactUtils.java [113:184]


    static <T> List<T> resolveFromEnvironment(final String key,
                                              final Class<T> targetType,
                                              boolean supportOfMultipleArtifacts,
                                              T defaultImplementation)
    {
        List<T> results = new ArrayList<T>();
        List<T> resolverResult;

        List<ConfiguredValueResolver> resolvers = getConfiguredValueResolvers();

        for(ConfiguredValueResolver configuredValueResolver : resolvers)
        {
            resolverResult = configuredValueResolver.resolveInstances(new ConfiguredValueDescriptor<String, T>()
            {
                /**
                 * {@inheritDoc}
                 */
                public String getKey()
                {
                    return key;
                }

                /**
                 * {@inheritDoc}
                 */
                public Class<T> getTargetType()
                {
                    return targetType;
                }
            });

            Field defaultInjectionPoint;
            if(resolverResult != null)
            {
                for(T currentResult : resolverResult)
                {
                    if(defaultImplementation != null && currentResult.getClass().isAnnotationPresent(Advanced.class))
                    {
                        defaultInjectionPoint = findInjectionPointForDefaultImplementation(currentResult, targetType);

                        if(defaultInjectionPoint != null)
                        {
                            try
                            {
                                //TODO
                                defaultInjectionPoint.setAccessible(true);
                                defaultInjectionPoint.set(currentResult, defaultImplementation);
                            }
                            catch (Exception e)
                            {
                                Logger logger = Logger.getLogger(ConfiguredArtifactUtils.class.getName());

                                if(logger.isLoggable(Level.SEVERE))
                                {
                                    logger.log(Level.SEVERE, currentResult.getClass().getName() + " is annotated with" +
                                            Advanced.class.getName() + " but it wasn't possible to inject the default" +
                                            " implementation into " + defaultInjectionPoint.getName() + "." +
                                            " Please contact the community or remove the annotation.", e);

                                }
                            }
                        }
                    }
                    results.add(currentResult);
                }
            }
        }

        checkArtifacts(targetType, results, supportOfMultipleArtifacts);

        return results;
    }