import { CdmAttributeContext, cdmAttributeContextType, ProjectionAttributeState, ProjectionContext, ResolvedAttribute } from '../../internal';
/**
 * Attribute context tree builder for projection operations that involve a search for a previously held attribute name.
 * There are three types of attribute context nodes created out of such operations:
 *
 *     Search For:
 *         The name of the attribute to search for, whether it's the current name of the attribute or a previously held name.
 *         Ex. A name in the "includeAttributes" list (for Include) or the name specified in "applyTo" (for Rename)
 *
 *     Found:
 *         The name of the attribute that was found out of the search for name. Because this is the current name of the attribute,
 *         the search for name and the found name can be different. The search for name can return multiple found names.
 *         Ex. Given Rename(A->a) and then Include(A), searchFor = "A" and found = "a"
 *
 *     Action:
 *         The name of the attribute resulting out of the action (operation).
 *         Ex. Given Rename(A->a), the action/operation is to rename "A" to "a" so action (the resulting attribute) = "a"
 *
 * Put together, the resulting attribute context will look like "../operation/index{n}/[name of operation]/[searchFor]/[found]/[action]"
 *     Ex. ../operation/index1/operationRenameAttributes/A/a/aa, given searchFor = "A", found = "a", action = "aa"
 *
 * If searchFor and found or found and action have the same name, then we just collapse the nodes
 *     Ex. ../operation/index1/operationRenameAttributes/A/a/a -> ../operation/index1/operationRenameAttributes/A/a/
 *     Ex. ../operation/index1/operationIncludeAttributes/B/B -> ../operation/index1/operationIncludeAttributes/B
 *
 * @internal
 */
export declare class ProjectionAttributeContextTreeBuilder {
    /**
     * Root node to build the attribute context tree under
     */
    private root;
    /**
     * Mapping between a "search for" string to the attribute context parameter created out of it
     */
    private searchForToSearchForAttrCtxParam;
    /**
     * Mapping between a "search for" attribute context parameter to all attribute context parameters created out of the
     * "found" attributes
     */
    private searchForAttrCtxParamToFoundAttrCtxParam;
    /**
     * Mapping between a "found" attribute context parameter to the attribute context parameter created out of the
     * "action" attribute
     */
    private foundAttrCtxParamToActionAttrCtxParam;
    /**
     * Mapping between an "action" attribute context parameter to the resolved attribute resulting out of the action
     */
    private actionAttrCtxParamToResAttr;
    /**
     * Mapping between an "action" attribute context parameter to the context to consider 'where from' lineage
     */
    private actionAttrCtxParamToLineageOut;
    /**
     * Mapping between an "action" attribute context parameter to the context that wants to point here for lineage
     */
    private actionAttrCtxParamToLineageIn;
    constructor(root: CdmAttributeContext);
    /**
     * Creates the attribute context parameters for the searchFor, found, and action nodes and then stores them in different maps.
     * The maps are used when constructing the actual attribute context tree.
     * @param searchFor The 'search for' string
     * @param found The projection attribute state that contains the "found" attribute
     * @param resAttrFromAction The attribute context type to give the "action" attribute context parameter
     * @param attrCtxType The attribute context type to give the "action" attribute context parameter
     *
     * @internal
     */
    createAndStoreAttributeContextParameters(searchFor: string, found: ProjectionAttributeState, resAttrFromAction: ResolvedAttribute, attrCtxType: cdmAttributeContextType, lineageOut: CdmAttributeContext, lineageIn: CdmAttributeContext): void;
    /**
     * Takes all the stored attribute context parameters, creates attribute contexts from them, and then constructs the tree.
     *
     * @param projCtx The projection context
     *
     * @internal
     */
    constructAttributeContextTree(projCtx: ProjectionContext): void;
}
