/*
* 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.policy;
import org.mule.runtime.api.component.location.ComponentLocation;
import org.mule.runtime.core.api.Event;
import org.mule.runtime.core.api.processor.Processor;
import java.util.Map;
/**
* Manager for handling policies in Mule.
*
* Implementation of this class will be used to lookup for {@code Policy}s that must be applied to {@code MessageSource}es or
* {@code Processor}s.
*
* @since 4.0
*/
public interface PolicyManager {
/**
* Creates a policy to be applied to a source. The creation must have into consideration the {@code sourceIdentifier} to find specific
* policies applied to that source and also the {@code sourceEvent} which will be used to extract data to match against the policies
* pointcuts.
*
* @param sourceLocation the source location.
* @param sourceEvent the event generated from the source.
* @param flowExecutionProcessor the processor that executes the flow.
* @param messageSourceResponseParametersProcessor processor to generate the response and error response parameters of the source.
* @return a {@link SourcePolicy} associated to that source.
*/
SourcePolicy createSourcePolicyInstance(ComponentLocation sourceLocation, Event sourceEvent,
Processor flowExecutionProcessor,
MessageSourceResponseParametersProcessor messageSourceResponseParametersProcessor);
/**
* Creates a policy to be applied to an operation. The creation must have into consideration the {@code operationIdentifier} to find specific
* policies applied to that operation and also the {@code operationParameters} which will be used to extract data to match against the policies
* pointcuts.
*
* @param operationLocation component location of the operation.
* @param operationEvent the event used to execute the operation.
* @param operationParameters the set of parameters to use to execute the operation.
* @param operationExecutionFunction the function that executes the operation.
* @return a {@link OperationPolicy} associated to that source.
*/
OperationPolicy createOperationPolicy(ComponentLocation operationLocation, Event operationEvent,
Map<String, Object> operationParameters,
OperationExecutionFunction operationExecutionFunction);
/**
* Disposes any resource associated to the given {@code executionIdentifier}. Any exception generated by this method will be
* just logged and discarded.
*
* @param executionIdentifier identifier used for previous policies executions.
*/
void disposePoliciesResources(String executionIdentifier);
}