/*
 * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
 *
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License v. 2.0 which is available at
 * http://www.eclipse.org/legal/epl-2.0,
 * or the Eclipse Distribution License v. 1.0 which is available at
 * http://www.eclipse.org/org/documents/edl-v10.php.
 *
 * SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
 */

// Contributors:
//     rbarkhou - new Policy Config classes for XMLLogin XML Support
package org.eclipse.persistence.internal.sessions.factories.model.login;

public abstract class DocumentPreservationPolicyConfig {

    /**
     * Default constructor.
     */
    protected DocumentPreservationPolicyConfig() {
    }

    private NodeOrderingPolicyConfig m_nodeOrderingPolicy;

    public NodeOrderingPolicyConfig getNodeOrderingPolicy() {
        return m_nodeOrderingPolicy;
    }

    public void setNodeOrderingPolicy(NodeOrderingPolicyConfig value) {
        m_nodeOrderingPolicy = value;
    }

}
