package sushi.transformation;
import java.io.Serializable;
import java.util.Map;
import sushi.event.collection.SushiTreeElement;
import sushi.transformation.collection.SushiPatternTree;
import sushi.transformation.element.externalknowledge.ExternalKnowledgeExpressionSet;
/**
* Provides methods to parse queries in EPL language from a transformation rule.
*/
public abstract class TransformationRuleParser {
/**
* Parses an EPL query from the given parameters.
*
* @param attributeIdentifiersAndExpressions pairs of attribute identifiers and expressions - determines what values are stored in the transformed events
* @param patternTree pattern that is used to listen for events, built up from the provided elements
* @return EPL query
*/
public abstract String parseRule(SushiPatternTree patternTree, Map<String, String> attributeIdentifiersAndExpressions, Map<String, ExternalKnowledgeExpressionSet> attributeIdentifiersAndExpressionSets);
/**
* Parses the pattern part of an EPL query.
*
* @param element root element of the pattern tree
* @return pattern part of EPL query
*/
protected abstract String buildPatternString(SushiTreeElement<Serializable> element);
/**
* Parses the value selection part of an EPL query.
*
* @param attributeIdentifiersAndExpressions pairs of attribute identifiers and expressions - determines what values are stored in the transformed events
* @param attributeIdentifiersAndExpressionSets pairs of attribute identifiers and sets of expressions determining the fetch of external knowledge
* @return value selection part of EPL query
*/
protected abstract String buildValueSelectionString(Map<String, String> attributeIdentifiersAndExpressions, Map<String, ExternalKnowledgeExpressionSet> attributeIdentifiersAndExpressionSets);
/**
* Parses the external knowledge information for the value selection part of an EPL query.
*
* @param externalKnowledge sets of expressions determining the fetch of external knowledge
* @return external knowledge information part of value selection part of EPL query
*/
protected abstract String buildValueSelectionStringFromExternalKnowledge(ExternalKnowledgeExpressionSet externalKnowledge);
}