Henry Kuijpers created SLING-7256:
-------------------------------------

             Summary: Sling Models injector for CAConfig
                 Key: SLING-7256
                 URL: https://issues.apache.org/jira/browse/SLING-7256
             Project: Sling
          Issue Type: New Feature
    Affects Versions: Sling Models Impl 1.4.4
            Reporter: Henry Kuijpers


It would be great to have a Sling Models injector for CAConfig.

An example could be:
{code}
@Component
public class ContextAwareConfigurationInjector implements Injector {
    public String getName() {
        return "ca-config";
    }

    public Object getValue(Object adaptable, String name, Type declaredType, 
AnnotatedElement element,
                           DisposalCallbackRegistry callbackRegistry) {
        if (isConfigurationObject(declaredType)) {
            final Resource resource;
            if (adaptable instanceof Resource) {
                // TODO: Is this always the correct resource? (Most often we 
want the one in /content)
                // So we do not want /conf/... for example
                resource = (Resource) adaptable;
            } else if (adaptable instanceof SlingHttpServletRequest) {
                final SlingHttpServletRequest request = 
(SlingHttpServletRequest)adaptable;
                final ResourceResolver resourceResolver = 
request.getResourceResolver();
                resource = resourceResolver.resolve(request, 
request.getRequestURI());
            } else {
                throw new IllegalArgumentException("Either a resource or the 
request should be used");
            }

            final ConfigurationBuilder builder = 
resource.adaptTo(ConfigurationBuilder.class);
            if (builder != null) {
                return builder.as((Class<?>) declaredType);
            }
        }
        return null;
    }

    private static boolean isConfigurationObject(Type type) {
        if (!(type instanceof Class<?>)) {
            return false;
        }

        Class<?> clazz = (Class<?>) type;
        return clazz.isAnnotation() && 
clazz.isAnnotationPresent(Configuration.class);
    }
}
{code}

+ annotation:
{code}
@Target({ ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER })
@Retention(RetentionPolicy.RUNTIME)
@InjectAnnotation
@Source("ca-config")
@Qualifier
public @interface CaConfig {
}
{code}



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to