private void enrichComponent(ComponentDeclaration declaration) { if (declaration.getModelProperty(ConnectivityModelProperty.class).isPresent()) { declaration.addErrorModel(getErrorModel(CONNECTIVITY, errorModels, declaration)); declaration.addErrorModel(getErrorModel(RETRY_EXHAUSTED, errorModels, declaration)); } } }.walk(extensionDeclaration);
private Optional<Pair<MetadataKeyId, MetadataType>> locateMetadataKeyId( ComponentDeclaration<? extends ComponentDeclaration> component) { Optional<Pair<MetadataKeyId, MetadataType>> keyId = component.getAllParameters().stream() .map((declaration) -> new ImmutablePair<>(declaration, getAnnotatedElement(declaration))) .filter(p -> p.getRight().isPresent() && p.getRight().get().isAnnotationPresent(MetadataKeyId.class)) .map(p -> (Pair<MetadataKeyId, MetadataType>) new ImmutablePair<>(p.getRight().get().getAnnotation(MetadataKeyId.class), p.getLeft().getType())) .findFirst(); if (!keyId.isPresent()) { for (ParameterGroupDeclaration group : component.getParameterGroups()) { keyId = group.getModelProperty(ParameterGroupModelProperty.class) .map(ParameterGroupModelProperty::getDescriptor) .filter(g -> g.getAnnotatedContainer().isAnnotatedWith(MetadataKeyId.class)) .map(g -> new ImmutablePair<>(g.getContainer().getAnnotation(MetadataKeyId.class), g.getType().asMetadataType())); if (keyId.isPresent()) { break; } } } return keyId; }
private ErrorModel getErrorModel(ErrorTypeDefinition<?> errorTypeDef, Set<ErrorModel> errors, ComponentDeclaration component) { return errors .stream() .filter(e -> !e.getNamespace().equals(CORE_NAMESPACE_NAME) && e.getType().equals(errorTypeDef.getType())) .findFirst() .orElseThrow(() -> new IllegalModelDefinitionException(format(ERROR_MASK, errorTypeDef, component.getName()))); } }
private void addComponent(ComponentDeclaration<?> declaration) { declaration.getModelProperty(ExtensionOperationDescriptorModelProperty.class) .ifPresent(implementingMethodModelProperty -> operations .add(new Pair<>(declaration, implementingMethodModelProperty.getOperationElement()))); }
private Optional<MetadataKeyIdModelProperty> findMetadataKeyIdInParameters( ComponentDeclaration<? extends ComponentDeclaration> component, String categoryName) { return component.getParameterGroups().stream() .flatMap(g -> g.getParameters().stream()) .filter(p -> getExtensionParameter(p).map(element -> element.isAnnotatedWith(MetadataKeyId.class)).orElse(false)) .map(p -> new MetadataKeyIdModelProperty(p.getType(), p.getName(), categoryName)) .findFirst(); }
/** * Given a component declaration, adds all the stereotypes accepted by the config-ref parameter if it has one. */ private void addConfigRefStereoTypesIfNeeded(ComponentDeclaration<?> declaration) { Collection<ConfigurationDeclaration> configs = componentConfigs.get(declaration); if (configs != null && !configs.isEmpty()) { List<StereotypeModel> stereotypes = configs.stream().map(StereotypedDeclaration::getStereotype).collect(toList()); declaration.getAllParameters().stream() .filter(p -> CONFIG_ATTRIBUTE_NAME.equals(p.getName())) .findAny() .ifPresent(configRef -> configRef.setAllowedStereotypeModels(stereotypes)); } } }
private void declareMetadataResolverFactory(ComponentDeclaration<? extends ComponentDeclaration> declaration, MetadataScopeAdapter metadataScope, String categoryName) { MetadataResolverFactory metadataResolverFactory = getMetadataResolverFactory(metadataScope); declaration.addModelProperty(new MetadataResolverFactoryModelProperty(() -> metadataResolverFactory)); declareMetadataKeyId(declaration, categoryName); declareInputResolvers(declaration, metadataScope); if (declaration instanceof WithOutputDeclaration) { declareOutputResolvers((WithOutputDeclaration) declaration, metadataScope); } }
private void addAllowedStereotypes(String namespace, ComponentDeclaration<?> declaration, MethodElement methodElement) { Map<String, NestableElementDeclaration<?>> nested = declaration.getNestedComponents().stream() .collect(toMap(NamedDeclaration::getName, n -> n)); methodElement.getParameters().stream() .filter(p -> nested.containsKey(p.getAlias())) .forEach(parameter -> { if (isProcessorChain(parameter)) { addAllowedStereotypes(namespace, parameter, (WithAllowedStereotypesDeclaration) nested.get(parameter.getAlias())); } else if (isRoute(parameter)) { NestedRouteDeclaration route = (NestedRouteDeclaration) nested.get(parameter.getAlias()); Optional<AllowedStereotypes> allowedStereotypes = parameter.getType().getAnnotation(AllowedStereotypes.class); allowedStereotypes.ifPresent(processorsStereotypes -> { NestableElementDeclaration processorsChain = route.getNestedComponents().stream() .filter(routeChild -> routeChild instanceof NestedChainDeclaration) .findFirst() .orElseThrow(() -> new IllegalStateException("Missing Chain component in Route declaration")); addAllowedStereotypes((WithAllowedStereotypesDeclaration) processorsChain, processorsStereotypes.value(), namespace); }); } }); }
private List<ParameterDeclaration> getGroupParameters(ComponentDeclaration declaration) { return declaration.getParameterGroup(DEFAULT_GROUP_NAME).getParameters(); } }
private TypeResolversInformationModelProperty getResolversInfo(ComponentDeclaration declaration) { Optional<TypeResolversInformationModelProperty> info = declaration .getModelProperty(TypeResolversInformationModelProperty.class); if (!info.isPresent()) { fail("Expected to have information of TypeResolvers but found no model property of class: " + TypeResolversInformationModelProperty.class.getName()); } return info.get(); }
private Optional<MetadataKeyIdModelProperty> findMetadataKeyIdInGroups( ComponentDeclaration<? extends ComponentDeclaration> component, String categoryName) { return component.getParameterGroups().stream() .map(group -> group.getModelProperty(ParameterGroupModelProperty.class).orElse(null)) .filter(Objects::nonNull) .filter(group -> group.getDescriptor().getAnnotatedContainer().isAnnotatedWith(MetadataKeyId.class)) .map(group -> new MetadataKeyIdModelProperty(group.getDescriptor().getMetadataType(), group.getDescriptor().getName(), categoryName)) .findFirst(); }
private void declareInputResolvers(ComponentDeclaration<?> declaration, MetadataScopeAdapter metadataScope) { if (metadataScope.hasInputResolvers()) { Set<String> dynamicParameters = metadataScope.getInputResolvers().keySet(); declaration.getAllParameters().stream() .filter(p -> dynamicParameters.contains(p.getName())) .forEach(this::declareDynamicType); } }
private void declareMetadataResolverFactory(ComponentDeclaration<? extends ComponentDeclaration> declaration, MetadataScopeAdapter metadataScope) { MetadataResolverFactory metadataResolverFactory = getMetadataResolverFactory(metadataScope); declaration.addModelProperty(new MetadataResolverFactoryModelProperty(() -> metadataResolverFactory)); declareMetadataKeyId(declaration, metadataScope.getKeysResolver()); declareInputResolvers(declaration, metadataScope); if (declaration instanceof WithOutputDeclaration) { declareOutputResolvers((WithOutputDeclaration) declaration, metadataScope); } }
private void addAllowedStereotypes(String namespace, ComponentDeclaration<?> declaration, MethodElement methodElement) { Map<String, NestableElementDeclaration<?>> nested = declaration.getNestedComponents().stream() .collect(toMap(NamedDeclaration::getName, n -> n)); methodElement.getParameters().stream() .filter(p -> nested.containsKey(p.getAlias())) .forEach(parameter -> { if (isProcessorChain(parameter)) { addAllowedStereotypes(namespace, parameter, (WithAllowedStereotypesDeclaration) nested.get(parameter.getAlias())); } else if (isRoute(parameter)) { NestedRouteDeclaration route = (NestedRouteDeclaration) nested.get(parameter.getAlias()); Optional<AllowedStereotypes> allowedStereotypes = parameter.getType().getAnnotation(AllowedStereotypes.class); allowedStereotypes.ifPresent(processorsStereotypes -> { NestableElementDeclaration processorsChain = route.getNestedComponents().stream() .filter(routeChild -> routeChild instanceof NestedChainDeclaration) .findFirst() .orElseThrow(() -> new IllegalStateException("Missing Chain component in Route declaration")); addAllowedStereotypes((WithAllowedStereotypesDeclaration) processorsChain, processorsStereotypes.value(), namespace); }); } }); }
private void enrichComponent(ComponentDeclaration declaration) { if (declaration.getModelProperty(ConnectivityModelProperty.class).isPresent()) { declaration.addErrorModel(getErrorModel(CONNECTIVITY, errorModels, declaration)); declaration.addErrorModel(getErrorModel(RETRY_EXHAUSTED, errorModels, declaration)); } } }.walk(extensionDeclaration);
private void addComponent(ComponentDeclaration<?> declaration) { declaration.getModelProperty(ExtensionOperationDescriptorModelProperty.class) .ifPresent(implementingMethodModelProperty -> operations .add(new Pair<>(declaration, implementingMethodModelProperty.getOperationMethod()))); }
private Optional<Pair<MetadataKeyId, MetadataType>> locateMetadataKeyId( ComponentDeclaration<? extends ComponentDeclaration> component) { Optional<Pair<MetadataKeyId, MetadataType>> keyId = component.getAllParameters().stream() .map((declaration) -> new ImmutablePair<>(declaration, getAnnotatedElement(declaration))) .filter(p -> p.getRight().isPresent() && p.getRight().get().isAnnotationPresent(MetadataKeyId.class)) .map(p -> (Pair<MetadataKeyId, MetadataType>) new ImmutablePair<>(p.getRight().get().getAnnotation(MetadataKeyId.class), p.getLeft().getType())) .findFirst(); if (!keyId.isPresent()) { for (ParameterGroupDeclaration group : component.getParameterGroups()) { keyId = group.getModelProperty(ParameterGroupModelProperty.class) .map(ParameterGroupModelProperty::getDescriptor) .filter(g -> g.getAnnotatedContainer().isAnnotatedWith(MetadataKeyId.class)) .map(g -> new ImmutablePair<>(g.getContainer().getAnnotation(MetadataKeyId.class), g.getType().asMetadataType())); if (keyId.isPresent()) { break; } } } return keyId; }
private Optional<MetadataKeyIdModelProperty> findMetadataKeyIdInParameters( ComponentDeclaration<? extends ComponentDeclaration> component, String categoryName) { return component.getParameterGroups().stream() .flatMap(g -> g.getParameters().stream()) .filter(p -> getExtensionParameter(p).map(element -> element.isAnnotatedWith(MetadataKeyId.class)).orElse(false)) .map(p -> new MetadataKeyIdModelProperty(p.getType(), p.getName(), categoryName)) .findFirst(); }
private void declareInputResolvers(ComponentDeclaration<?> declaration, MetadataScopeAdapter metadataScope) { if (metadataScope.hasInputResolvers()) { Set<String> dynamicParameters = metadataScope.getInputResolvers().keySet(); declaration.getAllParameters().stream() .filter(p -> dynamicParameters.contains(p.getName())) .forEach(this::declareDynamicType); } }
private ErrorModel getErrorModel(ErrorTypeDefinition<?> errorTypeDef, Set<ErrorModel> errors, ComponentDeclaration component) { return errors .stream() .filter(e -> !e.getNamespace().equals(CORE_NAMESPACE_NAME) && e.getType().equals(errorTypeDef.getType())) .findFirst() .orElseThrow(() -> new IllegalModelDefinitionException(format(ERROR_MASK, errorTypeDef, component.getName()))); } }