All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.mule.extension.validation.internal.ValidationExtension Maven / Gradle / Ivy

/*
 * 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.extension.validation.internal;

import static org.mule.config.i18n.MessageFactory.createStaticMessage;
import org.mule.api.MuleContext;
import org.mule.api.MuleRuntimeException;
import org.mule.api.config.Config;
import org.mule.api.context.MuleContextAware;
import org.mule.api.lifecycle.Initialisable;
import org.mule.api.lifecycle.InitialisationException;
import org.mule.api.registry.MuleRegistry;
import org.mule.api.registry.RegistrationException;
import org.mule.extension.annotations.Extensible;
import org.mule.extension.annotations.Extension;
import org.mule.extension.annotations.Operations;
import org.mule.extension.annotations.Parameter;
import org.mule.extension.annotations.capability.Xml;
import org.mule.extension.annotations.param.Optional;
import org.mule.extension.introspection.Configuration;
import org.mule.extension.introspection.Operation;
import org.mule.extension.validation.api.ExceptionFactory;
import org.mule.extension.validation.api.Validator;
import org.mule.util.ObjectNameHelper;

import java.util.Locale;

/**
 * An extension which provides validation capabilities by exposing a series of
 * {@link Validator}s as {@link org.mule.extension.introspection.Extension} {@link Operation}s
 *
 * This class not only defines the extension but also acts as the only available {@link Configuration}
 * for it. It allows parametrizing the {@link Validator}s with custom {@link ExceptionFactory} and
 * i18n bundles (through a {@link I18NConfig}
 *
 * THe configured {@link ExceptionFactory} (either user provided or default) is registered into the
 * {@link MuleRegistry} allowing it to participate on the mule lifecycle.
 *
 * @since 3.7.0
 */
@Extension(name = "validation", description = "Mule Validation Extension", version = "3.7")
@Operations({CommonValidationOperations.class, CustomValidatorOperation.class, ValidationStrategies.class, NumberValidationOperation.class})
@Xml(schemaLocation = "http://www.mulesoft.org/schema/mule/validation", namespace = "validation", schemaVersion = "3.7")
@Extensible(alias = "validator-message-processor")
public class ValidationExtension implements Config, Initialisable, MuleContextAware
{

    public static final String DEFAULT_LOCALE = Locale.getDefault().getLanguage();
    private static final String EXCEPTION_FACTORY_PARAMETER_NAME = "exceptionFactory";

    private ValidationMessages messageFactory;
    private ExceptionFactory exceptionFactory;
    private MuleContext muleContext;

    @Parameter(alias = EXCEPTION_FACTORY_PARAMETER_NAME)
    @Optional
    private ExceptionFactorySource exceptionFactorySource;

    @Parameter(alias = "i18n")
    @Optional
    private I18NConfig i18nConfig;


    @Override
    public void initialise() throws InitialisationException
    {
        initialiseExceptionFactory();
        initialiseMessageFactory();
    }

    private void initialiseMessageFactory()
    {
        if (i18nConfig == null)
        {
            messageFactory = new ValidationMessages();
        }
        else
        {
            messageFactory = new ValidationMessages(i18nConfig.getBundlePath(), i18nConfig.getLocale());
        }
    }

    private void initialiseExceptionFactory() throws InitialisationException
    {
        if (exceptionFactorySource == null)
        {
            exceptionFactory = new DefaultExceptionFactory();
        }
        else
        {
            try
            {
                exceptionFactory = exceptionFactorySource.getObject(muleContext);
            }
            catch (Exception e)
            {
                throw new InitialisationException(e, this);
            }
        }

        try
        {
            ObjectNameHelper objectNameHelper = new ObjectNameHelper(muleContext);
            muleContext.getRegistry().registerObject(objectNameHelper.getUniqueName(EXCEPTION_FACTORY_PARAMETER_NAME), exceptionFactory);
        }
        catch (RegistrationException e)
        {
            throw new MuleRuntimeException(createStaticMessage("Could not register ExceptionFactory of class " + exceptionFactory.getClass().getName()), e);
        }
    }

    public ValidationMessages getMessageFactory()
    {
        return messageFactory;
    }

    @Override
    public void setMuleContext(MuleContext muleContext)
    {
        this.muleContext = muleContext;
    }

    public ExceptionFactory getExceptionFactory()
    {
        return exceptionFactory;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy