[BLOSSOM-321] Allow injection of Spring managed components in template availability method Created: 17/Nov/23  Updated: 17/Nov/23

Status: Open
Project: Blossom
Component/s: None
Affects Version/s: None
Fix Version/s: None

Type: Improvement Priority: Medium
Reporter: Björn Eschle Assignee: Mikaël Geljić
Resolution: Unresolved Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified

Template:
Acceptance criteria:
Empty
Task DoD:
[ ]* Doc/release notes changes? Comment present?
[ ]* Downstream builds green?
[ ]* Solution information and context easily available?
[ ]* Tests
[ ]* FixVersion filled and not yet released
[ ]  Architecture Decision Record (ADR)

 Description   

Hello,

with BLOSSOM-295 you implemented the feature to delegate param resolver to spring's 
HandlerMethodArgumentResolvers.
 
Can you also implement this for getTemplateAvailabilityParameters?

TemplateDefinitionBuilder.getTemplateAvailabilityParameters(Node node, TemplateDefinition templateDefinition)

 
We have currently implemented this on our own by extending TemplateDefinitionBuilder
 and overriding resolveTemplateAvailability (Method is required for ArgumentResolverParameterResolver, applicationContext is injected):

@Override
protected TemplateAvailability resolveTemplateAvailability(final HandlerMetaData template) {
    final Method method = resolveTemplateAvailabilityMethod(template);
    if (method != null) {
       return (node, templateDefinition) -> (Boolean) MethodInvocationUtils.invoke(
             method,
             template.getHandler(),
             new ArgumentResolverParameterResolver(method, applicationContext.getAutowireCapableBeanFactory()) {
                @Override
                public Object resolveParameter(final Class<?> parameterType) {
                   if(parameterType.equals(Node.class)) {
                      return node;
                   }
                   if (parameterType.equals(TemplateDefinition.class)) {
                      return templateDefinition;
                   }
                   return super.resolveParameter(parameterType);
                }
             }
       );
    }
    return super.resolveTemplateAvailability(template);
}

Generated at Sun Feb 11 23:32:18 CET 2024 using Jira 9.4.2#940002-sha1:46d1a51de284217efdcb32434eab47a99af2938b.