+ public DataTree create(final DataTreeConfiguration treeConfig, final SchemaContext initialSchemaContext,
+ final NormalizedNodeContainer<?, ?, ?> initialRoot) throws DataValidationFailedException {
+ final DataTree ret = create(treeConfig, initialSchemaContext, false);
+
+ final DataTreeModification mod = ret.takeSnapshot().newModification();
+ mod.write(YangInstanceIdentifier.empty(), initialRoot);
+ mod.ready();
+
+ ret.validate(mod);
+ final DataTreeCandidate candidate = ret.prepare(mod);
+ ret.commit(candidate);
+ return ret;
+ }
+
+ private static DataTree create(final DataTreeConfiguration treeConfig, final SchemaContext initialSchemaContext,
+ final boolean maskMandatory) {
+ final DataSchemaNode rootSchemaNode = getRootSchemaNode(initialSchemaContext, treeConfig.getRootPath());
+ final NormalizedNode<?, ?> rootDataNode = createRoot((DataNodeContainer)rootSchemaNode,
+ treeConfig.getRootPath());
+ return new InMemoryDataTree(TreeNodeFactory.createTreeNode(rootDataNode, Version.initial()), treeConfig,
+ initialSchemaContext, rootSchemaNode, maskMandatory);
+ }
+
+ private static DataSchemaNode getRootSchemaNode(final SchemaContext schemaContext,
+ final YangInstanceIdentifier rootPath) {
+ final DataSchemaContextTree contextTree = DataSchemaContextTree.from(schemaContext);
+ final Optional<DataSchemaContextNode<?>> rootContextNode = contextTree.findChild(rootPath);
+ checkArgument(rootContextNode.isPresent(), "Failed to find root %s in schema context", rootPath);
+
+ final DataSchemaNode rootSchemaNode = rootContextNode.get().getDataSchemaNode();
+ checkArgument(rootSchemaNode instanceof DataNodeContainer, "Root %s resolves to non-container type %s",
+ rootPath, rootSchemaNode);
+ return rootSchemaNode;