import { AbstractCommand } from '../AbstractCommand';
import { Document } from '../../core/models/Document';
import { Node } from '../../core/models/Node';
import { NodePath } from '../../core/models/NodePath';
/**
 * Base class for commands that replace entire nodes.
 * @author eric.wittmann@gmail.com
 * @extends AbstractCommand
 * @class
 */
export declare abstract class ReplaceNodeCommand<T extends Node> extends AbstractCommand {
    _nodePath: NodePath;
    _new: any;
    _old: any;
    constructor(old?: any, replacement?: any);
    /**
     * @see io.apicurio.datamodels.cmd.ICommand#execute(io.apicurio.datamodels.core.models.Document)
     * @param {Document} document
     */
    execute(document: Document): void;
    /**
     * @see io.apicurio.datamodels.cmd.ICommand#undo(io.apicurio.datamodels.core.models.Document)
     * @param {Document} document
     */
    undo(document: Document): void;
    /**
     * Removes the given node from the data model.
     * @param {Document} doc
     * @param {Node} node
     */
    abstract removeNode(doc: Document, node: T): any;
    /**
     * Adds the given node to the data model.
     * @param {Document} doc
     * @param {Node} node
     */
    abstract addNode(doc: Document, node: T): any;
    /**
     * Unmarshalls a node into the appropriate type.
     * @param {*} node
     * @param {Document} doc
     * @return {Node}
     */
    abstract readNode(doc: Document, node: any): T;
}
