Search in sources :

Example 1 with HasParametersDeclarer

use of org.mule.runtime.api.meta.model.declaration.fluent.HasParametersDeclarer in project mule by mulesoft.

the class ParameterModelsLoaderDelegate method declaredAsGroup.

private List<ParameterDeclarer> declaredAsGroup(HasParametersDeclarer component, ParameterDeclarationContext declarationContext, ExtensionParameter groupParameter) throws IllegalParameterModelDefinitionException {
    ParameterGroup groupAnnotation = groupParameter.getAnnotation(ParameterGroup.class).orElse(null);
    if (groupAnnotation == null) {
        return emptyList();
    }
    final String groupName = groupAnnotation.name();
    if (DEFAULT_GROUP_NAME.equals(groupName)) {
        throw new IllegalParameterModelDefinitionException(format("%s '%s' defines parameter group of name '%s' which is the default one. " + "@%s cannot be used with the default group name", getComponentDeclarationTypeName(((Declarer) component).getDeclaration()), ((NamedDeclaration) ((Declarer) component).getDeclaration()).getName(), groupName, ParameterGroup.class.getSimpleName()));
    }
    final Type type = groupParameter.getType();
    final List<FieldElement> nestedGroups = type.getAnnotatedFields(ParameterGroup.class);
    if (!nestedGroups.isEmpty()) {
        throw new IllegalParameterModelDefinitionException(format("Class '%s' is used as a @%s but contains fields which also hold that annotation. Nesting groups is not allowed. " + "Offending fields are: [%s]", type.getName(), ParameterGroup.class.getSimpleName(), nestedGroups.stream().map(element -> element.getName()).collect(joining(","))));
    }
    if (groupParameter.isAnnotatedWith(org.mule.runtime.extension.api.annotation.param.Optional.class)) {
        throw new IllegalParameterModelDefinitionException(format("@%s can not be applied alongside with @%s. Affected parameter is [%s].", org.mule.runtime.extension.api.annotation.param.Optional.class.getSimpleName(), ParameterGroup.class.getSimpleName(), groupParameter.getName()));
    }
    ParameterGroupDeclarer declarer = component.onParameterGroup(groupName);
    if (declarer.getDeclaration().getModelProperty(ParameterGroupModelProperty.class).isPresent()) {
        throw new IllegalParameterModelDefinitionException(format("Parameter group '%s' has already been declared on %s '%s'", groupName, getComponentDeclarationTypeName(((Declarer) component).getDeclaration()), ((NamedDeclaration) ((Declarer) component).getDeclaration()).getName()));
    } else {
        declarer.withModelProperty(new ParameterGroupModelProperty(new ParameterGroupDescriptor(groupName, type, groupParameter.getType().asMetadataType(), // TODO: Eliminate dependency to Annotated Elements
        groupParameter.getDeclaringElement().orElse(null), groupParameter)));
    }
    final List<FieldElement> annotatedParameters = type.getAnnotatedFields(Parameter.class);
    type.getAnnotation(ExclusiveOptionals.class).ifPresent(annotation -> {
        Set<String> optionalParamNames = annotatedParameters.stream().filter(f -> !f.isRequired()).map(WithAlias::getAlias).collect(toSet());
        declarer.withExclusiveOptionals(optionalParamNames, annotation.isOneRequired());
    });
    declarer.withDslInlineRepresentation(groupAnnotation.showInDsl());
    groupParameter.getAnnotation(DisplayName.class).ifPresent(displayName -> declarer.withDisplayModel(DisplayModel.builder().displayName(displayName.value()).build()));
    parseLayoutAnnotations(groupParameter, LayoutModel.builder()).ifPresent(declarer::withLayout);
    declarer.withModelProperty(new ExtensionParameterDescriptorModelProperty(groupParameter));
    if (!annotatedParameters.isEmpty()) {
        return declare(component, annotatedParameters, declarationContext, declarer);
    } else {
        return declare(component, getFieldsWithGetters(type), declarationContext, declarer);
    }
}
Also used : FieldElement(org.mule.runtime.module.extension.api.loader.java.type.FieldElement) MuleExtensionAnnotationParser.parseLayoutAnnotations(org.mule.runtime.module.extension.internal.loader.java.MuleExtensionAnnotationParser.parseLayoutAnnotations) ImplementingParameterModelProperty(org.mule.runtime.module.extension.internal.loader.java.property.ImplementingParameterModelProperty) NameUtils.getComponentDeclarationTypeName(org.mule.runtime.extension.api.util.NameUtils.getComponentDeclarationTypeName) HasParametersDeclarer(org.mule.runtime.api.meta.model.declaration.fluent.HasParametersDeclarer) NullSafeModelProperty(org.mule.runtime.module.extension.internal.loader.java.property.NullSafeModelProperty) DeclaringMemberModelProperty(org.mule.runtime.module.extension.internal.loader.java.property.DeclaringMemberModelProperty) Type(org.mule.runtime.module.extension.api.loader.java.type.Type) ArrayType(org.mule.metadata.api.model.ArrayType) DisplayName(org.mule.runtime.extension.api.annotation.param.display.DisplayName) ClassTypeLoader(org.mule.metadata.api.ClassTypeLoader) ParameterDsl(org.mule.runtime.extension.api.annotation.dsl.xml.ParameterDsl) ParameterDeclarerContributor(org.mule.runtime.module.extension.internal.loader.java.contributor.ParameterDeclarerContributor) Collectors.toSet(java.util.stream.Collectors.toSet) ParameterDslConfiguration(org.mule.runtime.api.meta.model.ParameterDslConfiguration) IntrospectionUtils.getFieldsWithGetters(org.mule.runtime.module.extension.internal.util.IntrospectionUtils.getFieldsWithGetters) ExtensionMetadataTypeUtils.isMap(org.mule.runtime.extension.api.util.ExtensionMetadataTypeUtils.isMap) IllegalParameterModelDefinitionException(org.mule.runtime.extension.api.exception.IllegalParameterModelDefinitionException) ObjectType(org.mule.metadata.api.model.ObjectType) ParameterGroupDescriptor(org.mule.runtime.module.extension.internal.loader.ParameterGroupDescriptor) ExclusiveParametersModel(org.mule.runtime.api.meta.model.parameter.ExclusiveParametersModel) Collections.emptyList(java.util.Collections.emptyList) WithAlias(org.mule.runtime.module.extension.api.loader.java.type.WithAlias) Connection(org.mule.runtime.extension.api.annotation.param.Connection) ExclusiveOptionals(org.mule.runtime.extension.api.annotation.param.ExclusiveOptionals) Set(java.util.Set) String.format(java.lang.String.format) Collectors.joining(java.util.stream.Collectors.joining) DisplayModel(org.mule.runtime.api.meta.model.display.DisplayModel) List(java.util.List) ParameterGroupDeclarer(org.mule.runtime.api.meta.model.declaration.fluent.ParameterGroupDeclarer) NullSafe(org.mule.runtime.extension.api.annotation.param.NullSafe) LayoutModel(org.mule.runtime.api.meta.model.display.LayoutModel) Annotation(java.lang.annotation.Annotation) MetadataType(org.mule.metadata.api.model.MetadataType) ExtensionParameterDescriptorModelProperty(org.mule.runtime.module.extension.internal.loader.java.type.property.ExtensionParameterDescriptorModelProperty) ExtensionParameter(org.mule.runtime.module.extension.api.loader.java.type.ExtensionParameter) Expression(org.mule.runtime.extension.api.annotation.Expression) IllegalModelDefinitionException(org.mule.runtime.extension.api.exception.IllegalModelDefinitionException) AnnotatedElement(java.lang.reflect.AnnotatedElement) ConfigOverride(org.mule.runtime.extension.api.annotation.param.ConfigOverride) HasNestedComponentsDeclarer(org.mule.runtime.api.meta.model.declaration.fluent.HasNestedComponentsDeclarer) MetadataKeyId(org.mule.runtime.extension.api.annotation.metadata.MetadataKeyId) DefaultImplementingTypeModelProperty(org.mule.runtime.extension.api.property.DefaultImplementingTypeModelProperty) Config(org.mule.runtime.extension.api.annotation.param.Config) ArrayList(java.util.ArrayList) ExtensionModelUtils.roleOf(org.mule.runtime.extension.api.util.ExtensionModelUtils.roleOf) ImmutableExclusiveParametersModel(org.mule.runtime.extension.api.model.parameter.ImmutableExclusiveParametersModel) Content(org.mule.runtime.extension.api.annotation.param.Content) IntrospectionUtils.getExpressionSupport(org.mule.runtime.module.extension.internal.util.IntrospectionUtils.getExpressionSupport) DEFAULT_GROUP_NAME(org.mule.runtime.api.meta.model.parameter.ParameterGroupModel.DEFAULT_GROUP_NAME) BasicTypeMetadataVisitor(org.mule.metadata.api.visitor.BasicTypeMetadataVisitor) ParameterGroupModelProperty(org.mule.runtime.module.extension.internal.loader.java.property.ParameterGroupModelProperty) ParameterGroupDeclaration(org.mule.runtime.api.meta.model.declaration.fluent.ParameterGroupDeclaration) Parameter(org.mule.runtime.extension.api.annotation.param.Parameter) ParameterGroup(org.mule.runtime.extension.api.annotation.param.ParameterGroup) ExclusiveOptionalModelProperty(org.mule.runtime.module.extension.internal.loader.java.property.ExclusiveOptionalModelProperty) ModelLoaderUtils.isProcessorChain(org.mule.runtime.module.extension.internal.loader.utils.ModelLoaderUtils.isProcessorChain) NamedDeclaration(org.mule.runtime.api.meta.model.declaration.fluent.NamedDeclaration) ExclusiveParametersDeclaration(org.mule.runtime.api.meta.model.declaration.fluent.ExclusiveParametersDeclaration) Field(java.lang.reflect.Field) Collectors.toList(java.util.stream.Collectors.toList) ParameterDeclarationContext(org.mule.runtime.module.extension.internal.loader.utils.ParameterDeclarationContext) ParameterDeclarer(org.mule.runtime.api.meta.model.declaration.fluent.ParameterDeclarer) Declarer(org.mule.runtime.api.meta.model.declaration.fluent.Declarer) JavaTypeUtils.getType(org.mule.metadata.java.api.utils.JavaTypeUtils.getType) ExclusiveOptionals(org.mule.runtime.extension.api.annotation.param.ExclusiveOptionals) ParameterGroupDescriptor(org.mule.runtime.module.extension.internal.loader.ParameterGroupDescriptor) FieldElement(org.mule.runtime.module.extension.api.loader.java.type.FieldElement) ParameterGroupModelProperty(org.mule.runtime.module.extension.internal.loader.java.property.ParameterGroupModelProperty) ExtensionParameterDescriptorModelProperty(org.mule.runtime.module.extension.internal.loader.java.type.property.ExtensionParameterDescriptorModelProperty) Type(org.mule.runtime.module.extension.api.loader.java.type.Type) ArrayType(org.mule.metadata.api.model.ArrayType) ObjectType(org.mule.metadata.api.model.ObjectType) MetadataType(org.mule.metadata.api.model.MetadataType) JavaTypeUtils.getType(org.mule.metadata.java.api.utils.JavaTypeUtils.getType) ParameterGroup(org.mule.runtime.extension.api.annotation.param.ParameterGroup) DisplayName(org.mule.runtime.extension.api.annotation.param.display.DisplayName) NamedDeclaration(org.mule.runtime.api.meta.model.declaration.fluent.NamedDeclaration) IllegalParameterModelDefinitionException(org.mule.runtime.extension.api.exception.IllegalParameterModelDefinitionException) ParameterGroupDeclarer(org.mule.runtime.api.meta.model.declaration.fluent.ParameterGroupDeclarer)

Aggregations

String.format (java.lang.String.format)1 Annotation (java.lang.annotation.Annotation)1 AnnotatedElement (java.lang.reflect.AnnotatedElement)1 Field (java.lang.reflect.Field)1 ArrayList (java.util.ArrayList)1 Collections.emptyList (java.util.Collections.emptyList)1 List (java.util.List)1 Set (java.util.Set)1 Collectors.joining (java.util.stream.Collectors.joining)1 Collectors.toList (java.util.stream.Collectors.toList)1 Collectors.toSet (java.util.stream.Collectors.toSet)1 ClassTypeLoader (org.mule.metadata.api.ClassTypeLoader)1 ArrayType (org.mule.metadata.api.model.ArrayType)1 MetadataType (org.mule.metadata.api.model.MetadataType)1 ObjectType (org.mule.metadata.api.model.ObjectType)1 BasicTypeMetadataVisitor (org.mule.metadata.api.visitor.BasicTypeMetadataVisitor)1 JavaTypeUtils.getType (org.mule.metadata.java.api.utils.JavaTypeUtils.getType)1 ParameterDslConfiguration (org.mule.runtime.api.meta.model.ParameterDslConfiguration)1 Declarer (org.mule.runtime.api.meta.model.declaration.fluent.Declarer)1 ExclusiveParametersDeclaration (org.mule.runtime.api.meta.model.declaration.fluent.ExclusiveParametersDeclaration)1