[ https://issues.apache.org/jira/browse/SLING-7256?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16735759#comment-16735759 ]
Stefan Seifert commented on SLING-7256: --------------------------------------- i've started a [thread on the mailing list|https://lists.apache.org/thread.html/b971034e7518e9ec83ca3fc37b2b2b1344ff1290217472c5d19fefa9@%3Cdev.sling.apache.org%3E] about the best integration approach. > 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 > Priority: Major > > 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 (v7.6.3#76005)