import { Document } from '../models/Document';
import { Extension } from '../models/Extension';
import { Node } from '../models/Node';
import { ValidationProblem } from '../models/ValidationProblem';
import { Contact } from '../models/common/Contact';
import { ExternalDocumentation } from '../models/common/ExternalDocumentation';
import { IDefinition } from '../models/common/IDefinition';
import { Info } from '../models/common/Info';
import { License } from '../models/common/License';
import { Operation } from '../models/common/Operation';
import { Parameter } from '../models/common/Parameter';
import { Schema } from '../models/common/Schema';
import { SecurityRequirement } from '../models/common/SecurityRequirement';
import { SecurityScheme } from '../models/common/SecurityScheme';
import { Tag } from '../models/common/Tag';
import { IVisitor } from '../visitors/IVisitor';
/**
 * Constructor.
 * @class
 * @author eric.wittmann@gmail.com
 */
export declare class DataModelWriter implements IVisitor {
    _result: any;
    _modelIdToJS: any;
    constructor();
    /**
     * Resets the visitor.
     * @private
     */
    reset(): void;
    /**
     * Gets the result of the writing.
     * @return {*}
     */
    getResult(): any;
    updateIndex(node: Node, json: any): void;
    writeExtraProperties(json: any, node: Node): void;
    /**
     * Lookup the parent node via modelId if it exists (we already processed it).
     * Caller must provide the parent object as a second argument for cases when it does not exist.
     * @param {number} modelId
     * @param {*} jsonDefault not null
     * @return {*}
     */
    lookup(modelId: number, jsonDefault: any): any;
    lookupParentJson$io_apicurio_datamodels_core_models_Node(node: Node): any;
    lookupParentJson$io_apicurio_datamodels_core_models_Node$java_lang_Object(node: Node, jsonDefault: any): any;
    lookupParentJson(node?: any, jsonDefault?: any): any;
    /**
     * @see io.apicurio.datamodels.core.visitors.IVisitor#visitDocument(io.apicurio.datamodels.core.models.Document)
     * @param {Document} node
     */
    visitDocument(node: Document): void;
    /**
     * Writes the document node info into the given json object.
     * @param {Document} node
     * @param {*} json
     */
    writeDocument(node: Document, json: any): void;
    /**
     * @see io.apicurio.datamodels.core.visitors.IVisitor#visitExtension(io.apicurio.datamodels.core.models.Extension)
     * @param {Extension} node
     */
    visitExtension(node: Extension): void;
    /**
     * @see io.apicurio.datamodels.core.visitors.IVisitor#visitInfo(io.apicurio.datamodels.core.models.common.Info)
     * @param {Info} node
     */
    visitInfo(node: Info): void;
    /**
     * @see io.apicurio.datamodels.core.visitors.IVisitor#visitContact(io.apicurio.datamodels.core.models.common.Contact)
     * @param {Contact} node
     */
    visitContact(node: Contact): void;
    /**
     * @see io.apicurio.datamodels.core.visitors.IVisitor#visitLicense(io.apicurio.datamodels.core.models.common.License)
     * @param {License} node
     */
    visitLicense(node: License): void;
    /**
     * @see io.apicurio.datamodels.core.visitors.IVisitor#visitTag(io.apicurio.datamodels.core.models.common.Tag)
     * @param {Tag} node
     */
    visitTag(node: Tag): void;
    /**
     * @see io.apicurio.datamodels.core.visitors.IVisitor#visitSecurityRequirement(io.apicurio.datamodels.core.models.common.SecurityRequirement)
     * @param {SecurityRequirement} node
     */
    visitSecurityRequirement(node: SecurityRequirement): void;
    /**
     * @see io.apicurio.datamodels.core.visitors.IVisitor#visitExternalDocumentation(io.apicurio.datamodels.core.models.common.ExternalDocumentation)
     * @param {ExternalDocumentation} node
     */
    visitExternalDocumentation(node: ExternalDocumentation): void;
    /**
     * @see io.apicurio.datamodels.core.visitors.IVisitor#visitOperation(io.apicurio.datamodels.core.models.common.Operation)
     * @param {Operation} node
     */
    visitOperation(node: Operation): void;
    writeOperation(json: any, node: Operation): void;
    /**
     * @see io.apicurio.datamodels.core.visitors.IVisitor#visitParameter(io.apicurio.datamodels.core.models.common.Parameter)
     * @param {Parameter} node
     */
    visitParameter(node: Parameter): void;
    writeParameter(json: any, node: Parameter): void;
    /**
     * @see io.apicurio.datamodels.core.visitors.IVisitor#visitSchema(io.apicurio.datamodels.core.models.common.Schema)
     * @param {Schema} node
     */
    visitSchema(node: Schema): void;
    doVisitSchema(node: Schema, parentPropertyName: string, isCollection: boolean): void;
    writeSchema(json: any, node: Schema): void;
    /**
     * @see io.apicurio.datamodels.core.visitors.IVisitor#visitValidationProblem(io.apicurio.datamodels.core.models.ValidationProblem)
     * @param {ValidationProblem} problem
     */
    visitValidationProblem(problem: ValidationProblem): void;
    /**
     * @see io.apicurio.datamodels.core.visitors.IVisitor#visitSecurityScheme(io.apicurio.datamodels.core.models.common.SecurityScheme)
     * @param {SecurityScheme} node
     */
    visitSecurityScheme(node: SecurityScheme): void;
    writeSecurityScheme(json: any, node: SecurityScheme): void;
    addSecuritySchemeToParent(parent: any, json: any, node: SecurityScheme): void;
    /**
     * @see io.apicurio.datamodels.core.visitors.IVisitor#visitSchemaDefinition(io.apicurio.datamodels.core.models.common.IDefinition)
     * @param {*} node
     */
    visitSchemaDefinition(node: IDefinition): void;
    addSchemaDefinitionToParent(parent: any, json: any, node: IDefinition): void;
    /**
     * @see io.apicurio.datamodels.core.visitors.IVisitor#visitParameterDefinition(io.apicurio.datamodels.core.models.common.IDefinition)
     * @param {*} node
     */
    visitParameterDefinition(node: IDefinition): void;
    addParameterDefinitionToParent(parent: any, json: any, node: IDefinition): void;
}
