/*
* Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0 which accompanies this distribution,
* and is available at http://www.eclipse.org/legal/epl-v10.html
*/
package org.opendaylight.yangtools.yang.data.api.schema.tree;
import com.google.common.annotations.Beta;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNodeContainer;
import org.opendaylight.yangtools.yang.model.api.SchemaContext;
/**
* Factory interface for creating data trees.
*/
public interface DataTreeFactory {
/**
* Create a new data tree.
* @param type
* Tree type.
* @return A data tree instance.
*
* @deprecated Use {@link #create(DataTreeConfiguration)} instead.
*/
@Deprecated
DataTree create(TreeType type);
/**
* Create a new data tree rooted at a particular node.
* @param treeType
* Tree type.
* @param rootPath
* Root.
* @return A data tree instance.
*
* @deprecated Use {@link #create(DataTreeConfiguration)} instead.
*/
@Deprecated
DataTree create(TreeType treeType, YangInstanceIdentifier rootPath);
/**
* Create a new data tree based on specified configuration, with a best-guess root. Use this method only if you
* do not have a corresponding SchemaContext handy. Mandatory nodes whose enforcement point is the root node will
* not be enforced even if some are present in the SchemaContext and validation is requested in configuration.
*
* @param treeConfig
* Tree configuration.
* @return A data tree instance.
* @throws NullPointerException if treeConfig is null
*/
DataTree create(DataTreeConfiguration treeConfig);
/**
* Create a new data tree based on specified configuration, with a root node derived from the schema context lookup
* of the configuration. Mandatory nodes whose enforcement point is the root node will not be enforced even if some
* are present in the SchemaContext and validation is requested in configuration.
*
* @param treeConfig
* Tree configuration.
* @return A data tree instance.
* @throws NullPointerException if any of the arguments are null
* @throws IllegalArgumentException if tree configuration does not match the SchemaContext, for example by root path
* referring to a node which does not exist in the SchemaContext
*/
@Beta
DataTree create(DataTreeConfiguration treeConfig, SchemaContext initialSchemaContext);
/**
* Create a new data tree based on specified configuration, with the specified node.
*
* @param treeConfig
* Tree configuration.
* @return A data tree instance.
* @throws DataValidationFailedException if initial root is not valid according to the schema context
* @throws NullPointerException if any of the arguments are null
* @throws IllegalArgumentException if a mismatch between the arguments is detected
*/
@Beta
DataTree create(DataTreeConfiguration treeConfig, SchemaContext initialSchemaContext,
NormalizedNodeContainer<?, ?, ?> initialRoot) throws DataValidationFailedException;
}