/**
 * Copyright (c) 2020-present, Goldman Sachs
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
import { type SetImplementationVisitor, type SetImplementation, OperationSetImplementation, type PureInstanceSetImplementation, type FlatDataInstanceSetImplementation, type EnumerationMapping, type Property, type RelationalInstanceSetImplementation, type RootRelationalInstanceSetImplementation, type AggregationAwareSetImplementation, type PropertyMapping, type InstanceSetImplementation, type INTERNAL__UnresolvedSetImplementation, type Mapping, EmbeddedFlatDataPropertyMapping, Class, type INTERNAL__UnknownSetImplementation, type RelationFunctionInstanceSetImplementation } from '@finos/legend-graph';
import type { EditorStore } from '../../../EditorStore.js';
/**
 * Iterate through all properties (including supertypes' properties) of the set implementation
 * and add property mappings for each
 */
export declare const getDecoratedSetImplementationPropertyMappings: <T extends PropertyMapping>(setImp: InstanceSetImplementation, decoratePropertyMapping: (existingPropertyMappings: T[] | undefined, property: Property) => T[]) => T[];
export declare const getLeafSetImplementationsForClass: (mapping: Mapping, _class: Class) => SetImplementation[] | undefined;
/**
 * This logic helps making the mapping editor smart.
 * Its first purpose is to prepoluate empty property mapping so as to allow user
 * jump straight in to edit the property mappings without the need to hit button
 * like `add property mapping`.
 * Its second purpose is to modify the current mapping element in response to
 * changes in the graph.
 */
export declare class MappingElementDecorator implements SetImplementationVisitor<void> {
    editorStore: EditorStore;
    constructor(editorStore: EditorStore);
    visit_INTERNAL__UnknownSetImplementation(setImplementation: INTERNAL__UnknownSetImplementation): void;
    visitEnumerationMapping(enumerationMapping: EnumerationMapping): void;
    visit_OperationSetImplementation(setImplementation: OperationSetImplementation): void;
    visit_MergeOperationSetImplementation(setImplementation: OperationSetImplementation): void;
    visit_PureInstanceSetImplementation(setImplementation: PureInstanceSetImplementation): void;
    visit_FlatDataInstanceSetImplementation(setImplementation: FlatDataInstanceSetImplementation | EmbeddedFlatDataPropertyMapping): void;
    visit_EmbeddedFlatDataSetImplementation(setImplementation: EmbeddedFlatDataPropertyMapping): void;
    visit_RelationalInstanceSetImplementation(setImplementation: RelationalInstanceSetImplementation): void;
    visit_RootRelationalInstanceSetImplementation(setImplementation: RootRelationalInstanceSetImplementation): void;
    visit_AggregationAwareSetImplementation(setImplementation: AggregationAwareSetImplementation): void;
    visit_SetImplementation(setImplementation: SetImplementation): void;
    visit_INTERNAL__UnresolvedSetImplementation(setImplementation: INTERNAL__UnresolvedSetImplementation): void;
    visit_RelationFunctionInstanceSetImplementation(setImplementation: RelationFunctionInstanceSetImplementation): void;
}
/**
 * This is the cleanup for mapping elements decorated by {@link MappingElementDecorator}.
 */
export declare class MappingElementDecorationCleaner implements SetImplementationVisitor<void> {
    editorStore: EditorStore;
    constructor(editorStore: EditorStore);
    visit_INTERNAL__UnknownSetImplementation(setImplementation: INTERNAL__UnknownSetImplementation): void;
    visitEnumerationMapping(enumerationMapping: EnumerationMapping): void;
    visit_OperationSetImplementation(setImplementation: OperationSetImplementation): void;
    visit_MergeOperationSetImplementation(setImplementation: OperationSetImplementation): void;
    visit_PureInstanceSetImplementation(setImplementation: PureInstanceSetImplementation): void;
    visit_FlatDataInstanceSetImplementation(setImplementation: FlatDataInstanceSetImplementation | EmbeddedFlatDataPropertyMapping): void;
    visit_EmbeddedFlatDataSetImplementation(setImplementation: EmbeddedFlatDataPropertyMapping): void;
    visit_RelationalInstanceSetImplementation(setImplementation: RelationalInstanceSetImplementation): void;
    visit_RootRelationalInstanceSetImplementation(setImplementation: RootRelationalInstanceSetImplementation): void;
    visit_AggregationAwareSetImplementation(setImplementation: AggregationAwareSetImplementation): void;
    visit_SetImplementation(setImplementation: SetImplementation): void;
    visit_INTERNAL__UnresolvedSetImplementation(setImplementation: INTERNAL__UnresolvedSetImplementation): void;
    visit_RelationFunctionInstanceSetImplementation(setImplementation: RelationFunctionInstanceSetImplementation): void;
}
//# sourceMappingURL=MappingElementDecorator.d.ts.map