/**
 * 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 Hashable } from '@finos/legend-shared';
import type { RelationType } from './RelationType.js';
import { DataProduct } from '../../dataProduct/DataProduct.js';
import { IngestDefinition } from '../ingest/IngestDefinition.js';
import type { Database } from '../store/relational/model/Database.js';
import { InstanceValue } from '../../valueSpecification/InstanceValue.js';
import type { ValueSpecificationVisitor } from '../../valueSpecification/ValueSpecification.js';
export type AccessorOwner = DataProduct | IngestDefinition | Database;
export declare abstract class Accessor implements Hashable {
    accessorOwner: string;
    schema: string | undefined;
    accessor: string;
    relationType: RelationType;
    parentElement: AccessorOwner;
    constructor(accessorOwner: string, schema: string | undefined, accessor: string, relationType: RelationType, parentElement: AccessorOwner);
    get path(): string[];
    get hashCode(): string;
    abstract get accessorOwnerLabel(): string;
    abstract get accessorLabel(): string;
    get schemaLabel(): string | undefined;
}
export declare class DataProductAccessor extends Accessor {
    parentElement: DataProduct;
    get accessorOwnerLabel(): string;
    get accessorLabel(): string;
    get schemaLabel(): string | undefined;
    get path(): string[];
}
export declare class IngestionAccessor extends Accessor {
    parentElement: IngestDefinition;
    get accessorOwnerLabel(): string;
    get accessorLabel(): string;
    get schemaLabel(): string | undefined;
}
export declare class RelationalStoreAccessor extends Accessor implements Hashable {
    parentElement: Database;
    get accessorOwnerLabel(): string;
    get accessorLabel(): string;
    get schemaLabel(): string | undefined;
}
/**
 * Returns the accessor item label for the given element owner.
 * Labels mirror the corresponding Accessor subclass `accessorLabel` getters,
 * which are the authoritative source but require a full Accessor instance to
 * call. Use this helper when only the owner element is available.
 */
export declare const getAccessorItemLabelForElement: (element: AccessorOwner) => string;
export declare class AccessorInstanceValue extends InstanceValue implements Hashable {
    values: Accessor[];
    constructor();
    get hashCode(): string;
    accept_ValueSpecificationVisitor<T>(visitor: ValueSpecificationVisitor<T>): T;
}
//# sourceMappingURL=Accessor.d.ts.map