+ public DataTree create(final DataTreeConfiguration treeConfig, final EffectiveModelContext initialSchemaContext) {
+ return createDataTree(treeConfig, initialSchemaContext, true);
+ }
+
+ @Override
+ public DataTree create(final DataTreeConfiguration treeConfig, final EffectiveModelContext initialSchemaContext,
+ final NormalizedNodeContainer<?, ?, ?> initialRoot) throws DataValidationFailedException {
+ final DataTree ret = createDataTree(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;
+ }
+
+ @Activate
+ @SuppressWarnings("static-method")
+ void activate() {
+ LOG.info("In-memory Data Tree activated");
+ }
+
+ @Deactivate
+ @SuppressWarnings("static-method")
+ void deactivate() {
+ LOG.info("In-memory Data Tree deactivated");
+ }
+
+ private static @NonNull DataTree createDataTree(final DataTreeConfiguration treeConfig,
+ final EffectiveModelContext 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 @NonNull NormalizedNode<?, ?> createRoot(final DataNodeContainer schemaNode,
+ final YangInstanceIdentifier path) {
+ if (path.isEmpty()) {
+ checkArgument(schemaNode instanceof ContainerLike,
+ "Conceptual tree root has to be a container, not %s", schemaNode);
+ return ROOT_CONTAINER;
+ }