Navigation Menu

Skip to content

Commit

Permalink
MULE-8473: Configs should be optional when using Ext-api operations i…
Browse files Browse the repository at this point in the history
…n a flow
  • Loading branch information
marianogonzalez committed May 18, 2015
1 parent c88dd00 commit ffa7f69
Show file tree
Hide file tree
Showing 48 changed files with 1,389 additions and 695 deletions.
35 changes: 16 additions & 19 deletions extensions/validation/src/test/resources/basic-validations.xml
Expand Up @@ -11,58 +11,55 @@
<spring:bean id="customValidator" class="org.mule.extension.validation.BasicValidationTestCase$TestCustomValidator" />
</spring:beans>

<validation:config name="validation"/>

<flow name="email">
<validation:is-email email="#[payload]" config-ref="validation"/>
<validation:is-email email="#[payload]"/>
</flow>

<flow name="ip">
<validation:is-ip ip="#[payload]" config-ref="validation"/>
<validation:is-ip ip="#[payload]"/>
</flow>

<flow name="url">
<validation:is-url url="#[payload]" config-ref="validation" />
<validation:is-url url="#[payload]" />
</flow>

<flow name="time">
<validation:is-time time="#[payload]" pattern="#[pattern]" locale="#[java.util.Locale.getDefault().getLanguage()]" config-ref="validation"/>
<validation:is-time time="#[payload]" pattern="#[pattern]" locale="#[java.util.Locale.getDefault().getLanguage()]"/>
</flow>

<flow name="matchesRegex">
<validation:matches-regex value="#[payload]" regex="#[regexp]" caseSensitive="#[caseSensitive]"
config-ref="validation"/>
<validation:matches-regex value="#[payload]" regex="#[regexp]" caseSensitive="#[caseSensitive]"/>
</flow>

<flow name="size">
<validation:validate-size value="#[payload]" min="#[minLength]" max="#[maxLength]" config-ref="validation"/>
<validation:validate-size value="#[payload]" min="#[minLength]" max="#[maxLength]"/>
</flow>

<flow name="isTrue">
<validation:is-true expression="#[payload]" config-ref="validation"/>
<validation:is-true expression="#[payload]"/>
</flow>

<flow name="isFalse">
<validation:is-false expression="#[payload]" config-ref="validation"/>
<validation:is-false expression="#[payload]"/>
</flow>

<flow name="notEmpty">
<validation:is-not-empty value="#[payload]" config-ref="validation"/>
<validation:is-not-empty value="#[payload]"/>
</flow>

<flow name="empty">
<validation:is-empty value="#[payload]" config-ref="validation"/>
<validation:is-empty value="#[payload]"/>
</flow>

<flow name="isNull">
<validation:is-null value="#[payload]" config-ref="validation"/>
<validation:is-null value="#[payload]"/>
</flow>

<flow name="all">
<validation:all config-ref="validation">
<validation:all>
<validation:validations>
<validation:is-url url="#[url]" config-ref="validation"/>
<validation:is-email email="#[email]" config-ref="validation"/>
<validation:is-url url="#[url]"/>
<validation:is-email email="#[email]"/>
</validation:validations>
</validation:all>
</flow>
Expand All @@ -79,11 +76,11 @@
</flow>

<flow name="customValidationByClass">
<validation:custom-validator class="org.mule.extension.validation.BasicValidationTestCase$TestCustomValidator" message="#[customMessage]" config-ref="validation" />
<validation:custom-validator class="org.mule.extension.validation.BasicValidationTestCase$TestCustomValidator" message="#[customMessage]" />
</flow>

<flow name="customValidationByRef">
<validation:custom-validator ref="customValidator" config-ref="validation" />
<validation:custom-validator ref="customValidator" />
</flow>

</mule>
Expand Up @@ -5,11 +5,8 @@
xsi:schemaLocation="http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/validation http://www.mulesoft.org/schema/mule/validation/current/mule-validation.xsd">

<validation:config name="validator"/>


<flow name="byClassInstanceReused">
<validation:custom-validator class="org.mule.extension.validation.CustomValidatorInstanceReusedTestCase$TestValidator" config-ref="validator" />
<validation:custom-validator class="org.mule.extension.validation.CustomValidatorInstanceReusedTestCase$TestValidator"/>
</flow>


Expand Down
Expand Up @@ -5,10 +5,8 @@
xsi:schemaLocation="http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/validation http://www.mulesoft.org/schema/mule/validation/current/mule-validation.xsd">

<validation:config name="validation"/>

<flow name="validateNumber">
<validation:is-number value="#[payload]" minValue="#[minValue]" maxValue="#[maxValue]" numberType="#[numberType]" config-ref="validation"/>
<validation:is-number value="#[payload]" minValue="#[minValue]" maxValue="#[maxValue]" numberType="#[numberType]" />
</flow>

</mule>
Expand Up @@ -632,7 +632,7 @@ private void registerOperationType(String name, Operation operation)
complexContentExtension.setBase(base);
complexContent.setExtension(complexContentExtension);

Attribute configAttr = createAttribute(ATTRIBUTE_NAME_CONFIG, ATTRIBUTE_DESCRIPTION_CONFIG, false, SUBSTITUTABLE_NAME);
Attribute configAttr = createAttribute(ATTRIBUTE_NAME_CONFIG, ATTRIBUTE_DESCRIPTION_CONFIG, true, SUBSTITUTABLE_NAME);
complexContentExtension.getAttributeOrAttributeGroup().add(configAttr);

final ExplicitGroup all = new ExplicitGroup();
Expand Down

This file was deleted.

Expand Up @@ -33,7 +33,7 @@ final class ConfigurationBeanDefinitionParser extends BaseExtensionBeanDefinitio

ConfigurationBeanDefinitionParser(Configuration configuration)
{
super(ConfigurationFactoryBean.class);
super(ConfigurationInstanceProviderFactoryBean.class);
this.configuration = configuration;
}

Expand Down

This file was deleted.

@@ -0,0 +1,94 @@
/*
* Copyright (c) MuleSoft, Inc. All rights reserved. http://www.mulesoft.com
* The software in this package is published under the terms of the CPAL v1.0
* license, a copy of which has been included with this distribution in the
* LICENSE.txt file.
*/
package org.mule.module.extension.internal.config;

import static org.mule.MessageExchangePattern.REQUEST_RESPONSE;
import static org.mule.module.extension.internal.config.XmlExtensionParserUtils.getResolverSet;
import org.mule.DefaultMuleEvent;
import org.mule.DefaultMuleMessage;
import org.mule.api.MuleContext;
import org.mule.api.MuleEvent;
import org.mule.api.MuleRuntimeException;
import org.mule.api.construct.FlowConstruct;
import org.mule.extension.introspection.Configuration;
import org.mule.extension.runtime.ConfigurationInstanceProvider;
import org.mule.module.extension.internal.runtime.ConfigurationObjectBuilder;
import org.mule.module.extension.internal.runtime.DynamicConfigurationInstanceProvider;
import org.mule.module.extension.internal.runtime.StaticConfigurationInstanceProvider;
import org.mule.module.extension.internal.runtime.resolver.ResolverSet;

import org.springframework.beans.factory.FactoryBean;

/**
* A {@link FactoryBean} which returns a {@link ConfigurationInstanceProvider} that provides the actual instances
* that implement a given {@link Configuration}. Subsequent invokations to {@link #getObject()} method
* returns always the same {@link ConfigurationInstanceProvider}.
*
* @since 3.7.0
*/
final class ConfigurationInstanceProviderFactoryBean implements FactoryBean<ConfigurationInstanceProvider<Object>>
{

private final ConfigurationInstanceProvider<Object> configurationInstanceProvider;

ConfigurationInstanceProviderFactoryBean(String name,
Configuration configuration,
ElementDescriptor element,
MuleContext muleContext)
{
ResolverSet resolverSet = getResolverSet(element, configuration.getParameters());
ConfigurationObjectBuilder configurationObjectBuilder = new ConfigurationObjectBuilder(configuration, resolverSet);

if (resolverSet.isDynamic())
{
configurationInstanceProvider = new DynamicConfigurationInstanceProvider(name, configuration, configurationObjectBuilder, resolverSet);
}
else
{
Object configurationInstance = instantiateStaticConfiguration(muleContext, configurationObjectBuilder);
configurationInstanceProvider = new StaticConfigurationInstanceProvider<>(name, configuration, configurationInstance);
}
}

private Object instantiateStaticConfiguration(MuleContext muleContext, ConfigurationObjectBuilder configurationObjectBuilder)
{
try
{
return configurationObjectBuilder.build(getInitialiserEvent(muleContext));
}
catch (Exception e)
{
throw new MuleRuntimeException(e);
}
}

private MuleEvent getInitialiserEvent(MuleContext muleContext)
{
return new DefaultMuleEvent(new DefaultMuleMessage(null, muleContext), REQUEST_RESPONSE, (FlowConstruct) null);
}

@Override
public ConfigurationInstanceProvider<Object> getObject() throws Exception
{
return configurationInstanceProvider;
}

/**
* @return {@link ConfigurationInstanceProvider}
*/
@Override
public Class<ConfigurationInstanceProvider> getObjectType()
{
return ConfigurationInstanceProvider.class;
}

@Override
public boolean isSingleton()
{
return true;
}
}
Expand Up @@ -29,7 +29,6 @@
import org.springframework.beans.MutablePropertyValues;
import org.springframework.beans.PropertyValue;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.config.RuntimeBeanReference;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.support.ManagedList;
import org.springframework.beans.factory.support.ManagedMap;
Expand Down Expand Up @@ -111,10 +110,10 @@ private void parseConfigRef(Element element, BeanDefinitionBuilder builder)
String configRef = element.getAttribute(ATTRIBUTE_NAME_CONFIG);
if (StringUtils.isBlank(configRef))
{
throw new IllegalArgumentException("All operations must provide a config-ref element");
configRef = null;
}

builder.addConstructorArgValue(new RuntimeBeanReference(configRef));
builder.addConstructorArgValue(configRef);
}


Expand Down
Expand Up @@ -15,7 +15,6 @@
import org.mule.extension.introspection.Operation;
import org.mule.module.extension.internal.runtime.processor.OperationMessageProcessor;
import org.mule.module.extension.internal.runtime.resolver.ResolverSet;
import org.mule.module.extension.internal.runtime.resolver.ValueResolver;
import org.mule.util.ObjectNameHelper;

import java.util.List;
Expand All @@ -31,18 +30,18 @@
public class OperationFactoryBean implements FactoryBean<OperationMessageProcessor>
{

private final ValueResolver<Object> configurationValueResolver;
private final String configurationInstanceProviderName;
private final Operation operation;
private final ElementDescriptor element;
private final Map<String, List<MessageProcessor>> nestedOperations;

public OperationFactoryBean(ValueResolver<Object> configurationValueResolver,
public OperationFactoryBean(String configurationInstanceProviderName,
Operation operation,
ElementDescriptor element,
Map<String, List<MessageProcessor>> nestedOperations,
MuleContext muleContext)
{
this.configurationValueResolver = configurationValueResolver;
this.configurationInstanceProviderName = configurationInstanceProviderName;
this.operation = operation;
this.element = element;
this.nestedOperations = nestedOperations;
Expand All @@ -55,7 +54,7 @@ public OperationFactoryBean(ValueResolver<Object> configurationValueResolver,
public OperationMessageProcessor getObject() throws Exception
{
ResolverSet resolverSet = getResolverSet(element, operation.getParameters(), nestedOperations);
return new OperationMessageProcessor(configurationValueResolver, operation, resolverSet);
return new OperationMessageProcessor(operation, configurationInstanceProviderName, resolverSet);
}

/**
Expand Down

0 comments on commit ffa7f69

Please sign in to comment.