[ 
https://issues.apache.org/jira/browse/SLING-7256?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Henry Kuijpers updated SLING-7256:
----------------------------------
    Description: 
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) {
                resource = (Resource) adaptable;
            } else if (adaptable instanceof SlingHttpServletRequest) {
                // TODO: Is this always the correct resource? (Most often we 
want the one in /content)
                // So we do not want /conf/... for example
                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}

  was:
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}


> 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) {
>                 resource = (Resource) adaptable;
>             } else if (adaptable instanceof SlingHttpServletRequest) {
>                 // TODO: Is this always the correct resource? (Most often we 
> want the one in /content)
>                 // So we do not want /conf/... for example
>                 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