/*
* 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.runtime.core.api.registry;
import org.mule.runtime.api.metadata.DataType;
import org.mule.runtime.core.api.transformer.Transformer;
/**
* A TransformResolver is used to find transformers that match a certain criteria in the registry. Implementations of this
* interface will use some or all of the information passed in to discover a matching transformer.
* <p/>
* Any implementations of this interface must be registered with the registry before it will get picked up. Typically this is done
* using the <code>registry-bootstrap.properties</code>.
*
* @since 3.0.0
*/
public interface TransformerResolver {
/**
* Possible registry actions that occur that will trigger an event fired via
* {@link #transformerChange(Transformer, RegistryAction)} method.
*/
enum RegistryAction {
/**
* signals that a transformer was added to the registry
*/
ADDED,
/**
* signals that a transformer was removed from the registry
*/
REMOVED
}
/**
* Responsible for finding a transformer with the given criteria. Note that if a transformer is not found null should be return,
* an exception must NOT be thrown.
*
* @param source information about the source object including the object iself
* @param result information about the result object to transform to
* @return a transformer from the registry that matches the criteria or null if a transformer was not found
* @throws ResolverException Only thrown if an exception is thrown during the search, this exception will just be a wrapper
*/
Transformer resolve(DataType source, DataType result) throws ResolverException;
/**
* A callback that is called when a transformer is registered or unregistered from the registry. This is used in situations
* where the resolver caches transformers and the cache needs to be updated.
*
* @param transformer the transformer that has changed
* @param registryAction whether the transformer was added or removed
*/
void transformerChange(Transformer transformer, RegistryAction registryAction);
}