Search in sources :

Example 11 with ComponentModel

use of org.mule.runtime.config.internal.model.ComponentModel in project mule by mulesoft.

the class MinimalApplicationModelGenerator method enableComponentDependencies.

/**
 * Enables the {@link ComponentModel} and its dependencies in the {@link ApplicationModel}.
 *
 * @param requestedComponentModel the requested {@link ComponentModel} to be enabled.
 */
private void enableComponentDependencies(ComponentModel requestedComponentModel) {
    final String requestComponentModelName = requestedComponentModel.getNameAttribute();
    final Set<DependencyNode> componentDependencies = dependencyResolver.resolveComponentDependencies(requestedComponentModel);
    final Set<DependencyNode> alwaysEnabledComponents = dependencyResolver.resolveAlwaysEnabledComponents();
    final ImmutableSet.Builder<DependencyNode> otherRequiredGlobalComponentsSetBuilder = ImmutableSet.<DependencyNode>builder().addAll(componentDependencies).addAll(alwaysEnabledComponents);
    if (requestComponentModelName != null && dependencyResolver.getApplicationModel().findTopLevelNamedComponent(requestComponentModelName).isPresent()) {
        otherRequiredGlobalComponentsSetBuilder.add(new DependencyNode(requestComponentModelName, TOP_LEVEL));
    }
    Set<DependencyNode> allRequiredComponentModels = resolveDependencies(otherRequiredGlobalComponentsSetBuilder.build());
    enableTopLevelElementDependencies(allRequiredComponentModels);
    enableInnerElementDependencies(allRequiredComponentModels);
    ComponentModel parentModel = requestedComponentModel.getParent();
    while (parentModel != null && parentModel.getParent() != null) {
        parentModel.setEnabled(true);
        parentModel = parentModel.getParent();
    }
    // Finally we set the requested componentModel as enabled as it could have been disabled when traversing dependencies
    requestedComponentModel.setEnabled(true);
    requestedComponentModel.executedOnEveryInnerComponent(componentModel -> componentModel.setEnabled(true));
    enableParentComponentModels(requestedComponentModel);
    // Mule root component model has to be enabled too
    this.dependencyResolver.getApplicationModel().getRootComponentModel().setEnabled(true);
}
Also used : ImmutableSet(com.google.common.collect.ImmutableSet) ComponentModel(org.mule.runtime.config.internal.model.ComponentModel)

Example 12 with ComponentModel

use of org.mule.runtime.config.internal.model.ComponentModel in project mule by mulesoft.

the class MacroExpansionModuleModel method getParameterChild.

private ComponentModel getParameterChild(Map<String, String> parameters, String wrapperParameters, String entryParameter) {
    ComponentModel.Builder parametersBuilder = new ComponentModel.Builder();
    parametersBuilder.setIdentifier(builder().namespace(CORE_PREFIX).name(wrapperParameters).build());
    parameters.forEach((paramName, paramValue) -> {
        ComponentModel.Builder parameterBuilder = new ComponentModel.Builder();
        parameterBuilder.setIdentifier(builder().namespace(CORE_PREFIX).name(entryParameter).build());
        parameterBuilder.addParameter(KEY_ATTRIBUTE_NAME, paramName, false);
        parameterBuilder.addParameter(VALUE_ATTRIBUTE_NAME, paramValue, false);
        parametersBuilder.addChildComponentModel(parameterBuilder.build());
    });
    ComponentModel parametersComponentModel = parametersBuilder.build();
    for (ComponentModel parameterComponentModel : parametersComponentModel.getInnerComponents()) {
        parameterComponentModel.setParent(parametersComponentModel);
    }
    return parametersComponentModel;
}
Also used : ModuleOperationMessageProcessorChainBuilder(org.mule.runtime.core.internal.processor.chain.ModuleOperationMessageProcessorChainBuilder) ComponentModel(org.mule.runtime.config.internal.model.ComponentModel)

Example 13 with ComponentModel

use of org.mule.runtime.config.internal.model.ComponentModel in project mule by mulesoft.

the class MacroExpansionModuleModel method extractProperties.

/**
 * Extracts the properties of the current <module/> if applies (it might not have a configuration in it)
 *
 * @param configRefName current <operation/> to macro expand, from which the config-ref attribute's value will be extracted.
 * @return a map with the name and values of the <module/>'s properties.
 */
private Map<String, String> extractProperties(Optional<String> configRefName) {
    Map<String, String> valuesMap = new HashMap<>();
    configRefName.ifPresent(configParameter -> {
        // look for the global element which "name" attribute maps to "configParameter" value
        ComponentModel configRefComponentModel = applicationModel.getRootComponentModel().getInnerComponents().stream().filter(componentModel -> looForConfiguration(componentModel).isPresent() && configParameter.equals(componentModel.getParameters().get(NAME_ATTRIBUTE))).findFirst().orElseThrow(() -> new IllegalArgumentException(format("There's no <%s:config> named [%s] in the current mule app", extensionModel.getXmlDslModel().getPrefix(), configParameter)));
        // as configParameter != null, a ConfigurationModel must exists
        final ConfigurationModel configurationModel = getConfigurationModel().get();
        valuesMap.putAll(extractParameters(configRefComponentModel, configurationModel.getAllParameterModels()));
        valuesMap.putAll(extractConnectionProperties(configRefComponentModel, configurationModel));
    });
    return valuesMap;
}
Also used : ConfigurationModel(org.mule.runtime.api.meta.model.config.ConfigurationModel) HashMap(java.util.HashMap) ComponentModel(org.mule.runtime.config.internal.model.ComponentModel)

Example 14 with ComponentModel

use of org.mule.runtime.config.internal.model.ComponentModel in project mule by mulesoft.

the class MacroExpansionModuleModel method expandOperations.

private void expandOperations(Set<String> moduleGlobalElementsNames) {
    applicationModel.executeOnEveryMuleComponentTree(containerComponentModel -> {
        HashMap<Integer, ComponentModel> componentModelsToReplaceByIndex = new HashMap<>();
        IntStream.range(0, containerComponentModel.getInnerComponents().size()).forEach(i -> {
            ComponentModel operationRefModel = containerComponentModel.getInnerComponents().get(i);
            lookForOperation(operationRefModel).ifPresent(operationModel -> {
                final String containerName = calculateContainerRootName(containerComponentModel, operationModel);
                final ComponentModel moduleOperationChain = createModuleOperationChain(operationRefModel, operationModel, moduleGlobalElementsNames, Optional.empty(), containerName);
                componentModelsToReplaceByIndex.put(i, moduleOperationChain);
            });
        });
        for (Map.Entry<Integer, ComponentModel> entry : componentModelsToReplaceByIndex.entrySet()) {
            entry.getValue().setParent(containerComponentModel);
            containerComponentModel.getInnerComponents().add(entry.getKey(), entry.getValue());
            containerComponentModel.getInnerComponents().remove(entry.getKey() + 1);
        }
        componentModelsToReplaceByIndex.clear();
    });
}
Also used : HashMap(java.util.HashMap) ComponentModel(org.mule.runtime.config.internal.model.ComponentModel) HashMap(java.util.HashMap) Map(java.util.Map) Collections.emptyMap(java.util.Collections.emptyMap)

Example 15 with ComponentModel

use of org.mule.runtime.config.internal.model.ComponentModel in project mule by mulesoft.

the class MacroExpansionModuleModel method extractParameters.

/**
 * Iterates over the collection of {@link ParameterModel}s making a clear distinction between {@link ParameterRole#BEHAVIOUR}
 * and {@link ParameterRole#CONTENT} or {@link ParameterRole#PRIMARY_CONTENT} roles, where the former maps to simple attributes
 * while the latter are child elements.
 * <p/>
 * If the value of the parameter is missing, then it will try to pick up a default value (also from the
 * {@link ParameterModel#getDefaultValue()})
 *
 * @param componentModel to look for the values
 * @param parameters collection of parameters to look for in the parametrized {@link ComponentModel}
 * @return a {@link Map} with the values to be macro expanded in the final mule application
 */
private Map<String, String> extractParameters(ComponentModel componentModel, List<ParameterModel> parameters) {
    Map<String, String> valuesMap = new HashMap<>();
    for (ParameterModel parameterExtension : parameters) {
        String paramName = parameterExtension.getName();
        String value = null;
        switch(parameterExtension.getRole()) {
            case BEHAVIOUR:
                if (componentModel.getParameters().containsKey(paramName)) {
                    value = componentModel.getParameters().get(paramName);
                }
                break;
            case CONTENT:
            case PRIMARY_CONTENT:
                final Optional<ComponentModel> childComponentModel = componentModel.getInnerComponents().stream().filter(cm -> paramName.equals(cm.getIdentifier().getName())).findFirst();
                if (childComponentModel.isPresent()) {
                    value = childComponentModel.get().getTextContent();
                }
                break;
        }
        if (value == null && (parameterExtension.getDefaultValue() != null)) {
            value = String.valueOf(parameterExtension.getDefaultValue());
        }
        if (value != null) {
            valuesMap.put(paramName, value);
        }
    }
    return valuesMap;
}
Also used : IntStream(java.util.stream.IntStream) ParameterModel(org.mule.runtime.api.meta.model.parameter.ParameterModel) OperationModel(org.mule.runtime.api.meta.model.operation.OperationModel) CORE_PREFIX(org.mule.runtime.internal.dsl.DslConstants.CORE_PREFIX) ParameterRole(org.mule.runtime.api.meta.model.parameter.ParameterRole) ConnectionProviderModel(org.mule.runtime.api.meta.model.connection.ConnectionProviderModel) VALUE_ATTRIBUTE_NAME(org.mule.runtime.internal.dsl.DslConstants.VALUE_ATTRIBUTE_NAME) HashMap(java.util.HashMap) Processor(org.mule.runtime.core.api.processor.Processor) ArrayList(java.util.ArrayList) CommonBeanDefinitionCreator(org.mule.runtime.config.internal.dsl.spring.CommonBeanDefinitionCreator) MODULE_OPERATION_CHAIN(org.mule.runtime.config.internal.model.ApplicationModel.MODULE_OPERATION_CHAIN) KEY_ATTRIBUTE_NAME(org.mule.runtime.internal.dsl.DslConstants.KEY_ATTRIBUTE_NAME) Map(java.util.Map) NAME_ATTRIBUTE(org.mule.runtime.config.internal.model.ApplicationModel.NAME_ATTRIBUTE) Collectors.toSet(java.util.stream.Collectors.toSet) ModuleOperationMessageProcessorChainBuilder(org.mule.runtime.core.internal.processor.chain.ModuleOperationMessageProcessorChainBuilder) Collections.emptyMap(java.util.Collections.emptyMap) I18nMessageFactory.createStaticMessage(org.mule.runtime.api.i18n.I18nMessageFactory.createStaticMessage) XmlExtensionModelProperty(org.mule.runtime.extension.api.property.XmlExtensionModelProperty) CoreEvent(org.mule.runtime.core.api.event.CoreEvent) MODULE_CONNECTION_GLOBAL_ELEMENT_NAME(org.mule.runtime.core.internal.processor.chain.ModuleOperationMessageProcessorChainBuilder.MODULE_CONNECTION_GLOBAL_ELEMENT_NAME) ApplicationModel(org.mule.runtime.config.internal.model.ApplicationModel) Set(java.util.Set) MuleRuntimeException(org.mule.runtime.api.exception.MuleRuntimeException) GlobalElementComponentModelModelProperty(org.mule.runtime.config.internal.dsl.model.extension.xml.property.GlobalElementComponentModelModelProperty) VARS(org.mule.runtime.api.el.BindingContextUtils.VARS) ConfigurationModel(org.mule.runtime.api.meta.model.config.ConfigurationModel) Collectors(java.util.stream.Collectors) String.format(java.lang.String.format) TestConnectionGlobalElementModelProperty(org.mule.runtime.config.internal.dsl.model.extension.xml.property.TestConnectionGlobalElementModelProperty) ExtensionModel(org.mule.runtime.api.meta.model.ExtensionModel) List(java.util.List) HasOperationModels(org.mule.runtime.api.meta.model.operation.HasOperationModels) PrivateOperationsModelProperty(org.mule.runtime.config.internal.dsl.model.extension.xml.property.PrivateOperationsModelProperty) ComponentModel(org.mule.runtime.config.internal.model.ComponentModel) OperationComponentModelModelProperty(org.mule.runtime.config.internal.dsl.model.extension.xml.property.OperationComponentModelModelProperty) Optional(java.util.Optional) ComponentIdentifier(org.mule.runtime.api.component.ComponentIdentifier) ComponentIdentifier.builder(org.mule.runtime.api.component.ComponentIdentifier.builder) MODULE_CONFIG_GLOBAL_ELEMENT_NAME(org.mule.runtime.core.internal.processor.chain.ModuleOperationMessageProcessorChainBuilder.MODULE_CONFIG_GLOBAL_ELEMENT_NAME) ParameterModel(org.mule.runtime.api.meta.model.parameter.ParameterModel) HashMap(java.util.HashMap) ComponentModel(org.mule.runtime.config.internal.model.ComponentModel)

Aggregations

ComponentModel (org.mule.runtime.config.internal.model.ComponentModel)41 HashMap (java.util.HashMap)14 List (java.util.List)13 Map (java.util.Map)13 SpringComponentModel (org.mule.runtime.config.internal.dsl.model.SpringComponentModel)13 Optional (java.util.Optional)11 MuleRuntimeException (org.mule.runtime.api.exception.MuleRuntimeException)11 Set (java.util.Set)9 ComponentIdentifier (org.mule.runtime.api.component.ComponentIdentifier)9 String.format (java.lang.String.format)8 ArrayList (java.util.ArrayList)8 I18nMessageFactory.createStaticMessage (org.mule.runtime.api.i18n.I18nMessageFactory.createStaticMessage)8 ExtensionModel (org.mule.runtime.api.meta.model.ExtensionModel)8 ConfigurationModel (org.mule.runtime.api.meta.model.config.ConfigurationModel)8 Collections.emptyMap (java.util.Collections.emptyMap)7 GlobalElementComponentModelModelProperty (org.mule.runtime.config.internal.dsl.model.extension.xml.property.GlobalElementComponentModelModelProperty)7 Optional.of (java.util.Optional.of)6 Collectors (java.util.stream.Collectors)6 ConnectionProviderModel (org.mule.runtime.api.meta.model.connection.ConnectionProviderModel)6 OperationComponentModelModelProperty (org.mule.runtime.config.internal.dsl.model.extension.xml.property.OperationComponentModelModelProperty)6